2012-04-19 2 views
3

Можно ли записывать звук только тогда, когда есть кто-то говорит? Я хочу слушать микрофон и только начинать запись, когда «громкость» больше некоторого уровня шума (что означает, что кто-то говорит). Мне также нужно изменить высоту записанного звука.Windows 8 метро запись аудио (фильтр шум, изменение тона)

Я пробовал класс MediaCapture в C#, но StartRecordToStorageFileAsync из образца не используется в моем сценарии. В Windows Phone я использую XNA, но я не могу найти похожую API в Windows 8.

+0

как вы обзавелись окнами 8;)? – Zaki

+0

@ Sam1 - Он находится на стадии «предварительного просмотра»? http://windows.microsoft.com/en-US/windows-8/consumer-preview?SignedIn=1 –

+0

@RitchMelton oh ok Спасибо за ссылку – Zaki

ответ

1

Проверьте эту нить на форумах MSDN: How to get the decibel with C#?

Похоже, есть и, вероятно, не будет API, для выполнения, что в C#, Visual Basic или JavaScript, и вам нужно сделать это в нативном компоненте.

Ядро Аудио/WASAPI API, из статьи, упомянутой в этом потоке должны иметь то, что вам нужно: Win32 and COM for Metro style apps (multimedia)

Я думаю this document имеет описание образца для захвата звука с датчиком Kinect, которые могли бы иметь соответствующие образцы кода показывая, как вы будете использовать вызовы GetBuffer(), чтобы получить буфер необработанных звуковых образцов, которые вы могли бы обработать, чтобы получить необходимую вам информацию.

+0

Этот пример, вероятно, не будет работать в Metro - для этого требуется использование API-интерфейсов, которые не поддерживаются в приложениях стиля Metro (например, IMMDevice) –

+0

Конечно, но некоторые из них должны быть полезными. Я не нашел ничего хорошего для приложений в стиле метро. –

+0

Я бы сделал все, чтобы избежать использования C++ API. Задержка 500 мс, упомянутая в статье, не является проблемой для меня. Моя идея - использовать StartRecordToStreamAsync для записи звука в поток на постоянной основе и, возможно, использовать таймер, чтобы периодически проверять поток, если объем выше чем-то (кто-то подчёркивает) и заканчивается, когда он не возвращается к никому. Я бы получил две позиции в потоке, и я отключу часть потока и использую его. Я могу сделать это? Если да, то как? –

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