Question

( Préface:.. Ceci est ma première question connexe audio-débordement de la pile, donc je vais essayer de ce mot mieux que je le peux Edits bienvenue)

Je crée une application qui va permettre aux utilisateurs de la musique en boucle. En ce moment, nos prototypes permettent à ces « marqueurs de boucle » (mis en œuvre en UISliders) à enclenchent à chaque seconde, en spécifiant le début et la fin d'une boucle. Il est évident que, quand la musique en boucle, les secondes sont d'une manière très grossière pour gérer cela, donc je voudrais utiliser des beats à la place.

Je ne veux pas faire autre chose que des beats de marque pour les UISliders à enclenchent à:

  • Flux notre méthode loadMusic un fichier audio.
  • Exécuter à travers une bibliothèque pour détecter les battements ou les intervalles entre eux (peut-être).
  • Flux cette valeur dans la méthode de setNumberOfTickMarks: du curseur.
  • Profit!

Malheureusement, la plupart des résultats que j'ai rencontré via Google et SO ont donné des bibliothèques de détection de battement beaucoup plus avancés comme ceux qui remixeurs utiliserait. Overkill dans mon cas.

Est-ce quelque chose qui CoreMedia, AVFoundation ou AudioToolbox peut gérer? Sinon, y at-il d'autres bibliothèques qui peuvent gérer cela? Mes recherches sur la documentation d'Apple n'a donné des résultats pertinents ... pour les fichiers MIDI. Mais propre logiciel d'Apple ont des caractéristiques comme celui-ci, comme battements à boutons-pression iMovie fonctionnalité .

Toute orientation, code ou résumés serait extrêmement utile à ce stade.

EDIT:. Après avoir fait un peu plus creuser autour, il semble que la terminologie correcte pour ce que je suis à la recherche est début détection

Était-ce utile?

La solution

Début des algorithmes de détection viennent en plusieurs saveurs de regarder le signal musical brut à l'aide de techniques de domaine de fréquence.

si vous voulez un moyen rapide et facile à détermi où beats sont:

  1. Chop le signal de musique en petits segments (morceaux de 20-50ms)

  2. Calculer la moyenne de la somme au carré du signal: Sum(Xn ^2) / N (où N est le nombre d'échantillons par 20-50ms)

Si vous voulez des techniques plus sophistiquées dans l'air:

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

ou pour le traitement hardcore de celui-ci:

http: //www.elec. qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top