Расшифровать wav файл в raw на win32

Как я могу декодировать wav-файл (RIFF), содержащий данные PCM в Windows, в необработанные образцы (чтобы я мог передать их в ASIO) на win32?

У меня нет времени изобретать велосипед. Было бы неплохо, если бы там была библиотека, которая сразу выполняет всю функцию «воспроизведение wav-файла в ASIO». Тем не менее, ASIO достаточно прост, и в нем есть много примеров для Windows в Интернете. Если бы только у меня был файл wav в виде сырых данных PCM, чтобы скормить ему!

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

ДОЛЖЕН быть способ сделать это с помощью MS API ... что это такое?

Было бы неплохо, если бы он преобразовал его в 16-битный звук с частотой 44,1 кГц, чтобы я мог передать его в ASIO, но я могу справиться с соединением двух битов вместе, если только кто-то может дать мне подсказку о том, как декодировать файл wav в сырые образцы в Windows,


person Thomas    schedule 05.08.2010    source источник


Ответы (4)


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

person S.C. Madsen    schedule 05.08.2010
comment
Можете ли вы найти или предоставить пример декодирования существующего файла PCM WAV? - person Thomas; 06.08.2010
comment
Спасибо за пример декодирования существующего файла PCM WAV. Знаете ли вы, как использовать Windows API для декодирования заголовка, а не для его ручного анализа? - person Thomas; 06.08.2010
comment
К сожалению, нет, но, как указано, вы быстро получите код для ручного анализа, удачи - person S.C. Madsen; 06.08.2010
comment
В этой статье указаны проблемы в коде, на который вы ссылаетесь, и предлагаются решения. - person Thomas; 07.08.2010
comment
Правильно, я думаю, что ive в основном использовал сеть для руководств по формату заголовка .wav, но всегда сам писал фактический синтаксический код ... - person S.C. Madsen; 08.08.2010
comment
Многие файлы WAV действительно очень просты и легко декодируются, особенно если вы говорите о 8- и 16-битных файлах PCM. Однако файлы WAV могут быть гораздо более сложными, и если вы столкнетесь с одним из этих более сложных файлов, вы можете либо написать что-нибудь, чтобы справиться со сложностями самостоятельно, либо вы можете использовать что-то вроде libsndfile, которое упростило бы вашу жизнь прямо с самого начала. Начало. - person Erik de Castro Lopo; 21.04.2011
comment
Хорошее предложение относительно libsndfile. По моему опыту, большинство файлов очень просты, и базовые знания формата WAV (который так распространен) позволяют мне извлекать необработанные данные, просто используя шестнадцатеричный редактор, если мне нужно - person S.C. Madsen; 28.04.2011

См. это.

Это инкапсулировано в структуре WAVEFORMATEX в Win32. .

person bobobobo    schedule 05.08.2010
comment
Также см. это объяснение формата файла. - person Thomas; 07.08.2010
comment
Подробнее о кодах формата здесь - person Thomas; 08.08.2010
comment
Противоположный пример (создание файла WAV с нуля) включен здесь: blogs.msdn.com/b/ericlippert/archive/2005/04/15/ - person Thomas; 08.08.2010

Если вы возьмете архив с исходным кодом для libsndfile, вы обнаружите, что он содержит несколько примеров программ в каталогах examples / и programs /.

person Erik de Castro Lopo    schedule 29.10.2010

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

Python имеет модуль aifc. FFmpeg - еще один вариант, если вы не хотите использовать Python и нормально вызываете внешние программы из своего кода.

РЕДАКТИРОВАТЬ: поскольку вы, кажется, делаете это для работы, вы, вероятно, захотите взглянуть на http://ffmpeg.org/legal.html, если вы думаете об использовании FFmpeg (чего вы, вероятно, не будете, поскольку другие люди предоставляют информацию, связанную с WinAPI), поскольку FFmpeg использует либо версию LGPL, либо GPL в зависимости от какие параметры вы используете / как настраиваете.

person JAB    schedule 05.08.2010