Обработка аудиопакетов, декодированных с помощью ffmpeg

Следуя моему другому посту, я спрашиваю себя, возможно ли выполнить какой-либо процесс, такой как извлечение MFCC для декодированных аудиопакетов. Код, который я использую, декодирует аудио и видео из файла mpeg-2 с помощью ffmpeg. Процесс на видео выполняется с использованием opencv, так как эта библиотека позволяет захватывать кадры по одному. Мне нужно обрабатывать соответствующие аудио образцы одновременно.

Благодарю.

2 ответа

Решение

Я создал аудио движок C++ под названием "Crosstalk".

Несмотря на то, что он упоминается как "звуковой движок", на самом деле это просто обработчик данных C++ в реальном времени (с плавающей запятой). Crosstalk позволяет создавать и маршрутизировать системы в режиме разработки и в режиме реального времени. По сути, механизм заботится обо всей маршрутизации данных и предоставляет вам простую платформу для создания компонентов, с помощью которых обрабатываются данные (например, ваш компонент "Аудио канал", подключенный параллельно с компонентом "Видео канал"). Пока ваши ветви имеют одинаковую общую длину буфера, они будут идеально синхронизированы.

Это очень просто в использовании. Вот пример того, как настроить систему для воспроизведения mp3-файла (используемые здесь компоненты поставляются с движком):

XtSystem system;
XtMp3Decoder mp3Decoder;
XtAudioDevice audioDevice;

long md = system.addComponent(&mp3Decoder);
long ad = system.addComponent(&audioDevice);

system.connOutToIn(md,0,ad,0);
system.connOutToIn(md,1,ad,1);

mp3Decoder.loadFile("../05 Tchaikovski-Swan Lake-Scene.mp3");
mp3Decoder.play();

Вы можете ознакомиться с документацией по API и подробностями лицензирования здесь: http://www.adaptaudio.com/Crosstalk

РЕДАКТИРОВАТЬ (01-12-2012):

Crosstalk был заменен проектом с открытым исходным кодом под названием " DSPatch". DSPatch - это, по сути, обновленная версия механизма маршрутизации за Crosstalk, который больше не ограничивается только обработкой звука. DSPatch позволяет создавать и маршрутизировать практически любые типы цепочек процессов, какие только можно вообразить, и бесплатно для личного и частного использования:)

Скачал вашу библиотеку и играюсь с ней. Вы проводили какое-то сравнение производительности с другими методами IPC, такими как socket/localhost, очереди сообщений, циклические буферы для аудиопотоков? Я разрабатываю программное приложение, которое получает многоканальный поток UDP (128 каналов), выполняет БПФ на его подмножестве, воспроизводит один выбранный канал, визуализирует спектр 2 каналов и спектрограмму одного канала. Считаете ли вы, что DSPatch достаточно быстр, чтобы его использовать? скачал вашу библиотеку и играюсь с ней. Вы проводили какое-то сравнение производительности с другими методами IPC, такими как socket/localhost, очереди сообщений, циклические буферы для аудиопотоков? Я разрабатываю программное приложение, которое получает многоканальный поток UDP (128 каналов), выполняет БПФ на его подмножестве, воспроизводит один выбранный канал, визуализирует спектр 2 каналов и спектрограмму одного канала. Считаете ли вы, что DSPatch достаточно быстр, чтобы использовать его?

Другие вопросы по тегам