2015-09-29 2 views
0

Я пытался внедрить систему аннулирования активного шума (ANC), используя системный набор инструментов Digital System Processing. Я использовал dsp.AudioRecorder и dsp.AudioPlayer. Это мой код инициализации:Возможно ли обработать два входа микрофона в реальном времени с помощью DSP System Toolbox (MATLAB)?

mic_reference = dsp.AudioRecorder('NumChannels',1); 
mic_reference.DeviceName='ASIO4ALL v2'; 
mic_error = dsp.AudioRecorder('NumChannels',1); 
mic_error.DeviceName='ASIO4ALL v2'; 
sink1_2 = dsp.AudioPlayer; 
sink1_2.DeviceName='ASIO4ALL v2'; 

где я называю step(frame) для каждого из микрофонов. Я получаю сообщение об ошибке

Ошибка при использовании AudioRecorder/step Данное аудиоустройство может быть открыто только один раз.

Является ли это ограничение набора инструментов системы DSP возможностью работать только на одном устройстве звукозаписывающего устройства за раз или можно использовать одновременно два устройства звукозаписи?

Существует условие для многоканальной обработки одного и того же аудиоустройства, но как обрабатывать аудио с двух независимых устройств в режиме реального времени?

ответ

2

Charansai,

Это не является ограничением DSP System Toolbox, но поведение водителей ASIO. Драйверы ASIO предоставляют эксклюзивный доступ к приложению для воспроизведения или записи. Таким образом, второй объект пытается повторно использовать одно и то же устройство для записи и, следовательно, ошибку.

В вашем случае, если ваш опорный сигнал является каналом 1, а сигнал ошибки - каналом 2, вам необходимо записать 2 канала данных вместо двух объектов рекордера.

har = dsp.AudioRecorder('NumChannels', 2); 
har.DeviceName = 'ASIO4ALL v2'; 
hap = dsp.AudioPlayer; 
hap.DeviceName = 'ASIO4ALL v2'; 
data = step(har); 
refData = data(:, 1); 
errData = data(:, 2); 
outData = doSomething(refData, errData); 
step(hap, outData); 

Надеюсь, это поможет.

Динеш

+0

Спасибо Динешу. Я думаю, что это проблема с драйверами ASIO. Теперь я поменял аудио драйвер на «Direct Sound» и могу дать два разных имени устройства для двух микрофонов и обработать их оба одновременно. Таким образом, неверно, что системный инструментарий DSP не может обрабатывать два аудиовхода. Но как управлять драйвером ASIO от предоставления эксклюзивного доступа (учитывая, что это стабильный драйвер, чем «Direct Sound»)? – charansai

+0

и вы можете объяснить, как сопоставить два канала (левый канал на одно устройство и правый канал на другое устройство). Я не мог понять, что вы делаете в приведенном выше коде, вы берете один аудиомагнитофон (микрофон) и обрабатываете два его стерео (левого и правого) входа в виде двух данных (ref, err). Где второй микрофон на картинке? – charansai

+0

DirectSound и ASIO имеют разные цели. ASIO в основном используется в приложениях с низкой задержкой, тогда как DirectSound. DirectSound создает уровень виртуального устройства, к которому обращаются приложения. Каждое приложение разговаривает с этим виртуальным слоем, а не с реальным физическим устройством. Во время воспроизведения, если два приложения попытаются воспроизвести два звука на один и тот же вывод, DirectSound позаботится о микшировании, которое увеличивает задержку. Таким образом, выбор модели драйвера зависит от цели вашего приложения. –

0

Когда вы записываете свой сигнал, вы должны записывать его с двух микрофонов (каждый из которых называется каналом/наблюдением - то есть левый и правый канал), и вы должны объединить эти два наблюдения вместе в один поток, прежде чем передавать его в Matlab, вы должны передавать только один двухканальный входной сигнал в панель инструментов аудиоустройства dsp AudioRecorder - он не принимает два источника, о которых я не думаю. Когда вы читаете данные, это должна быть матрица из 2 векторов (при условии, что вы указали 2 канала в настройке AudioRecorder).

+0

Благодарность за reply.Actually в Acitve шумоподавления, я буду использовать два различных микрофонов (эталонные и ошибок) и один громкоговоритель, все они должны быть обработаны в режиме реального времени. Я не говорю о двухканальной (левой и правой) обработке. Таким образом, невозможно использовать dsp AudioRecorder для обработки двух микрофонов и одного громкоговорителя в реальном времени ..! Есть ли возможность использовать один аудиорекордер для обработки одного кадра с одного микрофона (ссылки) и следующего кадра с другого микрофона (ошибка). Таким образом, я могу обрабатывать данные с некоторым запаздыванием. – charansai

+0

У вас есть два стереомикрофона? В противном случае вы можете подключить один микрофон к левому каналу, другой - к правому каналу и одновременно прочитать оба. – hbaderts

+0

, как сказал @hbaderts, оба микрофона должны формировать один поток данных в реальном времени. – GameOfThrows

Смежные вопросы