Pergunta

Eu estou querendo saber o que é a biblioteca de áudio recomendado para uso?

Eu estou tentando fazer um pequeno programa que irá ajudar nos instrumentos de ajuste. (Piano, Viola, etc). Eu li sobre ALSA & Marsyas bibliotecas de áudio.

Estou pensando a idéia é dados da amostra de microfone, fazer uma análise sobre pedaços de 5-10ms (do que tenho lido). Em seguida, executar uma FFT para descobrir qual frequência contém a maior pico.

Foi útil?

Solução

Marsyas seria uma ótima opção para fazer isso, ele é construído exatamente para este tipo de tarefa.

Para afinar um instrumento, o que você precisa fazer é ter um algoritmo que calcula fundamental frequência (F0) de um som. Há uma série de algoritmos para fazer isso, um dos mais novos e melhor é o algoritmo YIN, que foi desenvolvido por Alain de Cheveigne. I recentemente adicionou o algoritmo YIN para Marsyas, e usá-lo é simples morto.

Aqui está o código básico que você usaria em 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;
  }

Este código primeiro cria um objeto Series que vamos adicionar componentes a. Em uma série, cada um dos componentes recebe a saída do MarSystem anterior em série. Em seguida, adicionar um SoundFileSource, que você pode alimentar em um .wav ou .mp3 arquivo em. Em seguida, adicionar o objeto ShiftInput que gera sobreposição de pedaços de áudio, que são então alimentados no objeto AubioYin, que estima a frequência fundamental desse pedaço de áudio.

Em seguida, dizer a SoundFileSource que queremos ler a inAudioFileName arquivo.

A instrução while então laços até o SoundFileSource fica sem dados. Dentro da enquanto ciclo, podemos assumir que os dados da rede tenha processado e de saída (0,0) elemento, que é a estimativa de freqüência fundamental.

Isto é ainda mais fácil quando você usa as ligações Python para Marsyas.

Outras dicas

Este guiar deve ajudar. Não use ALSA para sua aplicação. Use uma API de nível superior. Se você decidir que gostaria de usar JACK, http://jackaudio.org/applications tem três afinadores de instrumentos você pode usar como exemplo de código.

http://clam-project.org/ CLAM é um framework de software completa para pesquisa e desenvolvimento de aplicações em áudio e Domínio Music. Ele oferece um modelo conceitual, bem como ferramentas para a análise, síntese e processamento de sinais de áudio.

Eles têm uma grande API, interface gráfica agradável e alguns aplicativos acabados, onde você pode ver tudo.

ALSA é uma espécie de padrão padrão para linux agora em virtude dos drivers do kernel que está sendo incluído no kernel e OSS sendo depreciado. No entanto, existem alternativas para ALSA userspace, como jack, o que parece ser voltado para aplicações de baixa latência tipo profissional. É da API parece ter um mais agradável API, embora eu não usei, minha breve exposição ao API ALSA me faria pensar que quase tudo seria melhor.

Audacity inclui um recurso gráfico de frequência e foi construído com filtros FFT.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top