小编fun*_*ore的帖子

如何在Pyaudio回调模式下处理in_data?

我正在python中进行信号处理项目.到目前为止,我在非阻塞模式下取得了一些成功,但它给输出带来了相当大的延迟和削波.

我想使用Pyaudio和Scipy.Signal实现一个简单的实时音频过滤器,但在pyaudio示例中提供的回调函数中,当我想读取in_data时我无法处理它.尝试以各种方式转换它但没有成功.

这是我想要实现的代码(尽快从麦克风,过滤器和输出中读取数据):

import pyaudio
import time
import numpy as np
import scipy.signal as signal
WIDTH = 2
CHANNELS = 2
RATE = 44100

p = pyaudio.PyAudio()
b,a=signal.iirdesign(0.03,0.07,5,40)
fulldata = np.array([])

def callback(in_data, frame_count, time_info, status):
    data=signal.lfilter(b,a,in_data)
    return (data, pyaudio.paContinue)

stream = p.open(format=pyaudio.paFloat32,
                channels=CHANNELS,
                rate=RATE,
                output=True,
                input=True,
                stream_callback=callback)

stream.start_stream()

while stream.is_active():
    time.sleep(5)
    stream.stop_stream()
stream.close()

p.terminate()
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

python pyaudio

5
推荐指数
1
解决办法
9070
查看次数

回叫电话之间的时间?

我有一个主要使用PyAudio的实验室项目,为了进一步了解它的工作方式,我进行了一些测量,在这种情况下,回调之间的时间(使用回调模式).

我计时了,得到了一个有趣的结果

(@ 256块大小,44.1k fs):0.0099701; 0.0000365; 0.0000201; 0.0201579

这种模式一直在继续.

在两个较长的呼叫之间,我们有两个较短的呼叫,有时较长的呼叫较短(请注意,我在程序中没有做任何其他事情而不是回调时间).

如果我们对此进行平均,我们会得到所需的回调时间:

1/44100*256(约5.8ms)

这是我的测量可视化: 在此输入图像描述

那么有人可以解释一下这里究竟发生了什么?

portaudio pyaudio

4
推荐指数
1
解决办法
1279
查看次数

标签 统计

pyaudio ×2

portaudio ×1

python ×1