SoundSkin: удобная работа со звуком в ActionScript 3.0

SoundSkin - ещё одна библиотека на ActionScript 3.0, которая здорово облегчает работу со звуком в flash-приложениях. Возможно, что SoundSkin даже удобнее в использовании, чем ранее упоминавшаяся ASaudio.

Рассмотрим на конкретных примерах основы работы с библиотекой SoundSkin...

Естественно, нам нужна сама библиотека. Скачать её можно по ссылке, приведённой в самом начале данного поста. А ещё проще будет взять её из архива с исходниками, ссылку на которые вы можете найти в конце урока...

С помощью SoundSkin можно управлять воспроизведением как встроенных в flash-проект звуков, так и внешних mp3-файлов.

I.) Работа со встроенными звуковыми файлами.

Первым делом, надо встроить сам аудио-файл в библиотеку флеш-проекта и настроить его для дальнейшего использования:

а.) Импортируем нужный нам аудио-файл в библиотеку flash-проекта.

Импорт аудио-файлов в flash-проект

б.) Находим импортированный ранее звук в библиотеке проекта, наводим на него курсор мышки и правым кликом мышки вызываем контекстное меню.

в.) В контекстном меню нас интересует только пункт «Свойства...». Жмём его...

Контекстное меню библиотеки flash-проекта

г.) Появляется окно «Свойства звука». В этом окне ставим галочку у пункта «Экспорт для ActionScript», а в поле ввода «Класс» вводим название класса (я дал ему имя «MySound»).

Окно «Свойства звука» в Adobe Flash

д.) Подтверждаем внесённые изменения.

Теперь переходим к коду...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* запускаем воспроизведение звука */ sound.play();

Вот и всё! Это вполне рабочий пример. Но чтобы сделать пример ещё и наглядным, немного допишем код...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* кнопка, начинающая воспроизведение звука */ btn_start.addEventListener(MouseEvent.CLICK, onStart); function onStart(event:MouseEvent):void { sound.play(); }

Результат:

Остановить воспроизведение звука можно с помощью метода stop().

Код ActionScript 3.0:

sound.stop();

Но есть в SoundSkin метод, который прекрасно заменяет собой и метод play(), и метод stop(). Это метод togglePlayback(), который работает как переключатель: он останавливает воспроизводимый и начинает воспроизведение остановленного аудио-файла.

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* кнопка, отвечающая за воспроизведение звука */ btn_start.addEventListener(MouseEvent.CLICK, onStart); function onStart(event:MouseEvent):void { sound.togglePlayback(); }

Если аудио-файл надо проиграть какое-то количество раз (например, вам требуется зациклить фоновую мелодию в игре), то используем второй параметр конструктора объекта SoundSkin...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound(), 1000); /* запускаем воспроизведение звука */ sound.play();

Теперь звук будет повторён 1000 раз. Такого же эффекта можно достигнуть и с помощью специального свойства loops...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* устанавливаем количество повторов звука */ sound.loops = 1000; /* запускаем воспроизведение звука */ sound.play();

Если аудио-файл надо воспроизводить не с самого начала, то используем 3-й параметр конструктора объекта SoundSkin...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound(), 1, 5000); /* запускаем воспроизведение звука */ sound.play();

Теперь звук будет воспроизведён только один раз и при этом воспроизведение звука начнётся с 5 секунды.

Настройка громкости осуществляется с помощью свойства volume (может принимать значение от 0 до 1).

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* настройка громкости */ sound.volume = 0.5; /* запускаем воспроизведение звука */ sound.play();

В данном случае звук будет воспроизводится с 50%-ной громкостью.

Настройка панорамирования звука осуществляется с помощью свойства pan (может принимать значение от -1 до 1).

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(new MySound()); /* настройка панорамирования */ sound.pan = -1; /* запускаем воспроизведение звука */ sound.play();

II.) Работа с внешними MP3-файлами.

Тут тоже всё довольно просто и понятно. Для загрузки mp3-файла применяется метод load.

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(); /* загружаем mp3-файл */ sound.load("content/kuranty.mp3"); /* кнопка, начинающая воспроизведение mp3-файла */ btn_start.addEventListener(MouseEvent.CLICK, onStart); function onStart(event:MouseEvent):void { sound.togglePlayback(); }

Результат:

Ещё одна популярная задача - отслеживание прогресса загрузки аудиофайла. С помощью SoundSkin это реализуется невероятно просто. Но сперва нам надо провести некоторые приготовления... Давайте создадим на главной временной шкале flash-ролика мувиклип mc_fon (серый прямоугольник размером 300 Х 20), а внутри мувика mc_fon создадим ещё один мувик с именем mc_percent (красный прямоугольник размером 300 Х 20). Как вы, наверно, догадались, эти мувики будут показывать прогресс загрузки mp3-файла. А теперь переходим к коду...

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(); /* изначальные настройки мувиков mc_fon и mc_percent */ mc_fon.visible = false; mc_fon.mc_percent.scaleX = 0; /* кнопка, начинающая воспроизведение mp3-файла */ btn_start.addEventListener(MouseEvent.CLICK, onStart); function onStart(event:MouseEvent):void { btn_start.visible = false; mc_fon.visible = true; sound.load("content/lenin.mp3"); addEventListener(Event.ENTER_FRAME, onEnterFrames); } /* отслеживаем прогресс загрузки */ function onEnterFrames(event:Event):void { mc_fon.mc_percent.scaleX = sound.percentLoaded; /* начинаем воспроизведение после окончания загрузки */ if(sound.percentLoaded == 1){ removeEventListener(Event.ENTER_FRAME, onEnterFrames); sound.play(); } }

Информацию о проценте загруженных данных мы получаем от свойства percentLoaded. Правда, получаем не совсем проценты, а число типа Number в диапазоне от 0 (0%) до 1 (100%).

Результат:

Часто требуется показывать не только процент загруженных данных, но и текущий прогресс воспроизведения звука. В этом нам поможет свойство percentPlayback (возвращает процент воспроизведённых аудио-данных в виде числа с плавающей точкой в диапазоне от 0 (0%) до 1 (100%)).

Код ActionScript 3.0:

/* импорт классов */ import com.gmac.sound.SoundSkin; /* создаём объект класса SoundSkin */ var sound:SoundSkin = new SoundSkin(); /* изначальные настройки мувиков mc_fon и mc_percent */ mc_fon.visible = false; mc_fon.mc_percent.scaleX = 0; /* кнопка, начинающая воспроизведение mp3-файла */ btn_start.addEventListener(MouseEvent.CLICK, onStart); function onStart(event:MouseEvent):void { btn_start.visible = false; mc_fon.visible = true; sound.load("content/lenin.mp3"); addEventListener(Event.ENTER_FRAME, onEnterFrames); } /* отслеживаем прогресс загрузки */ function onEnterFrames(event:Event):void { mc_fon.mc_percent.scaleX = sound.percentLoaded; /* начинаем воспроизведение после окончания загрузки */ if (sound.percentLoaded == 1) { removeEventListener(Event.ENTER_FRAME, onEnterFrames); addEventListener(Event.ENTER_FRAME, onEnterFrames_2); sound.play(); } } /* отслеживаем прогресс воспроизведения */ function onEnterFrames_2(event:Event):void { mc_fon.mc_percent.scaleX = sound.percentPlayback; }

Результат:

Естественно, все методы и свойства, которые применимы при работе с встроенным звуком, будут доступны и при работе с загруженным звуковым файлом (настройка громкости, панорамирование и т. д.).

Выше я перечислил далеко не все возможности библиотеки SoundSkin, а только наиболее востребованные. Впрочем, и этого вполне достаточно для удобной работы со звуком в флеш-проектах.

Скачать исходники к данному посту можно здесь (под Adobe Flash CS 5). Обращаю ваше внимание на то, что в исходник не включены mp3-файлы. Поэтому вам надо использовать свои mp3-файлы при тестировании примеров из исходников.

Автор: admin

Дата добавления: 2012-10-24

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

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

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

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Елена
Дата добавления: 2014-12-08
Поняла..Благодарю))
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-12-08
Папка com одна, но подпапки разные: gmac и flashandmath. Создайте папку com и поместити обе эти подпапки в неё.
Комментатор
Комментарий добавил(а): Елена
Дата добавления: 2014-12-08
Добрый вечер!
Снова с вопросом.
Я хочу создать флеш-ролик,в котором будет падать снег и играть музыка.
Сделать хочу,подключив билиотеки SoudSkin.и снегопада,в которой класс SnowDisplay
Но эти бибилиотеки имеют одинаковое название папок сom.
Я положила их в паку с проектом.
Они объединились в одну..Но снегопада нет..ничего не играет..
И ошибки компиляции ..море..))
Может так нельзя делать?
Комментатор
Комментарий добавил(а): Елена
Дата добавления: 2014-12-08
Ураа!!!Все работает ..и работает именно так, как я хотела)))
Несомненно,это удобнее..Учитывая то,что больше 2-3 треков загружать нет необходимости,вполне хороший вариант..
Меня устраивает именно то,что повторное проигрывание начинается с момента остановки.

Было бы вообще шикарно,еслиб,при включении следующего трека,предыдущий проигывающийся останавливался .
Но это уже из области... сказка о Золотой рыбке..:-)
Я так рада.Огромное спасибо Вам!!!

Спасибо за чудесный сайт,где можно найти много полезного и интересного))
За внимание,которое оказываете начинающим флешерам.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-12-08
Здесь не очень удобно сделано: надо создавать новый экземпляр SoundSkin для нового трека:


import com.gmac.sound.SoundSkin;

var sound_1:SoundSkin = new SoundSkin();
sound_1.load("content/sound_1.mp3");
btn_1.addEventListener(MouseEvent.CLICK, onClickBtnFunc_1);
function onClickBtnFunc_1(event:MouseEvent):void
{
sound_1.togglePlayback();
}

var sound_2:SoundSkin = new SoundSkin();
sound_2.load("content/sound_2.mp3");
btn_2.addEventListener(MouseEvent.CLICK, onClickBtnFunc_2);
function onClickBtnFunc_2(event:MouseEvent):void
{
sound_2.togglePlayback();
}


Но это в любом случае удобнее, чем родной способ :-)
Комментатор
Комментарий добавил(а): Елена
Дата добавления: 2014-12-07
Здравствуйте.
Меня заинтересовала библиотека SoundSkin.
А именно Работа с внешними MP3-файлами.
Вопрос.Могу ли я загружать несколько MP3 файлов?.
Допустим,создать несколько кнопок и каждая из этих кнопок буде включать- выключать указанный в коде трек.
Мои попытки показвают ошибку.
И проигрывается только 1-ый из списка загруженных.
На Выводе при этот вот такая ошибка.
=====================
Error: Error #2037: Неправильный порядок вызова функций, или предыдущий вызов был неуспешным.
at flash.media::Sound/_load()
at flash.media::Sound/load()
at com.gmac.sound::SoundSkin/load()
at _fla::MainTimeline/frame1()
=====================
А вот так прописываю код.Что-то не так..А что ,помогите, плииз,разобраться..

/*
импорт классов
*/
import com.gmac.sound.SoundSkin;
/*
создаём объект класса SoundSkin
*/
var sound:SoundSkin = new SoundSkin();
/*
загружаем mp3-файл
*/
sound.load("Tрек1.mp3");
/*
кнопка, начинающая воспроизведение mp3-файла
*/
knopa2.addEventListener(MouseEvent.CLICK, onStart);

sound.load("Tрек2.mp3");
/*
кнопка, начинающая воспроизведение mp3-файла
*/
knopa1.addEventListener(MouseEvent.CLICK, onStart);
function onStart(event:MouseEvent):void
{
sound.togglePlayback();
}
Добавить комментарий:







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

Идиот-тест

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

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