Когда SoundChannel фактически начинает воспроизводить звук?

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

Чтобы проверить это, запустите звук, затем каждый кадр сравнивает channel.position с ожидаемой позицией, например, getTimer() - startTime. Разница всегда (для меня) 23 или 46 мс.

Я нашел здесь вопрос, который говорит о свойстве position и о том, что оно обновляется со своей собственной скоростью, которая в моем случае составляет 43 кадра в секунду, примерно каждые 23 мс.

Есть ли способ получить контроль над началом воспроизведения звука и узнать, когда обновляется свойство position? И если бы кто-то мог объяснить, что на самом деле делает Flash и когда, это было бы здорово!

Я был бы очень признателен за все материалы, это так странно.

Редактировать: Я заметил, что свойство position содержит кратные только 23.219954648526077, например, 46.439909297052154, 69.65986394557822? Если вы спросите непосредственно после создания канала, он содержит номер, который я только что установил, но в следующем кадре это только эти конкретные номера. Есть идеи у кого-нибудь?

1 ответ

Интервал 23,219954648526077 мс получается из внутренней флэш-памяти, используя 1024 выборки в качестве размера буфера и частоту выборки 44100 Гц.

23,219954648526077 мс = (1024 выборки / 44100 выборок в секунду) * (1000 мс в секунду)

Если вам нужна точность сэмплирования, вы можете попробовать использовать SampleDataEvent для непосредственного вывода сэмплов и Sound.extract для доступа к загруженным сэмплам. Это поможет, если вы хотите синхронизировать несколько звуков друг с другом, но не синхронизируете звук с кадрами дисплея или видео.

Другие вопросы по тегам