Riproduci un suono con Python



Answers

Per Windows, è possibile utilizzare winsound. È integrato

import winsound

winsound.PlaySound('sound.wav', winsound.SND_FILENAME)

Dovresti essere in grado di usare ossaudiodev per 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:
  from sys import byteorder
  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()

(Credito per ossaudiodev: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html )

Question

Questa domanda ha già una risposta qui:

Qual è il modo più semplice per riprodurre un file audio (.wav) in Python? Per semplicità intendo sia la maggior parte indipendente dalla piattaforma che richiede la minore dipendenza. pygame è certamente un'opzione, ma sembra eccessivo per il solo suono.




Per gli utenti Linux, se è necessaria una manipolazione dei dati pcm di basso livello, provare il modulo alsaaudio . Esiste anche un esempio di playwav.py all'interno del pacchetto.




Utilizzare sicuramente Pyglet per questo. È una specie di grande pacchetto, ma è puro python senza moduli di estensione. Questo sarà sicuramente il più facile per l'implementazione. Ha anche un ottimo supporto per formati e codec.

import pyglet

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

pyglet.app.run()



L'esempio sonoro di pyMedia fa proprio questo . Questo dovrebbe essere tutto ciò di cui hai bisogno.

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 )



Mi piace pygame e il comando seguente dovrebbe funzionare:

pygame.init()
pygame.mixer.Sound('sound.wav').play()

ma non su nessuno dei miei computer, e c'è un aiuto limitato sull'argomento. edit: ho capito perché il suono Pygame non funziona per me, non sta caricando la maggior parte dei suoni correttamente, l'attributo 'length' è ~ 0,0002 quando li carico. magari caricarli usando qualcosa di diverso da mygame lo faranno morking più in generale.

con pyglet sto ricevendo un errore di risorsa non trovato Usando l'esempio sopra, wigh entrambi i percorsi relativi e completi ai file.

utilizzando pyglet.media.load() invece di pyglet.resource.media() mi consente di caricare i file.

ma sound.play() riproduce solo la prima frazione di secondo del file, a meno che non esegua pyglet.app.run() che blocca tutto il resto ...




Related