Музыка - сложная звуковая волна, колебания воздуха в вашей комнате, в клубе, или же между мембраной ваших наушников и барабанной перепонкой. Преобразование этих колебаний в нечто мелодичное и ритмичное (то, что наш мозг делает автоматически), требует определенных вычислений. В большинстве своем эти вычисления - быстрое преобразование Фурье, которое представляет комплексный звуковой сигнал в виде суммы синусоид определеных частот и громкостей. Для тех, кому сложно с ходу понять, как кривая связана со звуком, поясним: звуковая волна синусоидальной формы - это простейший музыкальный тембр, знакомый каждому, например, по телефонным гудкам. Частота этой синусоиды - это высота звука, а амплитуда - его громкость. Для наглядности приведем разложение на синусоиды простейших форм звуковой волны:
Интересно... Не очень поняла, как работает синхронизация таймера игры при отклонениях в самой композиции. Ну понятно, если брать незамысловатые танцевальные треки - тут легко. А как быть, если я загрузила мелодию со множеством ударных рисунков, или основной ритм которой сам меняется, ну, к примеру Bohemian Rhapsody?
Процент распознанного постоянного ритма в песне должен быть не менее 70%, чтобы загрузка прошла успешно. Т.е. поиграть под джазовые импровизации с меняющимся темпом или Bohemian Rhapsody не получится (если, конечно, вы не решите отрезать от последней собственно ритмичную часть) В процессе воспроизведения мы следим за отрисованной заранее картой пиков. Это дает возможность перезапускать наш главный таймер бита (настроенный на основной bpm) в тех случаях, когда в композиции встретилась короткая пауза\проигрыш, не соответствующая основному размеру песни, а потом ритм снова возвращается. Так же это помогает правильно запустить таймер в самом начале, ведь далеко не во всех композициях основной ритм начинается с первой секунды аудиофайла.