GNU/Linux >> Linux Esercitazione >  >> Linux

Analisi audio in tempo reale in Linux

Marsyas sarebbe un'ottima scelta per farlo, è costruito esattamente per questo tipo di attività.

Per accordare uno strumento, quello che devi fare è disporre di un algoritmo che stimi la frequenza fondamentale (F0) di un suono. Esistono numerosi algoritmi per farlo, uno dei più recenti e migliori è l'algoritmo YIN, sviluppato da Alain de Cheveigne. Di recente ho aggiunto l'algoritmo YIN a Marsyas e usarlo è semplicissimo.

Ecco il codice di base che useresti in 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;
  }

Questo codice crea innanzitutto un oggetto Series a cui aggiungeremo i componenti. In una serie, ciascuno dei componenti riceve in serie l'output del MarSystem precedente. Quindi aggiungiamo un SoundFileSource, in cui puoi inserire un file .wav o .mp3. Quindi aggiungiamo l'oggetto ShiftInput che emette porzioni sovrapposte di audio, che vengono poi inserite nell'oggetto AubioYin, che stima la frequenza fondamentale di quella porzione di audio.

Quindi diciamo a SoundFileSource che vogliamo leggere il file in AudioFileName.

L'istruzione while esegue quindi un ciclo finché SoundFileSource non esaurisce i dati. All'interno del ciclo while, prendiamo i dati che la rete ha elaborato e restituiamo l'elemento (0,0), che è la stima della frequenza fondamentale.

Questo è ancora più semplice quando usi i binding Python per Marsyas.


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

Hanno un'ottima API, una bella GUI e alcune app finite in cui puoi vedere tutto.


Questa guida dovrebbe aiutare. Non usare ALSA per la tua applicazione. Utilizza un'API di livello superiore. Se decidi di utilizzare JACK, http://jackaudio.org/applications ha tre accordatori di strumenti che puoi utilizzare come codice di esempio.


ALSA è una sorta di standard predefinito per Linux ora in virtù dei driver del kernel inclusi nel kernel e dell'OSS deprezzato. Tuttavia ci sono alternative allo spazio utente ALSA, come jack, che sembra essere rivolto ad applicazioni di tipo professionale a bassa latenza. La sua API sembra avere un'API migliore, anche se non l'ho usata, la mia breve esposizione all'API di ALSA mi farebbe pensare che quasi tutto sarebbe migliore.


Linux
  1. Avvio di Linux più veloce

  2. Linux Real Time Scenari e problemi con le loro soluzioni

  3. Linux – Union Mount su Linux?

  4. Directory JAVA_HOME in Linux

  5. In che modo Linux utilizza un orologio in tempo reale?

Controllo audio avanzato su Linux

Netdata – Strumento di monitoraggio delle prestazioni in tempo reale per Linux

Controlla il fuso orario in Linux

3 modi per guardare i registri in tempo reale in Linux

Esempi di comandi data di Linux

Monitora l'utilizzo della larghezza di banda della rete Linux in tempo reale con nload