2013-06-01 2 views
0

Я искал пример кода о том, как захватить звук микрофона, используя Naudio + WASAPI.Захват аудио микрофона с помощью Naudio + WASAPI?

(Я не заинтересован в прямой записи на диск, что мне нужно, чтобы обработать входной буфер в режиме реального времени для того, чтобы сделать некоторые звуковые эффекты.)

Я искал много, но не смог найти любой достойный образец онлайн.

Не могли бы вы помочь?

P.S. Библиотека BASS и примеры C# приветствуются!

ответ

3

NAudio source code поставляется с демонстрационным приложением, которое показывает, как записывать аудио с помощью WASAPI. Смотрите в NAudioDemo\RecordingDemo\RecordingPanel.cs.

+0

Спасибо за ответ. Я видел этот пример, но кажется, что размер буфера постоянно изменяется (7000-8000 байт.) Есть ли способ изменить этот код, чтобы сделать буфер постоянным? – AudioMaster

+1

Я думаю, что это артефакт пути реализации WASAPI. Вы можете сами разбить буферы на куски, если вам нужен постоянный размер. –

0

В MSDN есть много примеров кода, хотя они не охватывают NAudio, у них есть несколько примеров, которые подробно показывают, как использовать Windows Audio Session API.

Поскольку WASAPI - это API только для родного языка, есть и примеры проектов, которые показывают вам, как использовать этот API из приложения Here только для родного языка, а также образцы, которые показывают, как создать собственный компонент, который обертывает API для потребление от приложения CSharp. Я не мог найти прямую ссылку на образец C#/C++, но он включен в пакет Windows 8 App Samples. Тогда есть возможность написать управляемую обертку для API в целом, но если вам не нравится боль и вы ищете приключение в маршалинге, я бы не рекомендовал его ...

Если вы разрабатываете Windows Phone, тогда есть VOIP-образец в WP8 SDK, который охватывает как захват и передачу аудиоданных PCM с использованием WASAPI.

Как отметил Марк, размер буфера данных pcm может отличаться со временем, и это отчасти связано с тем, что WASAPI является аудио-интерфейсом с низкой задержкой и поэтому имеет как небольшую абстракцию между потребителем (ваше приложение) и производителя (водителя), насколько это возможно. Хотя нет ничего, что помешает вам сделать некоторые исправления размера буферизации самостоятельно и только передать данные в приложение, когда ваш собственный буфер заполнен.

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