gpt4 book ai didi

python - 如何在不缓冲的情况下播放许多numpy数组

转载 作者:行者123 更新时间:2023-12-03 00:31:49 25 4
gpt4 key购买 nike

我想播放许多numpy数组,但是有一些缓冲。例如,

import numpy as np
import sounddevice as sd

fs=44100
data = 0.5*np.random.uniform(-1,1,fs)
for i in range(5):
sd.play(data, 44100)

在这种情况下,我只使用了一个 numpy数组,但想连续播放。

实际上,我尝试使用麦克风录制声音十微秒,并使用某些应用程序对其进行转换(添加正弦波...),然后连续播放转换后的数据。

如何摆脱缓冲?

最佳答案

如果要连续录制和播放,则应使用回调函数。
看看example in the documentation,我在这里重复一遍:

import sounddevice as sd
duration = 5.5 # seconds

def callback(indata, outdata, frames, time, status):
if status:
print(status)
outdata[:] = indata

with sd.Stream(channels=2, callback=callback):
sd.sleep(int(duration * 1000))

此示例仅将输入缓冲区复制到输出缓冲区,但是您当然可以在将信号分配回输出之前任意操作该信号。

如果您的任何处理依赖于固定的块大小,则应在 sd.Stream()构造函数中显式设置块大小,例如 blocksize=1024

并且不要忘记总是检查 status参数,因为如果您在回调中做过多的工作(或者块大小太小),这会通知您是否发生了缓冲区超限/不足。

关于python - 如何在不缓冲的情况下播放许多numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410379/

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