Анализ звука в реальном времени в Linux

Мне интересно, какую аудиотеку рекомендуется использовать?

Я пытаюсь сделать небольшую программу, которая поможет в настройке инструментов. (Фортепиано, гитара и т. Д.). Я читал об аудио библиотеках ALSA и Marsyas.

Я думаю, что идея состоит в том, чтобы брать образцы данных с микрофона, проводить анализ фрагментов по 5-10 мс (из того, что я читал). Затем выполните БПФ, чтобы выяснить, какая частота содержит наибольший пик.


person MAckerman    schedule 31.03.2009    source источник


Ответы (5)


Марсий был бы отличным выбором для этого, он создан именно для такого рода задач.

Для настройки инструмента вам нужно иметь алгоритм, который оценивает основную частоту (F0) звука. Для этого существует ряд алгоритмов, одним из новейших и лучших является алгоритм YIN, разработанный Аленом де Шевенем. Я недавно добавил алгоритм YIN к Marsyas, и использовать его очень просто.

Вот базовый код, который вы бы использовали в Marsyas:

  MarSystemManager mng;

  // A series to contain everything
  MarSystem* net = mng.create("Series", "series");

  // Process the data from the SoundFileSource with AubioYin
  net->addMarSystem(mng.create("SoundFileSource", "src"));
  net->addMarSystem(mng.create("ShiftInput", "si"));
  net->addMarSystem(mng.create("AubioYin", "yin"));

  net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName);

  while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) {
    net->tick();
    realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>();
    cout << r(0,0) << endl;
  }

Этот код сначала создает объект Series, в который мы будем добавлять компоненты. В серии каждый из компонентов последовательно получает выходные данные предыдущей системы MarSystem. Затем мы добавляем SoundFileSource, в который вы можете загружать файлы .wav или .mp3. Затем мы добавляем объект ShiftInput, который выводит перекрывающиеся фрагменты звука, которые затем передаются в объект AubioYin, который оценивает основную частоту этого фрагмента звука.

Затем мы сообщаем SoundFileSource, что хотим прочитать файл в AudioFileName.

Затем оператор while повторяется до тех пор, пока в SoundFileSource не закончатся данные. Внутри цикла while мы берем данные, которые сеть обработала, и выводим элемент (0,0), который является оценкой основной частоты.

Это становится еще проще, если вы используете привязки Python для Marsyas.

person sness    schedule 06.07.2009

Это руководство должно помочь. Не используйте ALSA для своего приложения. Используйте API более высокого уровня. Если вы решите использовать JACK, в http://jackaudio.org/applications есть три настройки инструмента. вы можете использовать как пример кода.

person joeforker    schedule 01.04.2009

http://clam-project.org/ CLAM - это полноценная программная среда для исследований и разработки приложений. в области аудио и музыки. Он предлагает концептуальную модель, а также инструменты для анализа, синтеза и обработки аудиосигналов.

У них отличный API, красивый графический интерфейс и несколько готовых приложений, в которых вы можете все увидеть.

person Zimmermann    schedule 24.11.2009

ALSA теперь является своего рода стандартом по умолчанию для Linux, поскольку драйверы ядра включены в ядро, а OSS не используется. Однако есть альтернативы пользовательскому пространству ALSA, например jack, которое, похоже, нацелено на приложения профессионального типа с малой задержкой. У этого API, кажется, более приятный API, хотя я его не использовал, мое краткое знакомство с API ALSA заставило меня подумать, что почти все было бы лучше.

person Steve Baker    schedule 01.04.2009

Audacity включает функцию частотного графика и встроенные фильтры БПФ.

person rkb    schedule 06.04.2009