GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Echtzeit-Audioanalyse unter Linux

Marsyas wäre dafür eine gute Wahl, es ist genau für diese Art von Aufgabe gebaut.

Um ein Instrument zu stimmen, benötigen Sie einen Algorithmus, der die Grundfrequenz (F0) eines Klangs schätzt. Dafür gibt es eine Reihe von Algorithmen, einer der neuesten und besten ist der YIN-Algorithmus, der von Alain de Cheveigne entwickelt wurde. Ich habe kürzlich den YIN-Algorithmus zu Marsyas hinzugefügt, und die Verwendung ist kinderleicht.

Hier ist der grundlegende Code, den Sie in Marsyas verwenden würden:

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

Dieser Code erstellt zuerst ein Series-Objekt, dem wir Komponenten hinzufügen werden. In einer Serie empfängt jede der Komponenten die Ausgabe des vorherigen MarSystems seriell. Wir fügen dann eine SoundFileSource hinzu, in die Sie eine .wav- oder .mp3-Datei einspeisen können. Dann fügen wir das ShiftInput-Objekt hinzu, das überlappende Audioblöcke ausgibt, die dann in das AubioYin-Objekt eingespeist werden, das die Grundfrequenz dieses Audioblocks schätzt.

Dann teilen wir der SoundFileSource mit, dass wir die Datei in AudioFileName.

lesen wollen

Die while-Anweisung wird dann in einer Schleife ausgeführt, bis die SoundFileSource keine Daten mehr hat. Innerhalb der While-Schleife nehmen wir die Daten, die das Netzwerk verarbeitet hat, und geben das (0,0)-Element aus, das die Schätzung der Grundfrequenz ist.

Dies ist noch einfacher, wenn Sie die Python-Bindungen für Marsyas verwenden.


http://clam-project.org/CLAM ist ein vollwertiges Software-Framework für Forschung und Anwendungsentwicklung im Audio- und Musikbereich. Es bietet ein konzeptionelles Modell sowie Werkzeuge für die Analyse, Synthese und Verarbeitung von Audiosignalen.

Sie haben eine großartige API, eine schöne GUI und ein paar fertige Apps, in denen Sie alles sehen können.


Diese Anleitung soll helfen. Verwenden Sie ALSA nicht für Ihre Anwendung. Verwenden Sie eine API auf höherer Ebene. Wenn Sie JACK verwenden möchten, finden Sie unter http://jackaudio.org/applications drei Instrumententuner, die Sie als Beispielcode verwenden können.


ALSA ist jetzt eine Art Standardstandard für Linux, da die Kernel-Treiber in den Kernel aufgenommen werden und OSS abgeschrieben wird. Es gibt jedoch Alternativen zum ALSA-Benutzerraum, wie Jack, der anscheinend auf professionelle Anwendungen mit geringer Latenz ausgerichtet ist. Seine API scheint eine schönere API zu haben, obwohl ich sie nicht benutzt habe, würde mich mein kurzer Kontakt mit der ALSA-API denken lassen, dass fast alles besser wäre.


Linux
  1. Linux schneller booten

  2. Linux-Prozesszustände

  3. Extrahieren Sie Schätzungen der TCP-Umlaufzeit (RTT) unter Linux

  4. ist es möglich, ein Linux-Gerät zu einem bestimmten Zeitpunkt aufzuwecken?

  5. Wie verwendet Linux eine Echtzeituhr?

Erweiterte Audiosteuerung unter Linux

Netdata – Echtzeit-Leistungsüberwachungstool für Linux

Überprüfen Sie die Zeitzone in Linux

3 Möglichkeiten zum Ansehen von Protokollen in Echtzeit unter Linux

Beispiele für Linux-Datumsbefehle

Überwachen Sie die Bandbreitennutzung des Linux-Netzwerks in Echtzeit mit nload