ASaudio. Продолжение.

Продолжим изучение библиотеки 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).

Автор: admin

Дата добавления: 2012-08-17

Просмотров: 2927

Рейтинг поста: +6-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
И еще один вопрос не по данной теме. Я так понял что с помощью Shared можно хранить любые игровые данные внутри самой флэш? И при желании выводить это в своеобразную таблицу рекордов не заводя на сервер. Или я что то не до конца понимаю? :)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Добрый день! У меня такой вопрос. Вот все тоже самое но только на AS2 :) У меня есть код который убираем музыку из всех кадров ролика и даже мувиклипов. Но звуки кнопок упорно не убираются. В них самих сделаны звуки при наведении и нажатии. Не подскажите как быть?
//Подготовка
var sndMute:Sound = new Sound(_root);
sndMute.attachSound("sound");
sndMute.start(offset);
sndMute.onSoundComplete = function() {//если музыка закончилась, включаем с начало
sndMute.start(offset);
};

function init ():Void {
if (so.data.isMute) {
mute ();
} else {
unmute ();
}
}
init ();

// эта функция выключает звук
function mute ():Void {
if (!so.data.isMute) {
so.data.volume = sndMute.getVolume ();
}
so.data.isMute = true;
sndMute.setVolume (0);
}
// эта функция включает звук
function unmute ():Void {
if (so.data.volume) {
sndMute.setVolume (so.data.volume);
}
so.data.isMute = false;
}
//будет включаться и выключаться звук
dtv.onPress = function (){
if (so.data.isMute) {
unmute ();
} else {
mute ();
}
}
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-09-28
Станислав, тут есть примеры - http://edapskov.ru/pages.php?id=40
Комментатор
Комментарий добавил(а): Станислав
Дата добавления: 2012-09-28
А как проверить работоспособность, как нужно записать в html - FlashVars, начало примерно так:
<param name="FlashVars" value=
что после =
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-09-28
Может так:

/*
значение по-умолчанию
*/
var mylink:String = "http://mysite.ru";
/*
если есть FlashVars, то берём её значение
*/
if (_root.link != undefined) {
mylink = String(_root.link );
}
/*
кнопка перехода на нужный сайт
*/
btn.onPress = function(){
getURL (mylink, "_blank")
}
Комментатор
Комментарий добавил(а): Станислав
Дата добавления: 2012-09-28
Этот способ - SoundMixer.stopAll(); не работает, так как если воспроизводящая головка возвращается в кадр где есть звук то он снова воспроизводится.
Я все свои проблемы решил со звуком, другим способом - SoundMixer.soundTransform = new SoundTransform(0); - все гениальное на само деле простое ;) Этот способ очень крут:
1 - он не отключает звук а убавляет громкость, а в этом огромные преимущества, так как если я включаю звук (прибавляю громкость), то звук играет не с начала а именно там где я прибавил громкость :)
2 - убовлялку (soundTransform) я прикрутил к микшеру, что дает мне полное убавление всех звуков на всем таймлайне и во всех клипах :) И как бы головка не скакал по таймлайну звук не прибовлетя, пока я сам его не прибалю :)
В общем эту проблему я победил :)
Но у меня есть другая, она не связана с моим проектом, она связана с моим заказом, в первые с таким столкнулся. Извиняюсь что задаю этот вопрос здесь.
Обычно делая баннеры просят либо повесить ссылку на кнопку, либо ссылку черех xml либо через переменную то есть так:
on(release){
getURL (link1, "_blank")
}
но в этот раз попросили скомбинировать - "надо еще добавить значение по умолчанию - на случай если FlashVars не указан"
как я понимаю нужно проверить условие - то есть если баннер не нашел внешнию ссылку, то использовать внутреннею. Но вот как это сделать на as2.0 я не представляю, подскажите пожалуйста как это сделать.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-09-24
Спасибо, Станислав.

Звук может использоваться в флеш-приложениях по-разному. Нет правильного или неправильного пути. Всё зависит от того, какое приложение вы создаёте и от ваших личных предпочтений. Ещё бы добавил, что в AS 3.0 звуки можно генерировать кодом (as3sfxr - библиотека для генерации звуков на ActionScript 3.0). Для удобства разработчиков написано много движков, облегчающих работу со звуком в flash-проектах (ASaudio - это только один из них).

> можно ли отключать весь звук, если звуки находятся на временной шкале как на основной так и внутри символов?

А это не работает?

SoundMixer.stopAll();
Комментатор
Комментарий добавил(а): Станислав
Дата добавления: 2012-09-22
Здравствуйте, уже не первый раз ваши статьи по as меня выручают, за что вам ОГРОМНЫЙ РЕСПЕКТ! У вас блог прям как 1000 советов на все случаи жизни по as, очень круто! спасибо вам )
Ну а теперь к вопросам, начну из далека, а потом уже дойду и до ASaudio.
Как правильно нужно организовать во flash проекте звук, чтобы была возможность его полностью отключать (звуки должны быть во внешней папке, звуки должны быть во flash библиотеке но вызываться скриптом, или звуки можно располагать на временной шкале как на основной так и внутри символов)? И тут же дополнительный вопрос - можно ли отключать весь звук, если звуки находятся на временной шкале как на основной так и внутри символов?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 2 из 2: 12
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика