PDA

Просмотр полной версии : Не прекращающийся звук


greatilya
20.02.2010, 18:59
Сразу извинюсь если вопрос очень элементарный, но с флешем я на ВЫ...
Подскажите как сделать так, чтобы звук, проигравшись один раз не прекращался, а повторялся. Так скажем зациклить воспроизведение.
Есть следующий код:

var snd:Sound = new Sound();
snd.load(new URLRequest("sound.mp3"));
var channel:SoundChannel = new SoundChannel();
snd.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true);
function onLoadComplete(evt:Event):void {
var localSnd:Sound = evt.target as Sound;
channel = localSnd.play();
}

soundBtnON.buttonMode = true;
soundBtnON.useHandCursor = true;
soundBtnOFF.buttonMode = true;
soundBtnOFF.useHandCursor = true;
soundBtnON.visible = false;
soundBtnOFF.addEventListener(MouseEvent.MOUSE_UP, soundBtnOFF_onClick);
function soundBtnOFF_onClick(evt:MouseEvent):void {
soundBtnON.visible = true;
channel.stop();
}
soundBtnON.addEventListener(MouseEvent.MOUSE_UP, soundBtnON_onClick);
function soundBtnON_onClick(evt:MouseEvent):void {
soundBtnON.visible = false;
channel = snd.play();
}


Методов типа loop() как я понял нет...
Заранее благодарен!

mooncar
20.02.2010, 19:06
Не привязываясь к вашему коду, приведу пример:
my_sound.onSoundComplete = function() {
my_sound.play();
};

Довольно просто.

greatilya
20.02.2010, 19:22
mooncar,
спасибо ОГРОМНОЕ!

Принцип понял. Пытаюсь заместо my_sound подставлять snd, channel, localSnd .... Пока безуспешно. Пытаюсь понять глубже к чему именно надо дописать onSoundComplete и где :)

mooncar
20.02.2010, 19:36
К тому экземпляру Sound, который нужно зациклить.
Не напутайте там с областями видимости - у вас, например, localSnd, виден только внутри функции.

greatilya
21.02.2010, 09:32
Что-то никак не могу сообразить.
Вызвать onSoundComplete мне не дает, возникает следующая ошибка:
- Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onSoundComplete автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("soundComplete", callback_handler).

переписал код следующим образом:
var snd:Sound = new Sound();
snd.load(new URLRequest("sound.mp3"));
var channel:SoundChannel = new SoundChannel();
snd.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true);
snd.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);

function onLoadComplete(evt:Event):void {
//var localSnd:Sound = evt.target as Sound;
channel = snd.play();
}
function onSoundComplete(evt:Event):void
{
//channel.stop();
channel = snd.play();
}


Итого добавил:

snd.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
function onSoundComplete(evt:Event):void
{
//channel.stop();
channel = snd.play();
}

Ошибок не стало но как я понимаю вызова onSoundComplete не происходит.

mooncar
21.02.2010, 09:59
Еще бы! Простите, а вы его как записали? Вы на мой пример посмотрите внимательно, как записано. Ничего в глаза не бросается?Тут раздел AS1/AS2, вы невнимательность проявили, а я сразу внимания не обратил.
И с точки зрения AS2 у вас сейчас функция пытается отработать события this, а не события звука. А this - это не звук.
Как сделать и возможно ли это в AS3 в хелпе посмотрите или в соответств. ветке вопрос задайте.

greatilya
21.02.2010, 10:12
Извиняюсь еще раз... я не знаю отличий в ActionScript и понятия не имею на какой версии пишу. Поэтому вероятно и написал не в тот раздел.
суть в том, что если я пишу опираясь на вашу подсказку что-то вроде этого:

snd.onSoundComplete = function() {
snd.play();
};

то мне выдается как я уже писал:
Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onSoundComplete автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("soundComplete", callback_handler)
Как видно из сообщения ошибки теперь могу догадаться что у меня написан скрипт на AS3... И мне задать вопрос в другой раздел?
PS: mooncar, выражаю признательность за то что оперативно отвечаете причем вежливо)

mooncar
21.02.2010, 10:23
Бывает. Изучите внимательно то, что вы делаете - главный вам совет, чтобы не попать впросак.
А прежде чем задавать вопрос на форуме, откройте встроенный хелп, да посмотрите, как отловить момент окончания звучания. И по этому событию стартуйте его снова.
Я AS3 не знаю, но вероятно, там также есть такое событие, посмотрите верный синтаксис.

greatilya
21.02.2010, 11:05
Изучите внимательно то, что вы делаете
Просто у меня очень много задач, и flash далеко не мое призвание и специальность. И задачи в нем я выполняю простые.
откройте встроенный хелп, да посмотрите, как отловить момент окончания звучания
вот я и писал на основании хелпа встроеного....

Еще раз спасибо!