Cette page présente les mécanisme de manipulation du son en général avec Python.
Sommaire
Controler le son avec Python
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).
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.
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
- self.f = OSS.open("w")
- 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
- "ferme la sortie stéréo." try:
- self.f.close()
- print "sortie Audio non ouverte ?"
- """instancie une sortie stéréo. Inutile de faire un try, puisque ça n'ira pas ..."""
- """
- 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)
- print "Comment ?"}}}
- 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:
Ce bout de code est à prendre comme une proposition pour une charpente à adapter à son propre projet.
rb
Les modules
http://www.diotavelli.net/tagedit.html : module pour lire et éditer les tags des fichiers ogg, flac et mp3.
http://www.andrewchatham.com/pyogg/ : module pour manipuler les fichier ogg (encoder, décoder, etc...)
http://pygame.org/ : module pour la conception de jeux (basé sur SDL). Possède des modules pour gérer le son multipistes, un mixer programmable, supporte les formats WAV/MP3/OGG...