Помощь в сжатии WAV - PullRequest
       13

Помощь в сжатии WAV

2 голосов
/ 22 января 2009

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

Ответы [ 5 ]

1 голос
/ 22 января 2009

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

1 голос
/ 22 января 2009

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

Обновление:

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

0 голосов
/ 23 января 2009

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

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

0 голосов
/ 22 января 2009

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

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

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

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

0 голосов
/ 22 января 2009

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

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