如何在没有缓冲的情况下播放多个numpy数组

2024-03-29 13:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想玩很多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数组,但希望连续播放。你知道吗

实际上,我试着用麦克风录下几十微秒的声音,用一些应用程序进行转换(添加正弦波…),并连续播放转换后的数据。你知道吗

我如何摆脱缓冲?你知道吗


Tags: inimportnumpyfordataasnprange
1条回答
网友
1楼 · 发布于 2024-03-29 13:27:29

如果要连续录制和播放,应该使用回调函数。 看看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参数,因为如果在回调中做了太多的工作(或者块大小太小),这会通知您是否发生了缓冲区溢出/不足。你知道吗

相关问题 更多 >