Frage

(Vorwort: Dies ist meine erste audiobezogene Frage zum Stack-Überlauf, also werde ich versuchen, dies so gut wie möglich zu formulieren. Änderungen willkommen.)

Ich erstelle eine Anwendung, mit der Benutzer Musik schleifen können. Im Moment erlauben unsere Prototypen diese "Schleifenmarker" (als Uislern) in jeder Sekunde ein, um den Beginn und das Ende einer Schleife anzugeben. Wenn Sie Musik schleifen, sind Sekunden natürlich eine sehr grobe Weise, um damit umzugehen, also möchte ich stattdessen Beats verwenden.

Ich möchte nichts anderes als Mark Beats tun, damit die Uislherren:

  • Füttern unsere loadMusic Methode eine Audiodatei.
  • Führen Sie es durch eine Bibliothek aus, um Beats oder die Intervalle zwischen ihnen (vielleicht) zu erkennen.
  • Füttern Sie diesen Wert in den Schieberegler setNumberOfTickMarks: Methode.
  • Profitieren!

Leider haben die meisten Ergebnisse, die ich über Google begegnet bin und daher viel fortgeschrittenere Beat -Erkennungsbibliotheken ermöglicht haben, wie die Remixer. Overkill in meinem Fall.

Ist das etwas, was Coremedia, Avfoundation oder Audiotoolbox verarbeiten können? Wenn nicht, gibt es andere Bibliotheken, die damit umgehen können? Meine Untersuchung der Dokumentation von Apple hat nur relevante Ergebnisse geführt ... für MIDI -Dateien. Aber die eigene Software von Apple hat Funktionen wie diese, wie z. Imovies Snap-to-Beats-Funktionalität.

An dieser Stelle wären alle Anleitung, Code oder Abstracts immens hilfreich.

BEARBEITEN: Nachdem ich ein bisschen mehr herumgegraben habe, scheint es die richtige Terminologie für das, wonach ich suche, ist Beginnserkennung.

War es hilfreich?

Lösung

Beginnserkennungsalgorithmen sind in vielen Geschmacksrichtungen erhältlich, wenn man das RAW -Musiksignal betrachtet, bis zur Verwendung von Frequenzdomänentechniken.

Wenn Sie eine schnelle und einfache Möglichkeit wünschen, festzustellen, wo Beats sind:

  1. Das Musiksignal in kleine Segmente hacken (20-50ms Stücke)

  2. Berechnen Sie den quadratischen Summendurchschnitt des Signals: Sum(Xn ^2) / N (wo N ist die Anzahl der Stichproben pro 20-50ms)

Wenn Sie anspruchsvollere Techniken wünschen: untersuchen:

http://bingweb.binghamton.edu/~ahess2/onset_detction_nov302011.pdf

oder für die Hardcore -Behandlung davon:

http://www.elec.qmul.ac.uk/people/juan/documents/bello-tsap-2005.pdf

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