为什么程序在使用 PyAudio 以 44100 采样率播放 44100 个样本时不会花费 1 秒?
Why does not program cost 1 sec when it plays 44100 samples with 44100 sample rate by using PyAudio?
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 sample rate,播放44100 samples时,耗时应该是1s。但是,输出不是。为什么会这样?我期待有人的回答。非常感谢。
免责声明:未经测试,只是查看了 API。
stream.write()
需要定义格式的字符串(此处:32 位浮点数)。但是您将句柄传递给 numpy 数组。 PyAudio(可能)默认将传递的值转换为字符串。未经进一步修改的输出的字符串表示形式为:
array([ 100., 100., 100., ..., 100., 100., 100.])
或 42 字节或 2.3 毫秒播放时间。
尝试stream.write('[=13=][=13=][=13=][=13=]'*44100)
。通常要使用 np.ones()
或 numpy 数组,您必须使用正确的数据类型(您将格式定义为 paFloat32
):
output = np.ones(44100, dtype=np.float32).tobytes()
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 sample rate,播放44100 samples时,耗时应该是1s。但是,输出不是。为什么会这样?我期待有人的回答。非常感谢。
免责声明:未经测试,只是查看了 API。
stream.write()
需要定义格式的字符串(此处:32 位浮点数)。但是您将句柄传递给 numpy 数组。 PyAudio(可能)默认将传递的值转换为字符串。未经进一步修改的输出的字符串表示形式为:
array([ 100., 100., 100., ..., 100., 100., 100.])
或 42 字节或 2.3 毫秒播放时间。
尝试stream.write('[=13=][=13=][=13=][=13=]'*44100)
。通常要使用 np.ones()
或 numpy 数组,您必须使用正确的数据类型(您将格式定义为 paFloat32
):
output = np.ones(44100, dtype=np.float32).tobytes()