sound - Cómo reproducir el sonido en Python SIN interrumpir la música/otros sonidos de la reproducción
reproducir audio en python (2)
Estoy trabajando en un temporizador en python que suena un carillón cuando el tiempo de espera ha terminado. Yo uso el siguiente código:
from wave import open as wave_open
from ossaudiodev import open as oss_open
def _play_chime():
"""
Play a sound file once.
"""
sound_file = wave_open(''chime.wav'',''rb'')
(nc,sw,fr,nf,comptype, compname) = sound_file.getparams( )
dsp = oss_open(''/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 = sound_file.readframes(nf)
sound_file.close()
dsp.write(data)
dsp.close()
Funciona bastante bien, a menos que otro dispositivo ya esté emitiendo sonido.
¿Cómo podría hacer básicamente lo mismo (en Linux) sin tener el requisito previo de que no se reproduce ningún sonido?
Si crees que el proceso requeriría una API para garantizar la mezcla de software, sugiere un método :)
Thx por el apoyo :)
El hardware y los controladores modernos admiten varias transmisiones. Entonces, a menos que esté ejecutando hardware antiguo o un controlador defectuoso, debería funcionar de todos modos.
Una vez dicho esto, ALSA puede darle más control que OSS. La mayoría de los núcleos enviados hoy en día son compatibles con ambos.
La respuesta fácil es "Cambiar de OSS a PulseAudio". (O configure ALSA para usar dmix, u obtenga una tarjeta de sonido con mejores controladores de Linux ...)
La respuesta más complicada es que tu código ya funciona de la manera que quieres ... en algunas tarjetas de sonido. Los controladores OSS pueden exponer los mezcladores de hardware para que pueda reproducir varias secuencias de audio simultáneamente, o pueden exponer una sola transmisión que da como resultado el audio de bloqueo que ve en su sistema. La única solución correcta aquí es usar una API que garantice la mezcla de software.