Wiki Python Fr   LeSon UserPreferences
 
HelpContents FindPage Diffs Info Edit Subscribe XML Print View

Cette page présente les mécanisme de manipulation du son en général avec Python.

  1. Controler le son avec Python
    1. Carte son
    2. Lecture de fichiers musicaux
    3. Utilisation du module ossaudiodev
  2. Les modules

1. Controler le son avec Python

1.1. Carte son

Python (s/Linux) est très bien outillé pour envoyer des sons vers la carte son (ou le bidule qui en tient lieu) : utiliser le module ossaudiodev. Sous d'autres systèmes, les résultats sont mitigés : le fonctionnement est clignotant (comme il s'agit de systèmes fermés, c'est normal).

1.2. Lecture de fichiers musicaux

Python contient des modules devant permettre le traitement de fichiers audio dans les formats habituels (wav, etc). Mais j'ai souvent obtenu des résultats erronés ; je préfère donc effectuer les transformations et projections avec sox, play ou ecasound. Si on a le temps on peut utiliser des applications comme audacity, mais les temps de chargement d'un fichier audio est beaucoup plus lent qu'avec ecasound qui fonctionne en ligne de commande.

1.3. Utilisation du module ossaudiodev

Le module ossaudiodev est très pratique pour écouter des sons soit directement produits en Python soit provenant de fichiers du disque dur.

Voici une des nombreuses possibilités pour se servir du module:

#-*-coding:utf-8-*- 

import ossaudiodev as OSS

class Audio:
    """
    classe pour envoyer des sons à la carte son (sur un Linux)."""

    def __init__(self, canaux = 2, sr = 44100, format = OSS.AFMT_S16_LE):
        """instancie une sortie stéréo.
        Inutile de faire un try, puisque ça n'ira pas ..."""
        if canaux <> 2 :
            print "Audio : version stéréo uniquement"
            canaux = 2
        try:
            self.f = OSS.open("w")
        except IOError:
             print "Le /dev/dsp est déjà ouvert quelque part ..."
             print "Il faut absolument voir où, sinon on risque d'avoir des ennuis permanents"
             return
        self.f.setfmt(format)
        self.f.channels(canaux)
        self.f.speed(sr)
        
    def close(self):
        "ferme la sortie stéréo."
        try:
            self.f.close()
        except:
            print "sortie Audio non ouverte ?"

    def play(self, w):
  """
        envoie l'array w sur la sortie son.
        On suppose que l'array w a le format
        requis (p.ex. integer 16 bits, 44100 échantillons/sec
        pour la stéréo traditionnelle. Sinon il faut
        faire quelques travaux préalables.
        """
        try:
            self.f.write(w)
        except IOError:
            print "Comment ?"

Ce bout de code est à prendre comme une proposition pour une charpente à adapter à son propre projet.

rb

2. Les modules


CategoryCategory

PythonPowered