Просмотр полной версии : зацикливание звука sound.start
provigator
08.08.2010, 13:49
пишу на AS2.0
аттачу из библиотеки звук:
snd=new Sound()
snd.attachSound("s")
в нужное время проигрываю звук, зацикливая:
snd.start(0, 999)
проблема в том что после проигрывания звука появляется небольшая пауза
затем опять проигрывается звук и появляется пауза и т.д.
таким образом невозможно получить непрерывный звук
подскажите как решить эту проблему
Для оформления своего кода надо использовать теги (http://www.flasher.ru/forum/showthread.php?t=122539)
Попробуйте
snd = new Sound();
snd.attachSound("s");
snd.onSoundComplete = function ()
{
snd.start();
};
snd.start();
Но идеальную склейку никогда не получится организовать.
Также советую использовать для экспериментов несжатый звук (wav).
Можно использовать два экземпляра одного и того же звука и за несколько миллисекунд до окончания одного стартовать другой, но даже в этом случае будут временные искажения просто в силу того, что на флеше точно работать со временем невозможно, по крайней мере на AS2 (Особенно измерять текущее положение проигрываемого звука).
В дополнение вот (http://www.flasher.ru/forum/showthread.php?t=130658) тема была. Посмотрите там второй пример ("Cклеиваем звук без шва.rar")
provigator
08.08.2010, 14:35
2 mooncar:
по твоему примеру такая же пауза
Ты о примере с onSoundComplete ?
Ну да, я говорил, что это не идеальный вариант, он только удобнее - не надо указывать 999 как количество повтора.
Тогда смотри тему, которую я привел и второй пример там.
И учти, идеального решения нет.
rainbowrussia
08.08.2010, 14:58
таким образом невозможно получить непрерывный звук
Есть подозрение что у вас в звуке присутствует пауза в начале или в конце.
rainbowrussia, пауза, пусть крохотная, но будет в любом случае...
provigator
08.08.2010, 15:29
2 mooncar:
помогла твоя идея:
Можно использовать два экземпляра одного и того же звука и за несколько миллисекунд до окончания одного стартовать другой.
snd1=new Sound()
snd1.attachSound("s")
snd2=new Sound()
snd2.attachSound("s")
n=1
t=0
snd1.start()
onEnterFrame=function() {
t++
if(n==1 and t==42) {
snd1.stop()
snd2.start(0.1,1)
t=0
n=2
}
if(n==2 and t==42) {
snd2.stop()
snd1.start(0.1,1)
t=0
n=1
}
}
cтартовать нада не с позиции 0 которая стоит по дефолту: sound.start() а с 0.1 и более секунды звука sound.start(0.1,1)
c десятыми долями секунды работать возможно ведь выставляемое fps это количество кадров в секунду
в моём примере я подбирал время проигрывания звука t с учётом fps=24 а также времени проигрывания звука
стыковка получилась идеальной
спс
Ну вот и хорошо... код только оформите.
rainbowrussia
08.08.2010, 16:22
rainbowrussia, пауза, пусть крохотная, но будет в любом случае...
Не поленился, провел эксперимент. Сгенерировал синус без пауз вначале и в конце, приаттачил, воспроизвел. Если в свойствах экспорта ставить MP3 то слышен артефакт, видимо за счет выравнивания MP3 по какому-то значению в милисекундах/фреймах или за счет алгоритма кодирования начало получается "замятым". Если ставить ADPCM или RAW, то получается чистый бесшовный звук.
нада не с позиции 0 которая стоит по дефолту: sound.start() а с 0.1 и более секунды звука sound.start(0.1,1)
Что лишний раз доказывает наличие паузы вначале.
rainbowrussia, если компрессию убрать совсем? (Disabled в свойствах проекта)
rainbowrussia
08.08.2010, 19:14
mooncar, я имел в виду Compression в свойствах объекта Sound, лежащего в библиотеке. Во вложении флешка с зацикленным звуком и типом сжатия Raw, то есть без изменений, если я верно понял.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.