Использование AvFoundation / Coremedia / Другие рамки для обнаружения ударов / настройки

StackOverflow https://stackoverflow.com/questions/9355524

Вопрос

(Предисловие: Это мой первый вопрос, связанный с аудио, при переполнении стека, поэтому я постараюсь сказать это как можно лучше. Редакты приветствуются.)

Я создаю приложение, которое позволит пользователям зацикливаться на музыке. На данный момент наши прототипы позволяют этим «маркерам цикла» (реализованы как Uisliders) в каждую секунду, указывая начало и конец цикла. Очевидно, что при зацикке музыки, секунды - очень грубая манера, поэтому я хотел бы вместо этого использовать удары.

Я не хочу делать ничего, кроме как Марк Бит, чтобы Uisliders, чтобы привязать:

  • Кормите наш loadMusic Метод аудиофайл.
  • Запустите ее через библиотеку, чтобы обнаружить удары или интервалы между ними (возможно).
  • Подавать это значение в ползунка setNumberOfTickMarks: метод
  • Выгода!

К сожалению, большинство результатов, с которыми я сталкивался через Google, и поэтому дали гораздо более продвинутые библиотеки обнаружения ударов, такие как те, которые использовали бы ремиксеры. Излишний в моем случае.

Это то, с чем может справиться Coremedia, Avfoundation или Audiotoolbox? Если нет, есть ли другие библиотеки, которые могут справиться с этим? Мое исследование документации Apple дало только соответствующие результаты ... для файлов MIDI. Но у Apple есть такие функции, как это, такие как Функциональность Snap-To-Beats Imovie.

Любое руководство, код или тезисы были бы очень полезны на данный момент.

РЕДАКТИРОВАТЬ: После того, как я немного больше копался, кажется правильной терминологией того, что я ищу, обнаружение начала.

Это было полезно?

Решение

Алгоритмы обнаружения начала бывают многих ароматов от рассмотрения сигнала необработанной музыки до использования методов частотных доменов.

Если вы хотите быстрый и простой способ определить, где находятся удары:

  1. Нарезать музыкальный сигнал на небольшие сегменты (20-50ms кусочки)

  2. Вычислить квадратную сумму среднего сигнала: Sum(Xn ^2) / N (куда N это количество выборки на 20-50ms)

Если вы хотите, чтобы больше сложных техник изучают:

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

или для жесткой обработки этого:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top