Domanda

Mi chiedo che cosa è la libreria audio consiglia di utilizzare?

Sto cercando di fare un piccolo programma che sarà di aiuto nel strumenti di tuning. (Pianoforte, Chitarra, etc.). Ho letto su ALSA e Marsia libreria di audio.

sto pensando l'idea è di campionare i dati dal microfono, fare analisi su pezzi di 5-10ms (da quello che ho letto). Poi eseguire una FFT di capire quale frequenza contiene la più grande picco.

È stato utile?

Soluzione

Marsia sarebbe una grande scelta per fare questo, è costruito proprio per questo tipo di compito.

Per accordare uno strumento, quello che dovete fare è di avere un algoritmo che stima il fondamentale frequenza (F0) di un suono. Ci sono una serie di algoritmi per fare questo, uno dei più nuovi e migliori è l'algoritmo YIN, che è stato sviluppato da Alain de Cheveigné. Recentemente ho aggiunto l'algoritmo YIN a Marsia, ed il suo utilizzo è semplice morto.

Ecco il codice di base che si usa in Marsia:

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

Questo codice crea prima un oggetto della serie che l'aggiungeremo componenti. In una serie, ciascuno dei componenti riceve l'uscita del MarSystem precedente in serie. Poi aggiungiamo un SoundFileSource, che si può nutrire in un file .wav o .mp3 in. Abbiamo poi aggiungere l'oggetto ShiftInput che emette blocchi sovrapposti di audio, che vengono poi alimentati nell'oggetto AubioYin, che stima la frequenza fondamentale di quel pezzo di audio.

Abbiamo poi diciamo la SoundFileSource che vogliamo leggere il file inAudioFileName.

L'istruzione while loop allora fino al SoundFileSource esaurisce dati. All'interno il tempo loop, prendiamo i dati che la rete ha elaborato e uscita l'elemento (0,0), che è il stima frequenza fondamentale.

Questo è ancora più facile quando si utilizzano i binding Python per Marsia.

Altri suggerimenti

guide dovrebbe aiutare. Non usare ALSA per l'applicazione. Utilizzare un'API livello superiore. Se si decide che si desidera utilizzare JACK, http://jackaudio.org/applications ha tre sintonizzatori strumento che si può usare come esempio di codice.

http://clam-project.org/ CLAM è un framework software completo per la ricerca e lo sviluppo di applicazioni nel dominio audio e musica. Offre un modello concettuale, nonché strumenti per l'analisi, la sintesi e l'elaborazione dei segnali audio.

Hanno un grande API, grafica piacevole e alcune applicazioni finiti, dove si può vedere tutto.

ALSA è una sorta di standard di default per Linux ora in virtù dei driver del kernel di essere incluse nel kernel e OSS in corso di ammortamento. Tuttavia esistono alternative ai ALSA spazio utente, quali jack , che sembra rivolto ad applicazioni di tipo professionale a bassa latenza. E 'API sembra avere un API più bello, anche se non ho usato, la mia breve esposizione al API ALSA mi farebbe pensare che qualsiasi cosa sarebbe meglio.

Audacity include una caratteristica trama di frequenza ed è built-in filtri FFT.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top