103 votes

Jouer un son avec Python

Quel est le moyen le plus simple de lire un fichier son (.wav) en Python ? Par "le plus simple", j'entends à la fois le plus indépendant des plates-formes et celui qui nécessite le moins de dépendances. pygame est certainement une option, mais cela semble excessif pour un simple son.

103voto

orestis Points 3398

Pour Windows, vous pouvez utiliser winsound. Il est intégré dans

import winsound, sys

def beep(sound):
    winsound.PlaySound('%s.wav' % sound, winsound.SND_FILENAME)

if __name__ == '__main__':
    beep(sys.argv[1])

Vous devriez pouvoir utiliser ossaudiodev pour linux :

from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
  from ossaudiodev import AFMT_S16_NE
except ImportError:
  if byteorder == "little":
    AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
  else:
    AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()

(Crédit pour ossaudiodev : Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html )

30voto

csexton Points 8089

La boîte à outils du son du goûter peut lire les fichiers wav, au et mp3.

s = Sound() 
s.read('sound.wav') 
s.play()

28voto

Fillip Points 71

Cela semble ridicule et tiré par les cheveux mais vous pouvez toujours utiliser Windows (ou tout autre système d'exploitation que vous préférez) pour gérer le son pour vous !

import os
os.system("start C:/thepathyouwant/file")

Simple, pas d'extensions, un peu lent et junky, mais qui fonctionne.

16voto

Peter Shinners Points 1865

Utiliser définitivement Pyglet pour ça. C'est un gros paquet, mais c'est du pur python, sans modules d'extension. Ce sera certainement le plus facile pour le déploiement. Il est également doté d'un excellent support des formats et des codecs.

import pyglet

music = pyglet.resource.media('music.mp3')
music.play()

pyglet.app.run()

5voto

Rizwan Kassim Points 2467

L'exemple sonore de pyMedia fait juste que . Cela devrait être tout ce dont vous avez besoin.

import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X