Я хочу обрабатывать аудио онлайн / в режиме реального времени, где я постоянно читаю аудиосэмплы из аудиофайла, обрабатываю их (например, применяю некоторый эффект) и пересылаю обработанные сэмплы на устройство вывода звука, например звуковую карту. Входные файлы имеют общие форматы, такие как wav, mp3, возможно, даже ogg.
Существует ли библиотека, похожая на libav / ffmpeg для аудиофайлов, которая упрощает чтение различных аудиоформатов и обеспечивает постоянный поток необработанных аудиосэмплов? Или это лучшее решение для использования отдельных библиотек для каждого формата?
Библиотеки должны быть совместимы с c / c ++ и кросс-платформенными (Mac, Win, Linux, ARM).
РЕДАКТИРОВАТЬ Спасибо за все ответы. Я оценил все библиотеки и пришел к выводу, что лучше всего придерживаться libav / ffmpeg, потому что большинство библиотек требует ffmpeg в качестве бэкэнда.
Проверять, выписываться Juce. Это большая библиотека, которая использовалась для разработки аудио-плагинов VST для музыкальных программ. Там есть много вещей, которые вам не нужны, но я думаю, что вы можете выбирать только те аудио части, которые будут включены в вашу сборку. AudioFormatReader и связанные с ним классы могут выполнять чтение файла, а также существуют классы для вывода на звуковую карту. Также есть много других инструментов для обработки аудио. Это лицензия GPL, кроссплатформенная, и они требуют экспериментальной поддержки Android. Я еще не использовал его для проекта, но я жду вдохновения!
Я могу порекомендовать RTAudio или же Portaudio для кроссплатформенного аудио ввода / вывода. Для декодирования звука вы можете посмотреть на libsndfile или же libaudiodecoder.
Я бы проверил libSDL, у него есть звуковая подсистема, которая создана для таких вещей и обрабатывает ogg, mp3, flac, wav и т. д.
LibVLC может сделать это. libvlc поддерживает самые разные аудио (и видео) форматы. Это кроссплатформенная библиотека C / C ++. Он также должен поддерживать генерацию кода Arm.
Ты можешь использовать irrKlang библиотека. Я использовал это для своих игр. Это очень простая библиотека для использования, например, для воспроизведения файла «somefile.mp3», который вам просто нужно написать
engine->play2D("somefile.mp3", true);
И эта библиотека тоже кроссплатформенная. И работает с C ++, C # и всеми языками .NET.
Дополнительные возможности этой библиотеки (с ее собственного сайта)
Он также имеет все функции, известные из низкоуровневых аудио-библиотек.
а также множество полезных функций, таких как сложный потоковый движок,
расширяемое чтение аудио, одиночный и многопоточный режимы, 3d аудио
эмуляция для низкоуровневого оборудования, система плагинов, множественный откат
модели и многое другое. Ко всему этому можно получить доступ через чрезвычайно простой API.
Библиотека 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();