Python 从多个麦克风录制

Python 从多个麦克风录制,python,audio-recording,pcm,alsa,Python,Audio Recording,Pcm,Alsa,我正在尝试使用python同时从多个麦克风录音。我要求录音几乎完全同步,因为我将使用scipy交叉相关音频信号,以获得声音的方向。到目前为止,当我将录制的声音的结果绘制在图表上时,即使两个麦克风与声源的距离相等,录制的声音也不同步。这是我的密码: import alsaaudio import numpy inp1 = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NORMAL,'Set') inp1.setchannels(1) inp1

我正在尝试使用python同时从多个麦克风录音。我要求录音几乎完全同步,因为我将使用scipy交叉相关音频信号,以获得声音的方向。到目前为止,当我将录制的声音的结果绘制在图表上时,即使两个麦克风与声源的距离相等,录制的声音也不同步。这是我的密码:

import alsaaudio
import numpy

inp1 = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NORMAL,'Set')
inp1.setchannels(1)
inp1.setrate(44100)
inp1.setformat(alsaaudio.PCM_FORMAT_S16_LE)
inp1.setperiodsize(1024)
inp2 = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NORMAL,'Set_1')
inp2.setchannels(1)
inp2.setrate(44100)
inp2.setformat(alsaaudio.PCM_FORMAT_S16_LE)
inp2.setperiodsize(1024)

i = int(raw_input('How many samples of recording?'))
amp1 = []
amp2 = []

while i > 0:
    l, data1 = inp1.read()
    a = numpy.fromstring(data1, dtype='int16')
    amp1.extend(abs(a))
    l, data2 = inp2.read()
    b = numpy.fromstring(data2, dtype='int16')
    amp2.extend(abs(b))
    i -= 1

这给了我2个音频信号作为amp1和amp2。说到编程,我是一个初学者,我想也许有更好的方法来实现这一点…

为了强制两台设备同时启动,ALSA C API有snd_pcm_链接


pyalsaaudio不公开此函数。

您可以尝试调整时段大小设置Periodsize,并将其设置为较低的数字。读取功能块,因此可能会导致延迟。或者,您可以尝试使用单个输入,但在两个频道上录制,每个频道使用一个麦克风。如果这与您的设置一起工作,您肯定会通过这种方式获得同步录制。嗯,更改setperiodsize没有帮助。我不确定能否让两个麦克风都作为一个输入,因为每个USB麦克风都被Alsa识别为一个单独的声卡。当我录制音乐时,我会使用单声道到立体声转换器,就像在一个立体声音轨上运行两个麦克风一样。我在网上浏览了一下,没有看到类似的USB接口,但你可以用一系列的1/4/USB转换器安装一些东西。如果这个周末有机会的话,我会把我的麦克风拆开,自己试试你的代码。对不起,如果没有一些调整设备,我的旧麦克风设置在我的新电脑上就不能工作了。祝你好运,这是一个有趣的问题!