Pregunta

Me pregunto cuál es la biblioteca de audio recomienda usar?

Estoy intentando hacer un pequeño programa que ayudará a los instrumentos de afinación. (Piano, Guitarra, etc.). He leído acerca de las bibliotecas de audio ALSA y Marsias.

Estoy pensando que la idea es tomar muestras de los datos del micrófono, hacer un análisis de trozos de 5-10ms (por lo que he leído). A continuación, realizar una FFT de averiguar qué frecuencia contiene el pico más grande.

¿Fue útil?

Solución

Marsias sería una gran opción para hacer esto, está construido precisamente para este tipo de tareas.

Para afinar un instrumento, lo que hay que hacer es tener un algoritmo que calcula la frecuencia fundamental frecuencia (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 he añadido el algoritmo YIN a Marsias, 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 primero crea un objeto de la serie que vamos a agregar componentes a. En una serie, cada uno de los componentes recibe la salida del MarSystem previa en serie. A continuación, añadir un SoundFileSource, que se puede alimentar en un archivo .wav o .mp3 en. A continuación, añadir el objeto ShiftInput que da salida a trozos superpuestos de audio, que a continuación, se introducen en el objeto AubioYin, que estima la frecuencia fundamental de que parte de audio.

A continuación, decimos al SoundFileSource que queremos leer el archivo inAudioFileName.

La sentencia while entonces un bucle hasta que la SoundFileSource se queda sin datos. Mientras que en el interior del bucle, tomamos los datos que la red ha procesado y la salida el elemento (0,0), que es el estimación de la frecuencia fundamental.

Esto es aún más fácil cuando se utiliza los enlaces de Python para Marsias.

Otros consejos

guiar debería ayudar. No use ALSA para su aplicación. Utilizar una API de alto nivel. Si usted decide que le gustaría usar JACK, http://jackaudio.org/applications tiene tres sintonizadores de instrumentos que se puede utilizar como ejemplo de código.

http://clam-project.org/ CLAM es un marco de software completo para la investigación y el 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, interfaz gráfico agradable y unos acabados aplicaciones donde se puede ver todo.

ALSA es una especie de estándar por defecto para Linux ahora en virtud de los controladores del núcleo está incluido en el núcleo y OSS produce la depreciación. Sin embargo, hay alternativas a ALSA-carga, como Jack, que parece estar dirigido a aplicaciones de tipo profesional de baja latencia. Es API parece tener una API más agradable, aunque yo no lo he utilizado, mi breve exposición a la API de ALSA me haría pensar que casi cualquier cosa sería mejor.

Audacity incluye una característica gráfico de frecuencia y ha incorporado un filtro de FFT.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top