[Python] Audio.

Nicola Larosa nico a tekNico.net
Gio 4 Apr 2013 15:46:27 CEST


Gabriel Battaglia (Kriyaban) wrote:
> Mi interessa famigliarizzare con qualche modulo che si occupa di
> audio management. Ho dato una scorsa ai risultati ottenuti cercando
> audio su www.python.org ed ho ricevuto una valanga di informazioni.
> Ci sono molti moduli che se ne occupano, da Pygame ad Audiere... a
> Pyaudio eccetera. Scegliere è difficile, soprattutto quando le
> competenze iniziali sono basse come le mie. Parecchi progetti inoltre,
> sembrano essere abandonware, e mi dispiacerebbe buttarmi in qualcosa
> che non viene più aggiornato o la cui compatibilità con le nuove
> versioni di Python potrebbe non essere più garantita.

Sì, la situazione dell'audio in Python non è mai stata fantastica, purtroppo.


> Ecco dunque le necessità basilari che avrei:
> 
> 1. Poter caricare un file audio ed averlo a disposizione come
> oggetto.
> - Più sono i formati supportati, specialmente se compressi, meglio
> sarà.

In passato ho usato Python Audio Tools
<http://audiotools.sourceforge.net/> e sembra ancora manutenuto. E`
scritto piuttosto bene e ben documentato, e supporta molti formati di
file. Non fa molto più che caricare e salvare, però.


> 2. Poter generare, da una formula matematica o da un valore di
> frequenza hz, un tempo e delle costanti per la forma d'onda, dei toni
> da poter usare come oggetti audio o da poter scrivere su file.

Questi calcoli puoi farli con librerie matematiche generiche come NumPy.

Ecco un vecchio articolo (usa Numeric, un antenato di NumPy), forse
ancora interessante:

Some Notes on Basic Sound Frequency Analysis On Linux
<http://www.integratedprocess.com/sigproc.html>


> 3. Poter usare un numero n di questi oggetti audio, tutti
> indipendenti l'uno dall'altro.
> 4. Poter decidere, per ogni oggetto audio, proprietà come volume,
> panning stereo, pitch, play, pausa, stop, resume.
> 5. Poter leggere dall'oggetto ogni stato di cui al punto 4.

Per questo tipo di cose lo strumento principe è OpenAL. Purtroppo tutti i
wrapper per Python sono morti o dormienti. :-/

L'unico accesso manutenuto a OpenAL da Python è ben nascosto in Pyglet
<http://pyglet.org/>, una libreria per scrivere giochi che usa OpenGL,
vedi <http://pyglet.org/doc/programming_guide/sound_and_video.html>.

Nel sorgente è contenuto un esempio, soundscape, molto carino, con varie
sorgenti sonore parametrizzate, e funziona bene.

Un altro strumento, più limitato ma forse più adatto alle tue esigenze, è
PyAudio (che citavi) <http://people.csail.mit.edu/hubert/pyaudio/>, un
wrapper alla v.19 di PortAudio. E` manutenuto e funziona anche su Python 3.3.

Infine potresti usare un bestione come GStreamer che fa un miliardo di
cose ed ha dei wrapper per Python, PyGST <http://pygstdocs.berlios.de/>.

Queste sono le opzioni di cui sono a conoscenza, spero ti siano utili. Se
trovi qualcos'altro d'interessante facci sapere, mi raccomando! :-)

-- 
Nicola Larosa - http://www.tekNico.net/

You should demand open source in your router, open source in your oper-
ating system, and open source in any application software that is impor-
tant to your life. Because if you don't own it, it will surely own you.
 - Eric Raymond, "Cisco provides a lesson", July 2012


Maggiori informazioni sulla lista Python