我一直在尝试使用 python 中的“pyAudio”模块进行实时音频信号处理。我所做的是一个从麦克风读取音频数据并通过耳机播放的简单案例。我尝试使用以下代码(Python 和 Cython 版本)。认为它有效,但不幸的是它停滞而且不够流畅。我怎样才能改进代码,使其顺利运行。我的电脑是 i7、8GB 内存。
蟒蛇版本
import pyaudio
import numpy as np
RATE = 16000
CHUNK = 256
p = pyaudio.PyAudio()
player = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, output=True,
frames_per_buffer=CHUNK)
stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
player.write(np.fromstring(stream.read(CHUNK),dtype=np.int16))
stream.stop_stream()
stream.close()
p.terminate()
Cython 版本
import pyaudio
import numpy as np
cdef int RATE = 16000
cdef int CHUNK = 1024
cdef int i
p = pyaudio.PyAudio()
player = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, output=True, frames_per_buffer=CHUNK)
stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
for i in range(500): #do this for 10 seconds
player.write(np.fromstring(stream.read(CHUNK),dtype=np.int16))
stream.stop_stream()
stream.close()
p.terminate()
原文由 Sajil C K 发布,翻译遵循 CC BY-SA 4.0 许可协议
我相信您缺少
CHUNK
作为player.write
调用的第二个参数。另外,不确定它的格式错误。但是
player.write
需要跳转到for
循环And per pyaudio site you need to have
RATE / CHUNK * RECORD_SECONDS
and notRECORD *RATE/CHUNK
aspython
*
multiplication before/
division .Finally, you may want to increase
rate
to44100
,CHUNK
to1024
andCHANNEL
to2
为了更好的保真度。