Продолжим изучение библиотеки ASaudio и рассмотрим самую «вкусную» часть этого движка - одновременное управление воспроизведением нескольких (!) mp3-файлов.
Итак, представим ситуацию... У нас есть flash-приложение, которое загружает MP3-композиции и проигрывает их. Причём проигрываться музыкальные композиции могут не только последовательно (как это принято, например, в аудио-плеерах), но и одновременно (что очень часто встречается в flash-играх). В последнем случае библиотека ASaudio оказывается невероятно полезной, так как позволяет объединить множество музыкальных роликов в одну группу, чтобы потом управлять не каждым роликом в отдельности, а всей группой одновременно. Это и проще, и удобнее.
Давайте посмотрим, как это осуществляется на практике.
Код ActionScript 3.0:
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
кнопка
*/
btn.addEventListener(MouseEvent.CLICK, onClick);
function onClick(event:MouseEvent):void
{
btn.visible = false;
/*
создаём объект класса Group, с помощью которого будем управлять воспроизведением нескольких mp3-файлов
*/
var group:Group = new Group([new Track("content/kuranty.mp3"), new Track("content/lenin.mp3")]);
/*
запускаем проигрывание нескольких mp3-файлов, объединённых в единую группу
*/
group.start();
}
Результат:
Как видите, всё довольно просто и удобно: конструктор объекта Group принимает в качестве первого параметра массив, состоящий из объектов Track (объект Track используется для загрузки и управления воспроизведением одного mp3-файлов). А затем можно использовать объект Group, чтобы управлять всеми указанными в массиве объектами Track, то есть отдельными mp3-файлами. В приведённом выше примере объект group с помощью метода start() запускает воспроизведение всех подчинённых ему mp3-роликов.
Сформировать группу (Group) можно разными способами, а не только тем, что показан в предыдущем примере. Например, вам надо добавлять новые mp3-файлы в группу на разных этапах работы вашего flash-приложения. Значит, ранее приведённый код уже не подходит. Но у класса Group есть метод addChild(), который полностью решает нашу проблему...
Код ActionScript 3.0:
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
создаём объект класса Group, с помощью которого будем управлять воспроизведением нескольких mp3-файлов
*/
var group:Group = new Group([new Track("content/lenin.mp3")]);
/*
добавляем новый файл в группу
*/
group.addChild(new Track("content/kuranty.mp3"));
/*
запускаем проигрывание нескольких mp3-файлов, объединённых в единую группу
*/
group.start();
или
Код ActionScript 3.0:
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
создаём объект класса Group, с помощью которого будем управлять воспроизведением нескольких mp3-файлов
*/
var group:Group = new Group();
/*
добавляем новый файл в группу
*/
group.addChild(new Track("content/lenin.mp3"));
/*
добавляем новый файл в группу
*/
group.addChild(new Track("content/kuranty.mp3"));
/*
запускаем проигрывание нескольких mp3-файлов, объединённых в единую группу
*/
group.start();
В группу можно не только добавить новый mp3-файл, но и удалить. Для этого используется метод removeChild().
Код ActionScript 3.0:
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
создаём два объекта Track...
*/
var track_1:Track = new Track("content/kuranty.mp3");
var track_2:Track = new Track("content/lenin.mp3");
/*
...и объединяем их в группу...
*/
var group:Group = new Group([track_1,track_2]);
/*
...а потом удаляем из группы track_2
*/
group.removeChild(track_2);
/*
воспроизведение
*/
group.start();
В любой момент вы можете остановить воспроизведение музыкальных композиций, объединённых в единую группу. Как нетрудно догадаться, для этого используется метод stop().
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
создаём объект класса Group, с помощью которого будем управлять воспроизведением нескольких mp3-файлов
*/
var group:Group = new Group([new Track("content/kuranty.mp3"),new Track("content/lenin.mp3")]);
/*
кнопка, начинающая воспроизведение mp3-файла
*/
btn_stop.visible = false;
btn_start.addEventListener(MouseEvent.CLICK, onStart);
function onStart(event:MouseEvent):void
{
btn_start.visible = false;
btn_stop.visible = true;
/*
запускаем проигрывание группы
*/
group.start();
}
/*
кнопка, останавливающая воспроизведение mp3-файла
*/
btn_stop.addEventListener(MouseEvent.CLICK, onStop);
function onStop(event:MouseEvent):void
{
btn_start.visible = true;
btn_stop.visible = false;
/*
останавливаем проигрывание группы
*/
group.stop();
}
Результат:
А с помощью свойства volume вы можете очень просто и легко регулировать громкость для всех звуков, входящих в группу...
/*
импорт классов
*/
import com.neriksworkshop.lib.ASaudio.*;
/*
создаём объект класса Group, с помощью которого будем управлять воспроизведением нескольких mp3-файлов
*/
var group:Group = new Group([new Track("content/kuranty.mp3"), new Track("content/lenin.mp3")]);
/*
изменяем громкость для всей группы в интервале от 0 (минимальная громкость) до 1 (максимальная громкость)
*/
group.volume = 0.1;
/*
запускаем проигрывание нескольких mp3-файлов, объединённых в единую группу
*/
group.start();
Выше я перечислил только часть из доступных методов и свойств класса Group библиотеки ASaudio. Впрочем, постарался назвать самые важные из них (те, что используются наиболее часто в flash-проектах). Но и у этого класса, и у библиотеки ASaudio вообще, есть ещё очень много интересного и полезного для флеш-разработчиков...
Исходники к данному уроку - скачать исходники к данному уроку (под Adobe Flash CS 5.5).
Я тут тоже нашел выход из ситуации правда он на гране бреда помоему. Во всяком случае умом его не понять :) Вообщем если в самой кнопке удаляешь звук и прописываешь его программно то он не работает.А если слой со звуком не удалять,а просто сделать стоп в кадре внутри кнопки и потом уже прописать программно то работает :) Вы такое встречали? :)