我需要同时播放2个声音,使用多处理而不是线程,以查看它是否解决了线程按顺序而不是并行播放音频的问题。我猜它是由于python中的全局解释器锁(GIL)。
我在2天前添加了a question,但我的描述过于复杂。这是简单的版本:
音频作为numpy数组导入。我拿这个数组并使用scikits.audiolab模块播放它:
import scikits.audiolab as audiolab
# This is how I import my wav file. "frames" is the numpy array, "fs" = sampling
# frequency, "encoder" = quantizing at 16 bits
frames, fs, encoder = audiolab.wavread('audio.wav')
# This is how I play my wav file. audiolab plays the frames array at a frequency of
# 44100 Hz
audiolab.play(frames, fs=44100)
没关系,但这是我需要帮助的:使用多处理同时播放2个文件。
frames1, fs1, encoder1 = audiolab.wavread('audio1.wav')
frames2, fs2, encoder2 = audiolab.wavread('audio2.wav')
audiolab.play(frames1, fs=44100)
audiolab.play(frames2, fs=44100)
答案 0 :(得分:3)
答案 1 :(得分:3)
如果你想控制两个声音的相对时间(例如,它们应该同时启动),使用多个进程可能不是一个好的解决方案。您应该在应用程序中混合信号并写出单个音频流。
由于您使用的是audiolab,因此您已经拥有numpy数组中的数据。这为您提供了混合音频所需的所有灵活性:
frames1, fs1, encoder1 = audiolab.wavread('audio1.wav')
frames2, fs2, encoder2 = audiolab.wavread('audio2.wav')
mixed = frames1 + frames2
audiolab.play(mixed, fs=44100)
如果这导致音频信号被剪辑(您听到咔嗒声/砰砰声),您可能需要在混音前预先缩放数据:
mixed = frames1 / 2 + frames2 / 2
..如果声音长度不一样,可能需要多做一些工作:
mixed = np.zeros(max(len(frames1), len(frames2)), dtype=frames1.dtype)
mixed[:len(frames1)] += frames1 / 2
mixed[:len(frames2)] += frames2 / 2