PyAudio与pyaudio.paInt16一起工作,但是当我尝试使用pyaudio.paInt8或pyaudio.paUInt8时,我只能听到噪音。
p = pyaudio.PyAudio()
inStream = p.open(format=pyaudio.paInt8,
channels=1,
rate=8000,
input=True)
outStream = p.open(format=pyaudio.paInt8,
channels=1,
rate=8000,
output=True)
print(p.get_default_input_device_info())
while True:
data = inStream.read(160)
print(data)
# outStream.write(data)
以下是我的mic信息:
{'index': 1, 'structVersion': 2, 'name': 'Headset Microphone (INZONE H9 /', 'hostApi': 0, 'maxInputChannels': 1, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.09, 'defaultLowOutputLatency': 0.09, 'defaultHighInputLatency': 0.18, 'defaultHighOutputLatency': 0.18, 'defaultSampleRate': 44100.0}
以及音频内容:
b'\x14\x00\x00\x00\x00\x00\x00\x00p;\xfd\xcc\xd0\x01\x00\x00\xf0<\xfd\xcc\xd0\x01\x00\x00\xf0;\xfd\xcc\xd0\x01\x00\x00\xb06\xfd\xcc\xd0\x01\x00\x000\xb5\x1b\xcf\xd0\x01\x00\x00\x90\xe4\x1b\xcf\xd0\x01\x00\x000\x05\xfd\xcc\xd0\x01\x00\x00pq\xff\xcc\xd0\x01\x00\x00\xc0+\x1b\xcf\xd0\x01\x00\x00\x10,\x1b\xcf\xd0\x01\x00\x00p\xbc\x1b\xcf\xd0\x01\x00\x00\xb0\xbc\x1b\xcf\xd0\x01\x00\x000\xbb\x1b\xcf\xd0\x01\x00\x00\xf0\xbc\x1b\xcf\xd0\x01\x00\x000\xbd\x1b\xcf\xd0\x01\x00\x00p\xbd\x1b\xcf\xd0\x01\x00\x00pr\xff\xcc\xd0\x01\x00\x00\xb0\x1f\x05\xcd\xd0\x01\x00\x00\xa0\xe3\x1b\xcf\xd0\x01\x00\x00'
即使麦克风关闭,音频内容也是相同的。
1条答案
按热度按时间wnrlj8wa1#
你的代码很好。此问题是由PortAudio库中的错误引起的;它会在某些不支持paInt 8的系统上触发(详情如下)。
在PortAudio中修复此错误之前,我建议您切换到不同的格式;例如,如果您的设备支持paUInt 8(无符号8位,其中128是“接地”),则可以使用它并手动将数据转换为paInt 8(有符号8位):
详细内容:
一些系统(例如我测试过的Linux VM)不支持paInt 8(签名的8位,又名S8)。在我的测试中,PortAudio尝试录制为paInt 16,然后转换为paInt 8并抖动以提高质量;然而,该代码未被实现,因此它产生垃圾。