Frage

Ich frage mich, was die empfohlene Audio-Bibliothek zu benutzen?

Ich versuche, ein kleines Programm zu machen, die in Tuning Instrumenten helfen werden. (Klavier, Gitarre, etc.). Ich habe gelesen, über ALSA & Marsyas Audio-Bibliotheken.

Ich denke, die Idee, Daten von Mikrofon zu probieren, tun Analyse auf Brocken 5-10ms (von dem, was ich gelesen habe). Dann führt eine FFT, um herauszufinden, welche Frequenz den größten Peak enthält.

War es hilfreich?

Lösung

Marsyas eine gute Wahl, dies zu tun wäre, es für genau diese Art von Aufgabe errichtet wird.

Für ein Instrument Tuning, was Sie tun müssen, ist, einen Algorithmus zu haben, die die grundlegenden schätzt Frequenz (F0) ein Klang. Es gibt eine Reihe von Algorithmen, um dies zu tun, ist eines der neuesten und besten ist der YIN-Algorithmus, der von Alain de Cheveigné entwickelt wurde. Ich habe vor kurzem die YIN-Algorithmus zu Marsyas, und deren Verwendung einfach tot ist.

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

  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 zunächst eine Serie Objekt, das wir Komponenten hinzufügen. In einer Reihe, jede der Komponenten empfängt das Ausgangssignal des vorhergehenden MarSystem in serial. Wir fügen Sie dann eine SoundFileSource, die Sie füttern in einer WAV- oder MP3-Datei in. Wir fügen Sie dann die ShiftInput Objekt, das überlappende Stücke von Audio-Ausgänge, die werden dann in das AubioYin Objekt zugeführt, der die Grundfrequenz dieses Stück von Audio-Schätzungen.

Wir sagen dann die SoundFileSource, dass wir die Datei inAudioFileName lesen möchten.

Die while-Anweisung dann in einer Schleife, bis die SoundFileSource aus Daten ausgeführt wird. Im Inneren der während Schleife, nehmen wir die Daten, die das Netzwerk verarbeitet hat und den Ausgang (0,0) Element, das das ist Grundfrequenzschätzung.

Das ist noch einfacher, wenn Sie die Python-Bindings für Marsyas verwenden.

Andere Tipps

Das führen helfen sollte. verwenden ALSA nicht für Ihre Anwendung. Verwenden, um eine höhere Ebene API. Wenn Sie sich entscheiden, Sie möchten JACK verwenden, http://jackaudio.org/applications hat drei Instrument Tuner Sie verwenden, wie Beispielcode kann.

http://clam-project.org/ CLAM ist ein vollwertiges Software-Framework für die Forschung und Entwicklung von Anwendungen in der Audio-und Musik-Domain. Es bietet ein konzeptionelles Modell sowie Werkzeuge für die Analyse, Synthese und Verarbeitung von Audiosignalen.

Sie haben eine große API, netten GUI und ein paar fertige Anwendungen, wo man alles sehen kann.

ALSA ist eine Art Standard-Standard für Linux nun aufgrund der Kernel-Treiber im Kernel enthalten ist und OSS abgeschrieben werden. Allerdings gibt es Alternativen zu ALSA Userspace, wie Buchse , die bei niedriger Latenz professionellen Typ-Anwendungen ausgerichtet zu sein scheint. Es ist API scheint ein schöneres API zu haben, obwohl ich es nicht benutzt habe, meine kurze Exposition gegenüber dem ALSA-API würde ich, dass denke fast alles wäre besser.

Audacity einen Frequenz Plot-Funktion und verfügt über eine integrierte in FFT-Filter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top