Авто уровень микрофона - PullRequest
0 голосов
/ 05 февраля 2010

Я ищу решение для настройки уровня микрофона в моем приложении VoIP. Я могу получить уровень звука, но также хочу настроить «громкость» микрофона, когда он слишком низкий или слишком высокий в режиме реального времени. Как в скайпе ...

Внешне это выглядит просто, но я думаю, что алгоритм должен быть немного умнее, чем просто поворачивать громкость, когда уровень выходит за верхние / нижние пределы.

Я использую .Net 2.0 на платформе Win. Есть ли готовые библиотеки для .Net или даже на C (чтобы я мог портировать) или даже просто описание таких методов / алгоритмов? Я пытался гуглить, но безуспешно.

Спасибо!

Ответы [ 4 ]

0 голосов
/ 24 ноября 2010

Я рекомендую использовать Speex-Pre-Processor. В качестве бонуса вы получаете шумоподавление.

Мой проект Xiph содержит привязки к нему:
https://github.com/CodesInChaos/Xiph

В частности, вам нужны эти два файла:
https://github.com/CodesInChaos/Xiph/blob/master/Easy/Speex/SpeexPreProcessor.cs
https://github.com/CodesInChaos/Xiph/blob/master/LowLevel/SpeexPreProcessor.cs

Вероятно, это не качество производства, а отправная точка. Если вы улучшите их, пожалуйста, отправьте мне изменения.

0 голосов
/ 05 февраля 2010

Попробуйте для начала: Получить и установить громкость звука волны

Он использует Windows API в C # через P / Invoke.

0 голосов
/ 24 ноября 2010

Это две части.

Сначала вам нужно начать захват звука с микрофона и измерить его интенсивность сигнала. Если человек говорит в микрофон, чтобы откалибровать его, вы можете просто найти самый высокий пик за предыдущие несколько секунд. Если он ниже -6 дБ (скажем), немного увеличьте усиление, если выше -3 дБ, немного уменьшите его. Дело в том, что вам нужно высокое отношение сигнал / шум, но любой ценой вы хотите избежать ограничения или искажения при слишком громком сигнале.

Вторая часть состоит в том, чтобы определить, какое из множества элементов управления микшера, возвращаемых API микшера, является тем, которое управляет усилением микрофона. Это оказывается намного сложнее, чем должно быть, особенно если вы хотите, чтобы он работал со всеми звуковыми картами и на XP и Vista / Win 7. См. этот вопрос для некоторых предлагаемых решений.

Вы можете использовать NAudio для обеих частей. Имеются оболочки для API-интерфейсов waveIn и микшера.

0 голосов
/ 05 февраля 2010

Обычно используемое название для этого - AGC (автоматическая регулировка усиления) , и это не так просто, как кажется. В базовой схеме AGC у вас есть быстрая «атака», что означает, что вы очень быстро уменьшаете усиление при повышении уровня входного сигнала, а затем используете большую постоянную времени для более медленного увеличения усиления при падении входного уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...