使用 Python 读取连接到 4x1 USB 集线器的麦克风

问题描述

我正在开展一个需要一系列麦克风的声源本地化项目。我有 4 个麦克风,带有连接到 USB 音频适配器的音频插孔。最后,我使用 4x1 USB 集线器将所有麦克风适配器组件连接到我的 PC,以使用 Python PyAudio 模块读取传入信号。

这是我的配置:

enter image description here

这是我的 Python 代码

import pyaudio
import wave

CHUNK = 2
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 8900
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "output.wav"
NUM_OF_MICS = 4

p = pyaudio.PyAudio()

# Create a stream for each microphone with the IDs 1,2,3,4
streams = [p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK,input_device_index=idx) for idx in range(1,NUM_OF_MICS + 1)]

print("* recording")

# Record 2 seconds of Audio for each
frames = []
for j in range(NUM_OF_MICS):
    row = []
    for i in range(0,int(RATE / CHUNK * RECORD_SECONDS)):
        row.append(streams[j].read(CHUNK,exception_on_overflow=False))
    frames.append(row)

for stream in streams:
    stream.stop_stream()
    stream.close()

p.terminate()

print("* done recording")

# Save audio with the names {1,4}_output.wav
for j in range(NUM_OF_MICS):
    wf = wave.open(str(j) + "_" + WAVE_OUTPUT_FILENAME,'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames[j]))
    wf.close()

看看这个问题,当我只选择其中之一并开始仅使用它进行录音时,我能够清楚地读取麦克风输出。但是,当我处理上面的代码时,名称为 {0,2}_output.wav 的录音听起来不错,但其他 - {1,3}_output.wav 只包含杂乱的声音(至少这是我听到的) .

我已经分别测试了所有插头和设备,它们都可以正常工作。我愿意接受建议。

编辑:

当我只将 2 个麦克风连接到 HUB 并设置变量 NUM_OF_MICS = 2 时,我会正常收到两种声音 {0,1}_output.wav。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)