我正在尝试将音频录制到raspberry pi上,但是遇到了一个问题。当我在PyAudio中使用paFloat32和np.frombuffer(np.float32)时,我得到了很好的音频。但是如果我使用paInt16和int16,我得到了垃圾静态。
此处为最小代码
import pyaudio
import numpy as np
import scipy.io.wavfile as wf
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=2,
rate=16000,
input=True,
input_device_index=0,
frames_per_buffer=1024)
frames = [[],[]] # Initialize array to store frames
print("recording...")
for i in range(0, 128):
data = stream.read(1024)
decoded = np.frombuffer(data, np.float32)
decodedSplit = np.stack((decoded[::2], decoded[1::2]), axis=0) # channels on separate axes
frames = np.append(frames, decodedSplit, axis=1)
stream.close()
p.terminate()
wf.write('test.wav', 16000, frames.T)
据我所知,将paFloat32更改为paInt16,将np.float32更改为np.int16是我所需要做的全部工作,但是这些工作都不起作用。声卡是否可能有问题,或者是配置错误?我已经盯着这个问题看了两天,现在卡住了。同样,float工作得很完美,但是下一段代码依赖于其他人为int16编写的库
1条答案
按热度按时间4urapxun1#
我没有尝试让float32工作,而是在HudsonHuang's Github中找到了一个float到pcmint16的转换器
由此,我能够重写记录方法以使用以下格式