Domanda

(Prefazione: Questa è la mia prima domanda relativa all'audio su Stack Overflow, quindi proverò a convincerlo nel miglior modo possibile. Modifiche benvenute.)

Sto creando un'applicazione che consentirà agli utenti di loop di musica. Al momento i nostri prototipi consentono a questi "marcatori di loop" (attuati come Uisliders) di scattare ogni secondo, specificando l'inizio e la fine di un ciclo. Ovviamente, quando si aggirano la musica, i secondi sono un modo molto rozzo per gestirlo, quindi vorrei invece usare i battiti.

Non voglio fare altro che Mark Beats affinché gli Uislider possano scattare:

  • Nutrire il nostro loadMusic Metodo un file audio.
  • Eseguilo attraverso una libreria per rilevare battiti o intervalli tra loro (forse).
  • Alimenta quel valore nel cursore setNumberOfTickMarks: metodo.
  • Profitto!

Sfortunatamente, la maggior parte dei risultati in cui ho incontrato tramite Google e quindi hanno prodotto librerie di rilevamento dei beat molto più avanzate come quelle che i remixer avrebbero usato. Eccessivo nel mio caso.

È qualcosa che Coremedia, Avfoundation o Audioolbox possono gestire? In caso contrario, ci sono altre librerie che possono gestirlo? La mia ricerca sulla documentazione di Apple ha prodotto solo risultati pertinenti ... per i file MIDI. Ma il software di Apple ha funzionalità come questa, come La funzionalità Snap-to-Beat di Imovie.

Qualsiasi guida, codice o abstract sarebbe immensamente utile a questo punto.

MODIFICARE: Dopo aver fatto un po 'di più a scavare, sembra che la terminologia corretta per quello che sto cercando sia rilevamento di insorgenza.

È stato utile?

Soluzione

Gli algoritmi di rilevamento dell'inizio sono disponibili in molti sapori dal guardare il segnale musicale grezzo all'utilizzo di tecniche di dominio di frequenza.

Se vuoi un modo semplice e semplice per determinare dove sono i battiti:

  1. Taglia il segnale musicale in piccoli segmenti (20-50ms blocchi)

  2. Calcola la media della somma quadrata del segnale: Sum(Xn ^2) / N (dove N è il numero di campione per 20-50ms)

Se vuoi, tecniche più sofisticate, guarda:

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

o per il trattamento hardcore di esso:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top