25
фев
  Синхронное воспроизведение звуков 3 балла
 


Синхронное воспроизведение звуков


Сегодня мы разберём с вами, как можно организовать синхронное воспроизведение звуков, чтобы, если 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;
}

Не поверите, но вот и всё. По-идее, у вас должна была получиться такая же работающая флешка, как и у меня, где при нажатии на одну из кнопок, начинал проигрываться звук с того места, на котором закончил играть предыдущий звук.

Если у вас что-то не получилось, то вы всегда сможете скачать исходник и посмотреть, как всё было реализовано.

Сама флешка | Исходник

Удачи вам =)

Комментарии (3)   Автор: admin
Комментарии
taurus
28.02.09 | 21:20
11 баллов

vse ok spasibo

admin
01.03.09 | 01:34
0 баллов

Пожалуйста =)

remen
10.04.09 | 10:52
0 баллов

ха kosheen)

 
 
 
 

Последние комментарии

Полезные ссылки

Реклама сайтов

жилье в сочи частный сектор
Светлогорск гостиницы, отели светлогорска, Отдых на Cелигере, пансионат чайка, шиболово
Отдых в Прибалтике, г светлогорск, санатории светлогорска, пансионат в подмосковье