对于鼓机在Python中同时播放多个wav文件

时间:2017-03-09 20:46:35

标签: python audio pyaudio pydub

我想播放不同长度的不同wav文件"同一时间"彼此独立,就像一个真正的鼓组。

我找到了不同的音频控制库,比如PyAudio,Pydub等等,我觉得这个问题的解决方法是线程化......但它根本没有播放声音

from pydub import AudioSegment
from pydub.playback import play
import thread

def play_sound(f_directory,f_file):
    audio = AudioSegment.from_file(f_directory+f_file)
    play(audio)

thread.start_new_thread(play_sound,("drum samples/","ride_crash.wav"))
thread.start_new_thread(play_sound,("drum samples/","crash_hi.wav"))
thread.start_new_thread(play_sound,("drum samples/","kick.wav"))

如果我将此代码修改为此

from pydub import AudioSegment
from pydub.playback import play
import thread

def play_sound(f_directory,f_file):
    audio = AudioSegment.from_file(f_directory+f_file)
    play(audio)

thread.start_new_thread(play_sound("drum samples/","ride_crash.wav"))
thread.start_new_thread(play_sound("drum samples/","crash_hi.wav"))
thread.start_new_thread(play_sound("drum samples/","kick.wav"))

它只播放第一个。

我使用PyDub而不是PyAudio的原因是我认为使用PyDub要容易得多,但对于这种情况可能没用。我也使用了叠加,但问题是,它只在第一个文件的持续时间播放所有文件。

我想知道,问题是什么或请问,让我知道是否有更好的解决方案,也许是另一个库,但如果有可能我想避免PyGame或Pyglet等...因为我认为这个会减慢我的计划。如果没有,我期待它。

1 个答案:

答案 0 :(得分:1)

多线程不是解决方案,因为据我所知,PyDub使用的所有播放方法仅限于单个流

我担心你毕竟需要使用更低级别的api,这样你就可以同时打开多个音频通道。也许你可以通过从同一个Pyaudio上下文中打开多个流来自己使用pyaudio

我自己采取了不同的路线;我将所有样本混合在一起形成一个结果输出样本,该样本通过单个输出流播放。