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

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

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

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

Ответ 1

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

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

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

  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, что мы хотим прочитать файл inAudioFileName.

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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