es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reproduzca un sonido de forma asíncrona en un bucle while.

¿Cómo puedo reproducir un sonido de forma asíncrona en un bucle while, pero sin que se solapen los sonidos? Esperar a que termine la reproducción anterior y solo entonces reproducirla de nuevo, y así sucesivamente, hasta que el bucle while esté en ejecución. Y, por supuesto, el bucle while debe seguir ejecutándose mientras se reproduce el sonido.

import time
from playsound import playsound

while True:
time.sleep(0.1)
playsound(‘sound.wav’, block=False) # Por favor, sugiere otro módulo, “playsound” dejó de funcionar y me rendí en arreglarlo.
print(‘prueba de que el bucle while se está ejecutando mientras suena el sonido’)

edit: Una cosa más, la reproducción no debe encolarse, una vez que el bucle while se detenga, la reproducción también debe detenerse (solo dejar que el sonido en reproducción se reproduzca hasta el final)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para reproducir un sonido de forma asíncrona en un bucle while sin superposición, puedes usar el módulo sounddevice en Python, que te permite controlar la transmisión de audio en tiempo real. Aquí tienes un fragmento de código de ejemplo que logra esto:

    import time
    import sounddevice as sd
    
    def reproducir_sonido(nombre_archivo):
        datos, frecuencia_muestreo = sd.read(nombre_archivo, dtype='float32')
        sd.play(datos, frecuencia_muestreo)
    
    while True:
        reproducir_sonido('sonido.wav')
        print('prueba de que el bucle while se está ejecutando mientras el sonido se reproduce')
        # esperar a que el sonido termine de reproducirse antes de continuar
        sd.wait()
    

    En este código, definimos una nueva función reproducir_sonido que lee los datos de audio de un archivo usando sounddevice.read, y luego los reproduce usando sounddevice.play. Es importante esperar también a que el sonido termine de reproducirse usando sounddevice.wait antes de continuar con el bucle while.

    Puedes modificar la función reproducir_sonido para aceptar otros argumentos dependiendo del archivo de audio específico con el que estés trabajando. Además, asegúrate de detener la reproducción de audio y cerrar la transmisión de audio una vez que el bucle while haya terminado, para evitar posibles fugas de memoria o problemas de audio.

Comments are closed.