2013-12-15 3 views
4

Я работаю над простым приложением аудио визуализации, которое использует анализатор API Web Audio для вытягивания частотных данных, как в this example. Ожидается, что чем больше визуальных элементов я добавляю к своим холстам, тем больше латентности между звуком и полученными визуальными результатами.Совершенная синхронизация с API веб-аудио

Существует ли стандартный подход к учету этой задержки? Я могу представить технику lookahead, которая буферизует предстоящие аудиоданные. Я мог бы работать с синхронизацией часов JavaScript и веб-аудио, но я убежден, что есть более интуитивный ответ. Возможно, это так же просто, как воспроизведение звука вслух с небольшой задержкой (хотя это не так сложно).

У dancer.js library, похоже, такая же проблема (всегда очень тонкая задержка), тогда как другие приложения, похоже, полностью решили проблему с задержкой. Я не мог точно определить технические различия. SoundJS, похоже, справляется с этим немного лучше, но было бы неплохо построить с нуля.

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

+0

Привет, протокол MIDI создан для него, возможно, вам стоит посмотреть так? – Cryptopat

+0

Привет, XLXMXNT, как вы решили свою проблему? Я вижу отставание в моем примере здесь: https://trusktr.io/polydance (игнорируйте предупреждение HTTPS, просто нажмите на него). – trusktr

ответ

3

Я думаю, что вы найдете ответы на некоторые из точного аудио времени в этой статье: http://www.html5rocks.com/en/tutorials/audio/scheduling/

SoundJS использует этот подход для обеспечения плавного зацикливания, но до сих пор использует JavaScript таймеров для замедленного воспроизведения. Это может не помочь вам синхронизировать синхронизацию звука с временем анимации. Когда я построил пример визуализатора музыки для SoundJS, я обнаружил, что мне нужно было поиграть с различными значениями для размера fft и частоты тика, чтобы получить хорошую производительность. Мне также нужно было кэшировать одну фигуру и повторно использовать ее с масштабированием, чтобы иметь графику.

Надеюсь, что это поможет.

+0

Действительно оцените прозвище SoundJS. На самом деле это может быть комбинация методов, которые в целом уменьшают накладные расходы на обработку.Однако, кажется, несколько, что песня с визуализацией отстает от первой пьесы, но если вы остановите ее и снова играете с самого начала (без обновления страницы), выбор времени в основном прекрасен. Может быть, что-то заглянуть. – interpolack

+0

Возможно, вы захотите это проверить: https://github.com/sebpiq/WAAClock – sebpiq

2

Я беспокоюсь, когда вы говорите, что более визуальные элементы, которые вы добавляете на свои холсты, тем больше латентности вы получаете в аудио. На самом деле это не так. Анимируются ли ваши полотна с помощью requestAnimationFrame? Какова ваша частота кадров?

Вы не можете, технически говоря, синхронизировать часы JS и Web Audio - часы Web Audio - это аудио аппаратные часы, которые буквально убегают от другого часового кристалла, чем системные часы (во многих системах, по крайней мере,). Подавляющее большинство веб-аудио (ScriptProcessorNodes, являющееся основным исключением) не должно иметь дополнительной задержки, когда ваш основной поток пользовательского интерфейса становится немного более перегруженным).

Если проблема заключается в том, что анализ просто кажется отстающим (то есть визуально последовательно «сзади» аудио), это может быть просто неотъемлемым отставанием в обработке БПФ. Вы можете уменьшить размер FFT в анализаторе, хотя тогда вы получите меньше определений; чтобы подделать его, вы также можете запустить весь звук через узел задержки, чтобы заставить его повторно синхронизировать с визуальными эффектами.

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

+0

Я использую requestAnimationFrame, и я, возможно, был неясно, что это графика, которая отстает от музыки. Звук продолжается как есть, но визуальные сигналы немного отстают, хотя и незначительно. – interpolack

Смежные вопросы