import pyaudio
import numpy as np
import time
RATE=44100
pa = pyaudio.PyAudio()
stream = pa.open(format=pyaudio.paFloat32,
channels=1,
rate=RATE,
output=True)
t = time.time()
output = np.ones(44100)*100
stream.write(output)
print(time.time()-t)
这是一个测试代码。采用44100采样率,在播放44100个采样时,时间成本应为1s。但是,输出不是。为什么会这样?我期待着有人的回答。非常感谢你。
答案 0 :(得分:1)
免责声明:未经测试,只是查看了API。
stream.write()
需要一个定义格式的字符串(此处为:32bit-floatingpoint)。但是你将一个句柄传递给一个numpy数组。 PyAudio(可能)默认将传递的值转换为字符串。输出的字符串表示形式无需进一步修改:
array([ 100., 100., 100., ..., 100., 100., 100.])
或42字节或2.3毫秒的播放时间。
试试stream.write('\0\0\0\0'*44100)
。要使用np.ones()
或numpy-arrays,您必须使用正确的数据类型(您将格式定义为paFloat32
):
output = np.ones(44100, dtype=np.float32).tobytes()