Skip to main content
 首页 » 编程设计

python之在 python 中使用多处理同时播放 2个声音

2025年05月04日19zengkefu

我需要同时播放 2 个声音,使用多处理而不是线程,看看它是否解决了线程按顺序而不是并行播放音频的问题。我猜这是由于 python 中的全局解释器锁 (GIL)。

我添加了 a question 2 天前,但我的描述过于复杂。这是简单的版本:

音频被导入为 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) 

请您参考如下方法:

如果您想控制两个声音的相对时间(例如,它们应该同时开始),使用多个进程可能不是一个好的解决方案。您应该在应用程序中混合信号并写出单个音频流。

由于您使用的是 audiolab,因此您已经拥有 numpy 数组中的数据。这为您提供了混合音频所需的所有灵 active :

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