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





Я бы посмотрел на смелость ... Я почти уверен, что у них нет утилиты командной строки, которая могла бы это сделать, но у них может быть библиотека ...
Обновлять:
Похоже, они используют libsndfile, выпущенный под LGPL. Я, например, вероятно, просто попробую это использовать.
Я не планирую использовать Audacity. Я провел небольшое исследование. Что вы можете сказать о Windows Audio Compression Manager?
Используйте sox (Sound eXchange: универсальный переводчик звуковых сэмплов) в Linux: SoX - это программа командной строки, которая может конвертировать самые популярные аудиофайлы в большинство других популярных аудиоформатов. При желании он может изменить тип данных аудиосэмпла и применить к файлу один или несколько звуковых эффектов во время этого перевода.
Если вы имеете в виду, как вы сжимаете данные PCM в другой аудиоформат, тогда существует множество библиотек, которые вы можете использовать для этого, в зависимости от платформы (платформ), которую вы хотите поддерживать. Если вы просто хотите изменить частоту дискретизации данных PCM, тогда вам понадобится алгоритм преобразования частоты дискретизации, а это совершенно другая проблема. Вы можете быть более конкретными в своих требованиях?
Мне нужно преобразовать файл WAV в: ID: RIFF Формат: WAVE Sub ID1: fmt Размер 1:16 Аудиоформат: 1 Количество каналов: 1 Частота дискретизации: 11025 Скорость байтов: 11025 Выравнивание блоков: 1 бит на образец: 8 Sub ID2: данные
Это файл WAV. Вы говорите, что хотите изменить существующий файл WAV на файл WAV с другими свойствами?
Вы спрашиваете о повторная выборка, а точнее о понижающая дискретизация, а не о сжатии. Хотя оба процесса работают с потерями (что означает потерю информации), понижающая дискретизация работает с необработанными выборками, а не в частотной области.
Если вас интересует сжатие, вам следует изучить библиотеки lame или OGG vorbis; Вы, несомненно, знакомы с технологиями MP3 и OGG, хотя из вашего вопроса у меня возникло ощущение, что вы заинтересованы в получении файла PCM с более низкой частотой дискретизации.
В этом случае вам понадобится библиотека передискретизации, которой есть несколько вариантов. Наиболее широко известен libsamplerate, который я, честно говоря, не рекомендовал бы из-за проблем с качеством не только сгенерированных аудиофайлов, но и из-за стабильности кода, используемого в самой библиотеке. Другая некоммерческая возможность - это sox, как уже упоминалось некоторыми другими. В зависимости от характера вашей программы вы можете либо выполнить sox как отдельный процесс, либо вызвать его из собственного кода, используя его как библиотеку. Я лично не пробовал этот подход, но сейчас я работаю над продуктом, в котором мы используем sox (на самом деле для повышения дискретизации), и мы вполне довольны результатами.
Другой вариант - написать собственную библиотеку преобразования частоты дискретизации, но, что может оказаться серьезным делом, если вас интересует преобразование только с целочисленным коэффициентом (например, от 44,1 кГц до 22 кГц или от 44,1 кГц до 11 кГц), тогда это на самом деле очень просто, так как вам нужно только вырезать каждый N-й образец.
Я автор libsamplerate. Пожалуйста, объясните, что вы делаете в основном из-за «проблем с качеством не только сгенерированных аудиофайлов, но и из-за стабильности кода, используемого в самой библиотеке».
В Windows вы можете использовать Диспетчер сжатия звука для преобразования файлов (функции acm ...). Вам также потребуются практические знания о структуре WAVEFORMAT и форматах файлов WAV. К сожалению, чтобы написать все это самостоятельно, потребуется некоторое время, поэтому было бы неплохо изучить некоторые варианты с открытым исходным кодом, предложенные другими.
Я написал свою собственную аудио-библиотеку .NET с открытым исходным кодом под названием NAudio, которая может конвертировать файлы WAV из одного формата в другой, используя кодеки ACM, установленные на вашем компьютере. Я знаю, что вы пометили этот вопрос с помощью C++, но если .NET приемлем, это может сэкономить вам время. Взгляните на проект NAudioDemo для примера конвертации файлов.
Это в конкретной операционной системе?