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

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

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

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

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Спасибо большое! Попробую Ваш вариант.
Я тут тоже нашел выход из ситуации правда он на гране бреда помоему. Во всяком случае умом его не понять :) Вообщем если в самой кнопке удаляешь звук и прописываешь его программно то он не работает.А если слой со звуком не удалять,а просто сделать стоп в кадре внутри кнопки и потом уже прописать программно то работает :) Вы такое встречали? :)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-04-10
Лимиты, наверняка, есть. Но, думаю, дело не в них. Может у вас громкость на нуле? Или ошибка в коде. Конструкция вида:

btn.onRollOver = function() {
soundPlay(this,"snd_1");
};
btn_2.onRollOver = function() {
soundPlay(this,"snd_2");
};

function soundPlay(mc:MovieClip,linkage:String){
var snd:Sound = new Sound(mc);
snd.attachSound(linkage);
snd.start();
}


работала без каких-либо проблем даже при многократных наведениях на кнопки (создавать мильон кнопок мне было лень).
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Я так понял что есть какой то лимит на программное использование звука. Потому что со всеми звуками так. Как только больше какого то кол-ва так сразу отключается именно этот звук на всех кнопках. Можно снять как то этот лимит?
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Толи мозг закипел толи это карма. Вообщем добавлял звуки к кнопкам. Ко всем один и тот же нужен был. Все работает отлично. Вот код.
dtv.onRollOver = function() {

var shelk:Sound = new Sound(this);

shelk.attachSound("shelk");

shelk.start();

};

Потом перешел к другим кнопкам с другим звуком и тут все встало. Не проигрывает и все звук. В библиотеке прописан. Если меняю на shelk то все проигрывается. Думал звук сломался так перезалил. Что я уже только не менял если честно. Я так понял где то ошибка в этом маленьком коде?

rtv.onPress = function() {

var zvon:Sound = new Sound(this);

zvon.attachSound("zvon");

zvon.start();

};
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-04-10
> onRollOver да?

Да, конечно.
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
onRollOver да? :)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Ой да забыл. Как кнопки присвоить звук при нажатии это я понял. а при наведении на нее щелчок чтобы был? :)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-04-10
Спасибо большое! Ну денечек придется посидеть пока все кнопки переделаю :) такова судьба видно :)
Чем глубже погружаюсь в создание игр,тем больше убиваю в себе аниматора. Понял главную разницу: программист добавляет все кодом,а аниматор просто перетаскиванием из библиотеки. Вообщем во мне борется две сущности :)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-04-10
> И еще один вопрос не по данной теме. Я так понял что с помощью Shared можно хранить любые игровые данные внутри самой флэш? И при желании выводить это в своеобразную таблицу рекордов не заводя на сервер.

Хранить можно любые данные (где-то был у меня пост, где в LSO сохранялись даже растровые картинки), но храниться эти данные будут только на компьютере пользователя (нет, там есть технология для удалённого хранения данных, но ещё ни разу не видел реального примера её использования). Поэтому глобальную таблицу рекордов там не сохранишь, но таблицу рекордов для одного игрока - это запросто.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-04-10
> У меня есть код который убираем музыку из всех кадров ролика и даже мувиклипов. Но звуки кнопок упорно не убираются. В них самих сделаны звуки при наведении и нажатии. Не подскажите как быть?

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

btn.onPress = function() {
var snd:Sound = new Sound(this);
snd.attachSound("sound");
snd.start();
};


Думаю, вам не сильно принципиально, как добавлять звук к кнопке: ручками или программно. Но во втором случае отпадает ваша проблема.
Добавить комментарий:







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

Идиот-тест

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

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