【发布时间】:2013-11-18 04:28:32
【问题描述】:
我正在尝试使用 python 同时从多个麦克风录制。我要求录音几乎完全同时进行,因为我将使用 scipy 对音频信号进行交叉关联,以便获得声音的来源。到目前为止,当我在图表上绘制我录制的声音的结果时,即使 2 个麦克风与声源等距,录音也不同步。这是我的代码:
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。在编程方面我是初学者,我认为也许有更好的方法来做到这一点......
【问题讨论】:
-
您可以尝试调整周期大小 (setperiodsize) 并将其设置为较小的数字。 read() 函数阻塞,所以这可能会导致你得到延迟。或者,您可以尝试使用单个输入,但在 2 个通道上录制,并为每个通道使用一个麦克风。如果这适用于您的设置,那么您肯定会以这种方式获得同步录制。
-
嗯,更改 setperiodsize 没有帮助。我不确定是否可以让两个麦克风都作为一个输入,因为每个 USB 麦克风都被 Alsa 识别为单独的声卡。
-
当我录制音乐时,我会使用像this 这样的单声道到立体声转换器将两个麦克风运行到一个立体声轨道上。我在网上看了一眼,并没有看到任何类似 USB 的东西,但你可以使用一系列 1/4 / USB 转换器来装配一些东西。如果这个周末有机会,我会拿出我的麦克风,亲自试试你的代码。
-
对不起,如果没有一些适配设备,我的旧麦克风设置将无法与我的新电脑配合使用。祝你好运,这是一个有趣的问题!
标签: python audio-recording pcm alsa