0
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。但是,输出不是。为什么会这样?我期待着有人的回答。非常感谢你。

4

1 回答 1

2

免责声明:未经测试,只是查看了 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()
于 2017-08-16T13:04:59.550 回答