2013-11-06 3 views
1

Я пытаюсь записывать с нескольких микрофонов одновременно с использованием python. Я требую, чтобы записи были почти точно одновременно, поскольку я собираюсь перекрестно сопоставить аудиосигналы с помощью scipy, чтобы получить направление, из которого пришел звук. Пока, когда я рисую результаты записанного звука на графике, записи не синхронизированы, даже если 2 микрофона находятся на одинаковом расстоянии от источника звука. Вот мой код:Запись с нескольких микрофонов python

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. Я новичок, когда дело доходит до программирования, и я думаю, что, возможно, есть лучший способ сделать это ...

+0

Вы можете попытаться настроить размер периода (setperiodsize) и установить его на меньшее число. Функция read() блокирует, так что может вызывать задержку, которую вы получаете. В качестве альтернативы вы можете попробовать использовать один вход, но записать на 2 канала и использовать один микрофон для каждого канала. Если это будет работать с вашей настройкой, вы обязательно получите синхронную запись. – jeremiahbuddha

+0

Хммм, изменение setperiodsize не помогло. Я не уверен, что могу заставить оба микрофона вести себя как один вход, поскольку каждый USB-микрофон распознается как отдельная звуковая карта от Alsa. – user2961850

+0

Когда я записывал музыку, я использовал бы моно-стерео конвертер, такой как [this] (http://www.amazon.com/Monster-MCL-MST2MF-Female-Adapter/dp/B000HHIOIO/ref=sr_1_28? s = электроника, т.е. = UTF8 & qid = 1383864213 & sr = 1-28 & keywords = mono + to + stereo + adapter) для запуска двух микрофонов на одну стереодорожку. Я коротко осмотрел сеть и не видел ничего подобного для USB, но, возможно, вы могли бы установить что-то с помощью серии 1/4/USB-конвертеров. Если я получу шанс в этот уик-энд, я вырву свои микрофоны и попробую сам код. – jeremiahbuddha

ответ

0

Чтобы заставить два устройства запускаться одновременно, API ALSA C имеет snd_pcm_link.

Эта функция не отображается pyalsaaudio.