Использование кодеков Windows для декодирования аудио файлов - PullRequest
4 голосов
/ 21 марта 2011

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

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

Как я могу сделать это в C #?Не похоже, что есть какая-то нативная поддержка для использования кодеков Windows, но есть некоторые технологии, которые могут помочь.К сожалению, все они кажутся довольно ограничительными или проблемными.

Windows Media Foundation работает только для Win7 и не имеет управляемого интерфейса (пробовал MF.NET, но не работает хорошо).DirectShow, по-видимому, устарел (заменяется WMF) и не имеет управляемой поддержки.и т. д. и т. д. и т. д.

Насколько сложно получить кодек для возврата сэмпла для аудио?Максимальное количество строк кода: /

Ответы [ 3 ]

1 голос
/ 21 марта 2011

NAudio содержит некоторый код, который можно использовать для разгрузки декодирования звука в декодеры ACM. Они используются для декодирования MP3 среди других целей. Декодирование MP3 может быть засвидетельствовано здесь . Код в основном находится в пространстве имен NAudio.Wave.Compression. С вашей точки зрения, трудным будет написание синтаксических анализаторов для извлечения нужного контента из потоков для подачи в декодер.

1 голос
/ 02 февраля 2014

Как конвертировать различные аудио форматы в PCM

Для vox без заголовка

using (BinaryReader br = new BinaryReader(File.OpenRead("sample.vox")))
{
    IntPtr format = AudioCompressionManager.GetPcmFormat(1, 16, 8000);
    using (WaveWriter ww = new WaveWriter(new MemoryStream(), 
        AudioCompressionManager.FormatBytes(format)))
    {
        Vox.Vox2Wav(br, ww);
    }
}

для других (mp3, wav, ogg, wma и т. Д.)

DsReader dr = new DsReader("sample.ogg");
IntPtr formatPcm = dr.ReadFormat();
byte[] dataPcm = dr.ReadData();
dr.Close();
1 голос
/ 21 марта 2011

BASS Audio Library может декодировать для получения только необработанных данных.Я не знаю, использует ли он встроенные кодеки в Windows или свои собственные, но он поддерживает широкий спектр форматов и потоков.Для этого также есть оболочка .NET.

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

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