2009-03-31 22 views
10

Me pregunto cuál es la biblioteca de audio recomendada para usar?Análisis de audio en tiempo real en Linux

Estoy intentando hacer un pequeño programa que ayude a afinar los instrumentos. (Piano, Guitarra, etc.). He leído sobre ALSA & Marsyas audio libraries.

Estoy pensando que la idea es tomar muestras de datos del micrófono, hacer análisis en trozos de 5-10ms (por lo que he leído). Luego realice una FFT para descubrir qué frecuencia contiene el pico más grande.

Respuesta

4

Marsyas sería una gran opción para hacer esto, está diseñado para este tipo de tarea.

Para sintonizar un instrumento, lo que debe hacer es tener un algoritmo que calcule la frecuencia fundamental (F0) de un sonido. Hay una serie de algoritmos para hacer esto, uno de los más nuevos y mejores es el algoritmo YIN, que fue desarrollado por Alain de Cheveigne. Recientemente agregué el algoritmo YIN a Marsyas, y su uso es muy simple.

Aquí está el código básico que usaría en Marsias:

 
    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; 
    } 

Este código crea primero un objeto de la serie que vamos a añadir componentes a. En una serie, cada uno de los componentes recibe la salida del MarSystem anterior en serie. Luego agregamos un SoundFileSource, que puede alimentar en un archivo .wav o .mp3 en. A continuación, agregamos el objeto ShiftInput que produce superposición de fragmentos de audio, que se introducen en el objeto AubioYin, que estima la frecuencia fundamental de ese fragmento de audio.

Luego le decimos a SoundFileSource que queremos leer el archivo enAudioFileName.

La instrucción while luego se repite hasta que SoundFileSource se quede sin datos. Dentro del ciclo while , tomamos los datos que la red ha procesado y sacamos el elemento (0,0), que es la estimación de frecuencia fundamental .

Esto es incluso más fácil cuando utiliza los enlaces de Python para Marsyas.

2

ALSA es una especie de estándar predeterminado para Linux ahora en virtud de los controladores del kernel que se incluyen en el kernel y el OSS que se está depreciando. Sin embargo, existen alternativas al espacio de usuario de ALSA, como jack, que parece estar dirigido a aplicaciones de tipo profesional de baja latencia. Parece que API tiene una mejor API, aunque no la he usado, mi breve exposición a la API ALSA me haría pensar que casi todo sería mejor.

5

Este guide debería ayudar. No use ALSA para su aplicación. Use una API de nivel más alto. Si decide que desea usar JACK, http://jackaudio.org/applications tiene tres sintonizadores de instrumento que puede usar como código de ejemplo.

0

Audacity incluye una función de diagrama de frecuencia y tiene filtros FFT incorporados.

3

http://clam-project.org/ CLAM es un marco de software completo para investigación y desarrollo de aplicaciones en el dominio de audio y música. Ofrece un modelo conceptual así como herramientas para el análisis, síntesis y procesamiento de señales de audio.

Tienen una gran API, buena GUI y algunas aplicaciones terminadas donde puedes ver todo.

Cuestiones relacionadas