Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   "ровное" звучание Метронома (http://www.flasher.ru/forum/showthread.php?t=139600)

Evgan 05.05.2010 18:01

"ровное" звучание Метронома
 
Приветствую всех

Нужна помощь с Метрономом:
заказчик уже всю плеш проел с тем, что звучание не равномерное, мол некие сбои в переодичности воспроизведения звука счелчка
звук у меня - это коротенький wav файл который переодично запускается по средствам переодичной функции setInterval
носом в кучу примеров где всё "ровно" тикает, а мне от этого не легче+)
Если кто сталкивался с разработкой таких вещей, подскажите выход из сложившецся ситуации, может каким то другим способом звук выводить переодично или что то ещё, чего я по неопотности не знаю
Благодарю

amesqit 05.05.2010 19:35

возможно у вас малькое значение fps, setInterval стремится выполняться с частотой fps, поэтому при маленьких значениях fps вызовы функции могут пропадать.

Evgan 06.05.2010 01:30

Увы но нет, ставил даже максимальный fps (120), не помогло, сама функция setInterval не идеальа, когда периуд повторения равна, например, 230 мс, то на самом деле функция повторяется через 230 ... 238 мс, проверка делалась по средством setTimer().

samana 06.05.2010 18:21

Что бы от FPS не "зависило" можно в конце функции дописать
Код AS1/AS2:

updateAfterEvent()


Psycho Tiger 06.05.2010 18:53

Это погрешности флеш плеера, их никак не избежать.
По поводу того, что setInterval стремится к FPS - это всё ложь и провокация, он асинхронен.

И да, используйте Timer.

udaaff 06.05.2010 21:16

Timer — это не тут :)

Psycho Tiger 06.05.2010 22:50

Ой, разделом ошибся =)

megapup 07.05.2010 02:01

getTimer() возвращает количество миллисекунд с момента запуска флешки
если с умом сделать, будет тикать точно

Evgan 07.05.2010 02:17

что вы предлагаете? чделать переодичную функцию которая бы проверяла сколько времени прошло после начала проигрывания ролика и сопоставлять некие промежуточные значения?

VVall 07.05.2010 02:38

getTimer имеет точно такую-же низкую точность, как и setInterval и все таймеры во Flash.

rainbowrussia 07.05.2010 06:08

Метроном фиксированный? Если да, то можно попробовать дополнить файл тишиной до нужной длины и сделать:

Код:

mySound = new Sound();
mySound.attachSound("chpok");
mySound.start(0, 200);

На такое воспроизведение, вроде бы, не влияет почти ничего, в отличает от интервалов, таймера, кадров.

Ну а если интервал метронома произволен, то видел в сети программые генераторы звука на флеше, то есть паузу можно программно выставить и запустить звук.

А у вас ко звуку метронома изображение разве никакое не привязано?

UPD. Ну и в догонку еще один вариант - отсчитывать интервалы на javascript (setTimeout) и запускать функцию во флеше, проигрывающую звук (вроде так можно). Как тут будет с точностью не знаю - не проверил.

etc 07.05.2010 08:06

Цитата:

Сообщение от rainbowrussia (Сообщение 906516)
Как тут будет с точностью не знаю - не проверил.

Ещё хуже.

wvxvw 07.05.2010 18:16

Ок... вобщем, ситуация примерно следующая. Когда вы начинаете во флеше воспроизводить звук, флешу нужно получить систему. На то, чтобы ее получить уходит время. Это время может быть разным т.как. никакая ось вам прям сразу напрямую доступ к девайсу не даст.
Точность таймера и всяких интервалов во флеше колеблется в пределах 10 миллисекунд, на то, чтобы получить систему, на разных осях может уйти и до 100 миллисекунд... Это значит, что вариант с таймерами отпадает в принципе.
Но, если флеш будет постоянно играть PCM звук (для MP3 у него особая схема синхронизации), то система у него будет постоянно. Если звук встроенный, то можно добится вполне сносного результата... Вы никогда не сможете добится, чтобы воспроизведение началось именно по клику на кнопке, например, но добится того, чтобы интервалы впоследствии были ровными в принципе можно.
Я бы наверное все-таки попробовал это делать на AS3 под десятый плеер с использованием SampleDataEvent, не то, чтобы оно было так уж сильно лучше, но все же... Еще есть вариант - в 10.1 добавили возможность подгружать байты NetStream'у, я это еще не пробовал, и не знаю как там с синхронизацией, но смысл попробовать думаю есть.

VVall 07.05.2010 19:33

С SampleDataEvent всё будет очень ровно.

wvxvw 07.05.2010 21:12

Если нужно только один звук играть - то да, а если нужно несколько синхронизировать - то нет. Т.как не извесно, и не возможно рассчитать время которое пройдет между play() и тем, когда действительно начнется воспроизведение.

VVall 07.05.2010 22:06

Несколько можно смешать программно, играя через один поток. Это медленно.


Часовой пояс GMT +4, время: 02:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.