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.

Fusionar pistas de audio en Python para reproducir al mismo tiempo.

Estoy trabajando en un software de música que utiliza archivos de audio individuales para cada nota en la escala. Luego, uso el módulo playsound para reproducir estas notas en la secuencia construida por el usuario.

Esto funciona bien, pero surgen problemas cuando intento reproducir varias notas al mismo tiempo. He intentado usar la multihilo pero las pistas aún se reproducen una tras otra. ¿Hay alguna forma en que pueda reproducir dos archivos de audio juntos o fusionarlos?

Si no, ¿qué más puedo hacer? Generar ondas sinusoidales es problemático, pero estoy abierto a sugerencias si los archivos no funcionan…

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para reproducir múltiples archivos de audio juntos en Python

    Si tiene problemas para reproducir varios archivos de audio juntos utilizando el módulo playsound, es posible que desee considerar el uso del módulo pydub en su lugar. Aquí le mostramos cómo podría fusionar dos archivos de audio utilizando pydub:

    from pydub import AudioSegment
    
    # Cargar archivos de audio
    audio_1 = AudioSegment.from_wav("audio_1.wav")
    audio_2 = AudioSegment.from_wav("audio_2.wav")
    
    # Fusionar archivos de audio
    merged_audio = audio_1.overlay(audio_2)
    
    # Exportar archivo de audio fusionado
    merged_audio.export("merged_audio.wav", format="wav")
    

    Luego puede utilizar el módulo playsound para reproducir el archivo merged_audio:

    from playsound import playsound
    
    playsound("merged_audio.wav")
    

    Alternativamente, podría usar el módulo pyaudio para reproducir los archivos de audio simultáneamente. Aquí hay un ejemplo:

    import pyaudio
    import wave
    
    # Cargar archivos de audio
    audio_1 = wave.open("audio_1.wav", "rb")
    audio_2 = wave.open("audio_2.wav", "rb")
    
    # Configurar PyAudio
    p = pyaudio.PyAudio()
    stream_1 = p.open(format=p.get_format_from_width(audio_1.getsampwidth()),
                      channels=audio_1.getnchannels(),
                      rate=audio_1.getframerate(),
                      output=True)
    stream_2 = p.open(format=p.get_format_from_width(audio_2.getsampwidth()),
                      channels=audio_2.getnchannels(),
                      rate=audio_2.getframerate(),
                      output=True)
    
    # Reproducir archivos de audio de manera simultánea
    chunk_1 = 1024
    chunk_2 = 1024
    data_1 = audio_1.readframes(chunk_1)
    data_2 = audio_2.readframes(chunk_2)
    
    while data_1 != b'' or data_2 != b'':
        stream_1.write(data_1)
        stream_2.write(data_2)
        data_1 = audio_1.readframes(chunk_1)
        data_2 = audio_2.readframes(chunk_2)
    
    # Cerrar los flujos de PyAudio
    stream_1.stop_stream()
    stream_1.close()
    stream_2.stop_stream()
    stream_2.close()
    p.terminate()
    

    Este código cargará dos archivos de audio (audio_1.wav y audio_2.wav) y los reproducirá simultáneamente utilizando PyAudio. Puede ajustar las variables chunk_1 y chunk_2 para controlar el tamaño del búfer de reproducción.

Comments are closed.