Получите разницу между двумя входными аудиопотоками - java

Я работаю над программным обеспечением (на Java), использующим распознавание речи с API Sphinx4.
Чтобы уменьшить помехи, я хотел записать 2 звука на 2 разных микрофона (один для динамика (A) и другой для записи "окружающей среды" (B)), а затем сделать AB, чтобы получить " бесшумный" звук, который я даю Сфинксу для распознавания. Я думаю, что java.sound может делать такие вещи, но я действительно не знаю, как это сделать.

  • Как вы думаете, такое решение может работать?
  • Возможно ли это сделать в режиме реального времени? если да, то какая аппаратная конфигурация ему нужна?
  • У вас есть полезные ссылки/код для моего случая?

person JackylRadis    schedule 20.03.2014    source источник
comment
Этот вопрос кажется не по теме, потому что речь идет о цифровой обработке сигналов, а не о программировании как таковом.   -  person Raedwald    schedule 20.03.2014


Ответы (1)


Java Sound сам по себе не может выполнять такую ​​обработку сигналов. Но вы можете получить необработанные аудиоданные в реальном времени с микрофонов, обработать их самостоятельно, а затем передать в Sphinx4.

Для доступа к 2 микрофонам запросите доступные микшеры в AudioSystem, затем выберите 2 микшера, соответствующие двум микрофонам. Из каждого микшера получите SourceDataLine и используйте его для захвата аудиоданных.

Вы можете обрабатывать данные в режиме реального времени, просто убедитесь, что в SourceDataLine используется подходящий размер буфера. Размер буфера, соответствующий 20 мс, должен работать на большинстве систем.

Большая часть оборудования должна работать нормально. Доступны «прямые» SourceDataLine для Windows и Linux. Ваш пробег на OS X будет варьироваться (в зависимости от реализации Java).

www.jsresources.org содержит ряд примеров программирования.

person Florian    schedule 20.03.2014