2009-03-31 4 views
10

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

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

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

ответ

4

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

Для настройки прибора вам необходимо иметь алгоритм, который оценивает базовую частоту (F0) звука. Для этого существует ряд алгоритмов, один из новейших и лучших - это алгоритм YIN, разработанный Ален де Чевинем. Недавно я добавил алгоритм 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, что мы хотим прочитать файл inAudioFileName.

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

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

2

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

5

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

0

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

3

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

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