Синхронное воспроизведение звуков
Сегодня мы разберём с вами, как можно организовать синхронное воспроизведение звуков, чтобы, если 1 звук играл-играл и остановился на каком-то месте, другой звук начинал своё воспроизведение с той же минуты/секунды, на котором остановился предыдущий звук. В качестве инструмента программирования мы будем использовать ActionScript 2.0
История вопроса
Этот вопрос уходит своими корнями в далёкое прошлое, когда в рубрике «Вопрос-ответ» был задан вопрос о синхронизации звука. Автор этого вопроса, спрашивал, цитирую:
Цитата: Вопрос следующий: Представте...сидит оркестр, как сделать, что бы при нажатии на любой инструмент он начинал исполнять
свою партию!А если на следующие другие, то они должны включаться в том же месте где играет первый!!!
И некто, admin помог ему в решении этого вопроса. А теперь, возможность узнать ответ на него есть и у вас =)
Что нам нужно?
Нам нужно создать в .fla проекте 2 кнопки с именами sound1_mc и sound2_mc, а потом импортировать в библиотеку проекта, 2 звука, с именами sound1 и sound2. Эти имена звуков обязательно должны быть указаны в вкладке Linkage, а так же, необходимо будет поставить галочки напротив надписей «Export for ActionScript» и «Export in first frame».
Половина дела сделана, теперь осталось написать код программы =)
Необходимая функция
Так, как мы будем работать со звуком, нам придётся работать с объектами Sound, которые и отвечают в Flash за работу со звуком. Ключевой функцией, которую мы будем использовать в нашем уроке станет функция, которая запускает проигрывание звуков:
_sound.start(_number);
Где, _sound — это объект Sound, а _number — это цифровое значение в миллисекундах, с которого начнётся проигрывание звука.
Код программы
Stage.scaleMode = "noScale";
Stage.align = "TL";
//
var my1_sound:Sound = new Sound(this.sound1_mc);
my1_sound.attachSound("sound1");
var my2_sound:Sound = new Sound(this.sound2_mc);
my2_sound.attachSound("sound2");
//Делаем, чтобы когда мелодия начинала проигрываться заново при окончании
my1_sound.onSoundComplete = my2_sound.onSoundComplete=function () {
this.start();
};
//Создаём переменную, в которую будем запоминать, какой сейчас играет звук
var current_sound:Sound;
//Запоминаем, какой звук соответствует какой кнопке
this.sound1_mc.var_sound = my1_sound;
this.sound2_mc.var_sound = my2_sound;
//
//Создаём обработчик события onRelease, каждый раз при его срабатывании
//будет запускаться функция _root.changeCound_func, в которую будет
//передаваться параметр this.var_sound. Эти параметры мы присвоили кнопкам
//чуть выше
this.sound1_mc.onRelease = this.sound2_mc.onRelease = function() {
_root.changeCound_func(this.var_sound);
};
//
function changeCound_func(new_sound:Sound) {
trace("Запускаем новый звук");
//Создаём переменную, в которую будем запоминать, на какой позиции сейчас
//находится играющий звук
var _soundPos:Number
//Если до этого какой-нибудь звук был запущен, то присваеваем позицию,
//на которой находится этот звук переменной
if(_root.current_sound){
_soundPos = _root.current_sound.position;
}else{
//Если никакого звука до этого не было запущено, то начинаем
//проигрывание с 0
_soundPos = 0;
}
trace("Начинаем проигрывать с позиции "+_soundPos);
//Останавливаем предыдущий звук
_root.current_sound.stop();
//Включаем следующий звук. Деление на 1000 нужно потому, что свойство position задаётся в
//миллисикундах, а в фукнцию start время старта проигрывания передаётся в секундах.
new_sound.start(_soundPos/1000);
//Запоминаем новый звук, в переменной current_sound, потому что теперь
//он проигрывается
_root.current_sound = new_sound;
}
Не поверите, но вот и всё. По-идее, у вас должна была получиться такая же работающая флешка, как и у меня, где при нажатии на одну из кнопок, начинал проигрываться звук с того места, на котором закончил играть предыдущий звук.
Если у вас что-то не получилось, то вы всегда сможете скачать исходник и посмотреть, как всё было реализовано.
Сама флешка | Исходник
Удачи вам =) |
vse ok spasibo
Пожалуйста =)
ха kosheen)