Форум 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=127017)

alexpro 02.07.2009 18:44

Включение и выключение звука
 
Дорогие друзья!

У меня к разным кадрам присвоены разные музыкальные файлы (из библиотеки). При этом проигрывается фоновая музыка из другого клипа (на уровень выше).

Вопрос:
Как сделать так, чтобы при переходе на кадр со звуком, звук из первого кадра отключался, но фоновая музыка не переставала играть?

Пробовал stopAllSounds но тогда и фоновая музыка перестает играть.
А если _this.stopAllSounds то не работает...

Добавлено через 1 минуту
Как присвоить stopAllSounds к определенному кадру?

mooncar 02.07.2009 19:11

Добавлено через 1 минуту
Цитата:

Сообщение от alexpro (Сообщение 832743)
У меня к разным кадрам присвоены разные музыкальные файлы (из библиотеки).

Если понять эту фразу так, что у вас звук в кадре начинает проигрываться не программно, без использования объекта Sound(), а с помощью синхронизации на вкладке фрейма "Properties", то используйте синхронизацию "Stop" для конкретного звука.

alexpro 02.07.2009 19:23

Да, без использования Sound().
Дело в том, что например звук находится в кадре 1 и проигрывается, когда таймлайн находится в этом кадре. Потом я перехожу в кадр 10 gotoAndStop. И в кадре 10 уже вставлен другой звук. Могу ли я использовать синхронизацию Stop в таком случае?

mooncar 02.07.2009 19:37

Можете. Только вам для этого потребуется два слоя ключевых кадров. В основном, старом слое, звуки будут стартованы, а в дополнительных кадрах на тех же позициях таймлайна - "Stop" для предыдущего звучащего.
А лучше всего - забудьте об этом способе и сделайте все по-человечески, через объект Sound(), и тогда все будет работать с помощью кода. Поверьте, час поразбираетесь и всё, и никаких проблем на будущее с количеством звуковых роликов - любой звук можно останавливать/стартовать в произвольный момент времени. Половину приеморв работы со звуком с помощью кода вы освоите за этот час. Тем более тема ваша в ветке Action Script, а изначально у вас о нем очень косвенно.

alexpro 02.07.2009 19:42

Скажите, а как это можно сделать? Или есть ли какой-то пример?

Добавлено через 33 секунды
я имею ввиду через объект Sound()

mooncar 02.07.2009 19:44

1. В библиотеке задайте звукам идентификаторы для звуков, чтобы AS "знал" их.
Для этого щелкните правой кнопкой мыши на звуке в библиотеке, выбирете "Linkage", галочку на "Export for AS" и "Expoert in first frame", а в поле "Identifier" напишите соответственно для каждого звука свой идентификатор, например "fon_id", "zvuk1_id", "zvuk2_id".

2. Потом в начале ролика напишите такой код:
Код AS1/AS2:

this.createEmptyMovieClip("sound1_mc", this.getNextHighestDepth()); 
this.createEmptyMovieClip("sound2_mc", this.getNextHighestDepth());
this.createEmptyMovieClip("sound3_mc", this.getNextHighestDepth());
 
var zvuk_fon:Sound = new Sound(sound1_mc);
zvuk_fon.attachSound("fon_id");
 
var zvuk1:Sound = new Sound(sound2_mc);
zvuk1.attachSound("zvuk1_id");
 
var zvuk2:Sound = new Sound(sound3_mc);
zvuk2.attachSound("zvuk2_id");

Тут же в первом кадре стартуете фоновый звук:
Код AS1/AS2:

zvuk_fon.start();

3. В нужном кадре стартуете звук 1:
Код AS1/AS2:

zvuk1.start();

В другом его останавливаете и стартуете другой звук:
Код AS1/AS2:

zvuk1.stop();
zvuk2.start();

И т.д.

Теперь также можно менять громкость с помощью метода setVolume, и еще много чего делать.. почитайте о Sound() в хелпе.

alexpro 02.07.2009 20:54

Большое спасибо Mooncar! Все работает супер! :)

mooncar 02.07.2009 21:11

Ага.. я свой первый проект флешевский тоже мучал с использованием звука в кадрах.. но к счастью, быстро понял, если нужно гибко управлять звуком, то именно через Sound().

inco_nj 02.02.2010 15:07

А подскажите, плз, как зациклить проигрывание трека?

mooncar 02.02.2010 15:15

Код AS1/AS2:

this.createEmptyMovieClip ('bgs_mc', this.getNextHighestDepth()); 
 
var bgs:Sound = new Sound (bgs_mc);
bgs.attachSound('bgs_id');
bgs.onSoundComplete =  startBgSound; //строка, назначающая зацикливание
 
startBgSound (); //начальный старт
 
function  startBgSound () {
  bgs.play();
}


Maximer 02.02.2010 19:16

mooncar, зачем так изощеряться?) вроде есть параметр отвечающий за повтор звука, только не помню как правильно или:

Код AS1/AS2:

.play(0,999); // 0 - значит начинать воспроизведение с нулевой секунды, а 999 количество повторов

или
Код AS1/AS2:

.start(0,999);// 0 - значит начинать воспроизведение с нулевой секунды, а 999 количество повторов


mooncar 02.02.2010 19:33

Да, есть. Вопрос был о зацикливании, а не о 999 повторениях. Кстати, почему именно 999, а не 990?

Вообще, только вот это отвечает зацикливание, этого было достаточно для ответа:
Код AS1/AS2:

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

, просто обычно стараюсь писать обвеску по максимуму во избежании дополнительных вопросов

А вот это:
Код AS1/AS2:

function  startBgSound () {
  bgs.play();
}

позволяет запустить звук по разному, нарастить код, например:

Код AS1/AS2:

var soundVolumes:Array = new Array[10, 90, 50]
function  startSound (s:Sound, vol:Number) {
  s.play();
  s.setVolume(vol);
};
 
startSound (sound1, soundVolumes[1]);
startSound (sound2, soundVolumes[2]);
.
.

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

Будете работать с проектами, имеющими достаточно сложные звуковые схемы, поймете, почему мой код удобнее и правильнее.


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

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