Анализ аудио в реальном времени в Linux - PullRequest
11 голосов
/ 01 апреля 2009

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

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

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

Ответы [ 5 ]

5 голосов
/ 01 апреля 2009

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

4 голосов
/ 06 июля 2009

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

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

Вот основной код, который вы бы использовали в 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 не закончатся данные. В то время как Цикл, мы берем данные, которые сеть обработала, и выводим элемент (0,0), который является оценка основной частоты.

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

3 голосов
/ 24 ноября 2009

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

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

2 голосов
/ 01 апреля 2009

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

0 голосов
/ 06 апреля 2009

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

...