Как я могу получить текущий уровень входного сигнала микрофона с C WinAPI? - PullRequest
0 голосов
/ 02 ноября 2019

Используя Windows API, я хочу реализовать что-то вроде следующего:

mic test example

т.е. получение текущего уровня входного сигнала микрофона.

Iмне не разрешено использовать внешние аудио библиотеки, но я могу использовать библиотеки Windows. Поэтому я попытался использовать функции waveIn, но я не знаю, как обрабатывать входные аудиоданные в режиме реального времени.

Этот метод я сейчас использую:

  1. Запись для100 миллисекунд
  2. Выберите наибольшее значение из буфера записанных данных
  3. Повторять вечно

Но я думаю, что это слишком глупо, и не рекомендуется. Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 03 ноября 2019

Создав мастер настройки для очень устаревшего, но хорошо известного приложения A / V для проведения конференций, то, что вы описываете, почти идентично тому, что я сделал.

Несколько соображений:

Поставьте в очередь от 5 до 10 из этих буферов 100 мс в аудиоустройство через waveInAddBuffer. IIRC, когда очередь waveIn становится пустой, происходят странные вещи. Затем, когда выполняются обратные вызовы waveInProc, ищите образец с наибольшим абсолютным значением в заполненном буфере, как вы описали. Затем нанесите это на свою визуализацию. Перезапустите заполненные буферы.

Может показаться очевидным линейное отображение значения семпла следующим образом на визуализацию.

Например, для построения 16-битного семпла

// convert sample magnitude from 0..32768 to 0..N
length = (sample * N) / 32768;
DrawLine(length);

Но тогда, когда вы говорите в микрофон, эта визуализация не будет выглядеть «активной» или «яркой».

Но лучшим подходом было бы придание большей силы этим образцам с более низкой энергией. Простой способ сделать это - провести реплотирование вдоль кривой μ-закона (или использовать поиск по таблице).

length =  (sample * N) / 32768;
length = log(1+length)/log(N);
length = max(length,N)
DrawLine(length);

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

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