![]() |
"ровное" звучание Метронома
Приветствую всех
Нужна помощь с Метрономом: заказчик уже всю плеш проел с тем, что звучание не равномерное, мол некие сбои в переодичности воспроизведения звука счелчка звук у меня - это коротенький wav файл который переодично запускается по средствам переодичной функции setInterval носом в кучу примеров где всё "ровно" тикает, а мне от этого не легче+) Если кто сталкивался с разработкой таких вещей, подскажите выход из сложившецся ситуации, может каким то другим способом звук выводить переодично или что то ещё, чего я по неопотности не знаю Благодарю |
возможно у вас малькое значение fps, setInterval стремится выполняться с частотой fps, поэтому при маленьких значениях fps вызовы функции могут пропадать.
|
Увы но нет, ставил даже максимальный fps (120), не помогло, сама функция setInterval не идеальа, когда периуд повторения равна, например, 230 мс, то на самом деле функция повторяется через 230 ... 238 мс, проверка делалась по средством setTimer().
|
Что бы от FPS не "зависило" можно в конце функции дописать
Код AS1/AS2:
|
Это погрешности флеш плеера, их никак не избежать.
По поводу того, что setInterval стремится к FPS - это всё ложь и провокация, он асинхронен. И да, используйте Timer. |
Timer — это не тут :)
|
Ой, разделом ошибся =)
|
getTimer() возвращает количество миллисекунд с момента запуска флешки
если с умом сделать, будет тикать точно |
что вы предлагаете? чделать переодичную функцию которая бы проверяла сколько времени прошло после начала проигрывания ролика и сопоставлять некие промежуточные значения?
|
getTimer имеет точно такую-же низкую точность, как и setInterval и все таймеры во Flash.
|
Метроном фиксированный? Если да, то можно попробовать дополнить файл тишиной до нужной длины и сделать:
Код:
mySound = new Sound();Ну а если интервал метронома произволен, то видел в сети программые генераторы звука на флеше, то есть паузу можно программно выставить и запустить звук. А у вас ко звуку метронома изображение разве никакое не привязано? UPD. Ну и в догонку еще один вариант - отсчитывать интервалы на javascript (setTimeout) и запускать функцию во флеше, проигрывающую звук (вроде так можно). Как тут будет с точностью не знаю - не проверил. |
Цитата:
|
Ок... вобщем, ситуация примерно следующая. Когда вы начинаете во флеше воспроизводить звук, флешу нужно получить систему. На то, чтобы ее получить уходит время. Это время может быть разным т.как. никакая ось вам прям сразу напрямую доступ к девайсу не даст.
Точность таймера и всяких интервалов во флеше колеблется в пределах 10 миллисекунд, на то, чтобы получить систему, на разных осях может уйти и до 100 миллисекунд... Это значит, что вариант с таймерами отпадает в принципе. Но, если флеш будет постоянно играть PCM звук (для MP3 у него особая схема синхронизации), то система у него будет постоянно. Если звук встроенный, то можно добится вполне сносного результата... Вы никогда не сможете добится, чтобы воспроизведение началось именно по клику на кнопке, например, но добится того, чтобы интервалы впоследствии были ровными в принципе можно. Я бы наверное все-таки попробовал это делать на AS3 под десятый плеер с использованием SampleDataEvent, не то, чтобы оно было так уж сильно лучше, но все же... Еще есть вариант - в 10.1 добавили возможность подгружать байты NetStream'у, я это еще не пробовал, и не знаю как там с синхронизацией, но смысл попробовать думаю есть. |
С SampleDataEvent всё будет очень ровно.
|
Если нужно только один звук играть - то да, а если нужно несколько синхронизировать - то нет. Т.как не извесно, и не возможно рассчитать время которое пройдет между play() и тем, когда действительно начнется воспроизведение.
|
Несколько можно смешать программно, играя через один поток. Это медленно.
|
| Часовой пояс GMT +4, время: 02:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.