Pregunta

(Prefacio: Esta es mi primera pregunta relacionada con el audio en Stack Overflow, así que intentaré decir esto lo mejor que pueda. Ediciones bienvenidas).

Estoy creando una aplicación que permitirá a los usuarios encender la música. En este momento, nuestros prototipos permiten que estos "marcadores de bucle" (implementados como UISLIDER) se ajusten cada segundo, especificando el comienzo y el final de un bucle. Obviamente, al bucle de la música, los segundos son una manera muy cruda para manejar esto, por lo que me gustaría usar ritmos.

No quiero hacer nada más que Mark Beats para que los uislantes se ajusten a:

  • Alimentar a nuestro loadMusic método un archivo de audio.
  • Ejecutarlo a través de una biblioteca para detectar latidos o los intervalos entre ellos (tal vez).
  • Alimentar ese valor en el control deslizante setNumberOfTickMarks: método.
  • ¡Lucro!

Desafortunadamente, la mayoría de los resultados con los que he encontrado a través de Google y, por lo tanto, han arrojado bibliotecas de detección de ritmos mucho más avanzadas como las que los remixers usarían. Exagerado en mi caso.

¿Es esto algo que Coremedia, Avfoundation o AudiotOolbox pueden manejar? Si no, ¿hay otras bibliotecas que puedan manejar esto? Mi investigación sobre la documentación de Apple solo ha arrojado resultados relevantes ... para archivos MIDI. Pero el propio software de Apple tiene características como esta, como La funcionalidad de IMovie Snap-to-Beats.

Cualquier orientación, código o resúmenes sería inmensamente útil en este momento.

EDITAR: Después de cavar un poco más, parece que la terminología correcta para lo que estoy buscando es detección de inicio.

¿Fue útil?

Solución

Los algoritmos de detección de inicio vienen en muchos sabores desde mirar la señal de música cruda hasta usar técnicas de dominio de frecuencia.

Si quieres una forma rápida y fácil de determinar dónde están los ritmos:

  1. Porta la señal de la música en segmentos pequeños (20-50ms trozos)

  2. Calcule el promedio de la Sume al cuadrado de la señal: Sum(Xn ^2) / N (dónde N es el número de muestra por 20-50ms)

Si desea que las técnicas más sofisticadas consideren:

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

o para el tratamiento hardcore de la misma:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top