python - 当使用PyAudio以44100采样率播放44100个采样时,为什么编程不会花费1秒钟的时间?

标签 python audio pyaudio sample-rate

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

最佳答案

免责声明:未经测试,只是研究了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()

关于python - 当使用PyAudio以44100采样率播放44100个采样时,为什么编程不会花费1秒钟的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714061/

相关文章:

audio - 在树莓派 Windows IOT 上录制 mp3 格式的音频文件

python - 递增地将 numpy.arrays 附加到保存文件

python list 索引超出范围错误

python - 需要控制pydot边长

android - 适用于Eclipse的Android SDK中的慢速按钮触发

ios - 随时间获取两个频率的幅度

python - pyaudio 流中的数据是什么意思?

python - PyAudio 回调仅被调用一次

python - 如何重命名将使用以下程序下载的 .wav 文件?

python - 管理多个 settings.py 文件