Библиотека для чтения аудио файлов

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

Существует ли библиотека, похожая на libav / ffmpeg для аудиофайлов, которая упрощает чтение различных аудиоформатов и обеспечивает постоянный поток необработанных аудиосэмплов? Или это лучшее решение для использования отдельных библиотек для каждого формата?
Библиотеки должны быть совместимы с c / c ++ и кросс-платформенными (Mac, Win, Linux, ARM).

РЕДАКТИРОВАТЬ Спасибо за все ответы. Я оценил все библиотеки и пришел к выводу, что лучше всего придерживаться libav / ffmpeg, потому что большинство библиотек требует ffmpeg в качестве бэкэнда.

8

Решение

Проверять, выписываться Juce. Это большая библиотека, которая использовалась для разработки аудио-плагинов VST для музыкальных программ. Там есть много вещей, которые вам не нужны, но я думаю, что вы можете выбирать только те аудио части, которые будут включены в вашу сборку. AudioFormatReader и связанные с ним классы могут выполнять чтение файла, а также существуют классы для вывода на звуковую карту. Также есть много других инструментов для обработки аудио. Это лицензия GPL, кроссплатформенная, и они требуют экспериментальной поддержки Android. Я еще не использовал его для проекта, но я жду вдохновения!

3

Другие решения

Я могу порекомендовать RTAudio или же Portaudio для кроссплатформенного аудио ввода / вывода. Для декодирования звука вы можете посмотреть на libsndfile или же libaudiodecoder.

3

Я бы проверил libSDL, у него есть звуковая подсистема, которая создана для таких вещей и обрабатывает ogg, mp3, flac, wav и т. д.

2

LibVLC может сделать это. libvlc поддерживает самые разные аудио (и видео) форматы. Это кроссплатформенная библиотека C / C ++. Он также должен поддерживать генерацию кода Arm.

1

Ты можешь использовать irrKlang библиотека. Я использовал это для своих игр. Это очень простая библиотека для использования, например, для воспроизведения файла «somefile.mp3», который вам просто нужно написать

engine->play2D("somefile.mp3", true);

И эта библиотека тоже кроссплатформенная. И работает с C ++, C # и всеми языками .NET.

Дополнительные возможности этой библиотеки (с ее собственного сайта)

Он также имеет все функции, известные из низкоуровневых аудио-библиотек.
а также множество полезных функций, таких как сложный потоковый движок,
расширяемое чтение аудио, одиночный и многопоточный режимы, 3d аудио
эмуляция для низкоуровневого оборудования, система плагинов, множественный откат
модели и многое другое. Ко всему этому можно получить доступ через чрезвычайно простой API.

1

Библиотека GAudio Может быть, это тот, кого вы убеждаете.
Это простой, мощный, кроссплатформенный и расширяемый

Привет мир GAudio, как это:

gaudio_init("addons");

const char* filename = "..\\media\\trek12.wav";

gsource* source = gaudio_source_create_from_file(filename,FALSE);
if(source == NULL)
{
printf("load file:%s error!\n",filename);
printf("bad source.\nerror code:%d.\n",gaudio_error_get());
gaudio_deinit();
return -1;
}

printf("play filename:%s\n",filename);

gaudio_source_play(source,FALSE);

printf("\nplaying, press any key to quit.\n");
getch();

gaudio_source_stop(source);
gaudio_source_destroy(source);

gaudio_deinit();
0
По вопросам рекламы [email protected]