gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:57 25 4
gpt4 key购买 nike

我需要同时播放 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

关于python - 在 python 中使用多处理同时播放 2个声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com