Помощь по сжатию WAV

Как программно сжать файл WAV в другой формат (PCM, частота дискретизации 11 025 кГц и т. д.)?


person Community    schedule 22.01.2009    source источник
comment
Это в какой-то конкретной операционной системе?   -  person Arcane    schedule 22.01.2009


Ответы (5)


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

Обновлять:

Похоже, они используют libsndfile, выпущенный под лицензией LGPL. Я бы, например, просто попробовал бы это использовать.

person chills42    schedule 22.01.2009
comment
Я не планирую использовать Audacity. Я проводил некоторые исследования. Что вы можете сказать о Windows Audio Compression Manager? - person ; 22.01.2009

Используйте sox (Sound eXchange: универсальный переводчик звуковых образцов) в Linux: SoX — это программа командной строки, которая может конвертировать самых популярных аудиофайлов в большинство других популярных форматов аудиофайлов. При необходимости он может изменить тип данных аудиосемпла и применить к файлу один или несколько звуковых эффектов во время этого перевода.

person Brian Carlton    schedule 22.01.2009

Если вы имеете в виду, как сжать данные PCM в другой аудиоформат, то для этого можно использовать множество библиотек, в зависимости от платформ, которые вы хотите поддерживать. Если вы просто хотите изменить частоту дискретизации данных PCM, вам нужен алгоритм преобразования частоты дискретизации, что является совершенно другой проблемой. Можете ли вы быть более конкретными в ваших требованиях?

person Stu Mackellar    schedule 22.01.2009
comment
Мне нужно преобразовать файл WAV в: ID: RIFF Формат: WAVE Sub ID1: fmt Размер 1: 16 Формат аудио: 1 Количество каналов: 1 Частота дискретизации: 11025 Скорость байта: 11025 Выравнивание блоков: 1 бит на выборку: 8 Sub ID2: данные - person ; 22.01.2009
comment
Это wav-файл. Вы говорите, что хотите изменить существующий файл wav на файл wav с другими свойствами? - person Stu Mackellar; 22.01.2009

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

Если вы заинтересованы в сжатии, вам следует изучить библиотеки lame или OGG vorbis; вы, без сомнения, знакомы с технологиями MP3 и OGG, хотя из вашего вопроса у меня сложилось впечатление, что вы заинтересованы в получении файла PCM с более низкой частотой дискретизации.

В этом случае вам понадобится библиотека ресемплинга, возможностей которой несколько. Наиболее широко известен libsamplerate, который я бы, честно говоря, не рекомендовал из-за проблем с качеством не только внутри сгенерированных аудиофайлов, но и стабильности кода, используемого в самой библиотеке. Другая некоммерческая возможность — это sox, о чем упоминали некоторые другие. В зависимости от характера вашей программы вы можете либо выполнять sox как отдельный процесс, либо вызывать его из собственного кода, используя его как библиотеку. Я лично не пробовал этот подход, но сейчас я работаю над продуктом, в котором мы используем sox (на самом деле, для повышения частоты дискретизации), и мы очень довольны результатами.

Другим вариантом является написание собственной библиотеки преобразования частоты дискретизации, что может оказаться серьезной задачей, но, если вы заинтересованы в преобразовании только с целочисленным коэффициентом (т. е. из 44,1 кГц в 22 кГц или от 44,1 кГц до 11 кГц), то это на самом деле очень просто, так как вам нужно только вырезать каждый N-й сэмпл.

person Nik Reiman    schedule 22.01.2009
comment
Я автор libsamplerate. Пожалуйста, объясните, что вас больше всего беспокоит из-за проблем с качеством не только в сгенерированных аудиофайлах, но и со стабильностью кода, используемого в самой библиотеке. - person Erik de Castro Lopo; 11.02.2011

В Windows вы можете использовать Audio Compression Manager для преобразования между файлами (функции acm...). Вам также понадобятся практические знания структуры WAVEFORMAT и форматов файлов WAV. К сожалению, чтобы написать все это самостоятельно, потребуется некоторое время, поэтому может быть хорошей идеей изучить некоторые варианты с открытым исходным кодом, предложенные другими.

Я написал свою собственную аудиобиблиотеку .NET с открытым исходным кодом под названием NAudio, которая может конвертировать файлы WAV из одного формата. на другой, используя кодеки ACM, установленные на вашем компьютере. Я знаю, что вы отметили этот вопрос как C++, но если .NET приемлем, это может сэкономить вам время. Взгляните на проект NAudioDemo для примера преобразования файлов.

person Mark Heath    schedule 22.01.2009