Динамическое присоединение звука. Метод attachSound()

Уже хорошо знакомый нам метод attachMovie() служит для программного «перетаскивания» экземпляра клипа из библиотеки на временную диаграмму существующего клипа. Схожие функции выполняет метод attachSound() класса Sound. Он позволяет включить в звуковую составляющую клипа звук из библиотеки.

Прежде чем применить метод attachSound(), звуку нужно присвоить идентификатор программного экспорта. Делается это точно так же, как в случае клипов или шрифтов.

1. Открываем библиотеку (F11), находим строку нужного элемента и щелкаем по ней правой кнопкой мыши. В появившемся контекстном меню выбираем пункт Linkage. В результате появится окно Linkage Properties.

2. Ставим флажок Export for ActionScript. При этом станет доступна строка Identifier. В нее вводим текст идентификатора экспорта. Это может быть любая последовательность символов.

Единственное ограничение — идентификатор должен быть уникальным.

3. Если вы используете внутренний предзагрузчик, желательно отключить загрузку звука перед первым кадром. Для этого нужно убрать флажок Export in first frame.
Синтаксис метода attachSound() намного проще, чем у метода attachMovie():

snd.attachSound("Id"), где

• snd — объект класса Sound, через который к присоединенному звуку будет осуществляться доступ.


С одним объектом класса Sound может быть связан только один динамически присоединенный звук. При повторном применении к нему метода attachSound() будет заменен связанный с ним звук (однако если при этом первоначально присоединенный звук проигрывался, то его воспроизведение прервано не будет);

• "Id" — строка с идентификатором программного экспорта необходимого звука.

Для примера приведем код, «перетаскивающий» звук на основную временную диаграмму и запускающий затем его проигрывание:

var sound:Sound=new Sound(_root);
sound.attachSound("snd");
sound.start();

Импортированный звук метод attachSound() располагает (условно) на той временной диаграмме, к которой относится соответствующий объект класса Sound. Если объект класса Sound глобальный (то есть он был создан без передачи конструктору параметра), то звук помещается на ту временную диаграмму, на кадре которой находится код.

В том, что одновременно с одним объектом класса Sound может быть связан только один звук, присоединенный при помощи метода attachSound(), нет ничего странного. В обратном случае невозможно было бы ввести в язык такие элементы, как, например, свойство duration (возвращает длину звукового фрагмента) или метод start() (запускает воспроизведение звука).


Все эти элементы могут быть применены только к одному конкретному звуку. Если бы с объектом класса Sound можно было связать несколько программно присоединенных звуков, то при использовании ряда методов и свойств часто возникала бы ситуация неопределенности. Кстати, по этой же причине большинство свойств и методов класса Sound не применимы к звукам, помещенным на временную диаграмму «вручную». Просто ограничения на количество размещенных на кадрах звуков не существует, а данные методы и свойства могут быть использованы лишь по отношению к одному конкретному звуку.

Большинство методов, свойств и событий класса Sound (кроме attachSound(), loadSound(), get-BytesLoaded(), getBytesTotal() и onLoad) можно разделить на две группы. В первую входят инструменты, влияющие сразу на все звуки, связанные с данным клипом. Например, метод setVolume() изменяет громкость всех относящихся к клипу звуков (то есть как присоединенных «вручную», так и импортированных динамически через данный объект класса Sound или через другие объекты, ссылающиеся на этот клип), Ко второй (более многочисленной) группе относятся инструменты, которые можно использовать лишь по отношению к присоединенному динамически (при помощи метода attachSound() или loadSound()) звуку.


Например, свойство position позволяет узнать, какая часть звука уже проигралась. Соответственно, возможности программного управления динамически присоединенными звуками гораздо шире. Четкое понимание различий инструментов класса Sound, относящихся к разным группам, — важное условие их эффективного использования. По своему типу звуки, присоединяемые при помощи метода attachSound(), являются, естественно, событийными, то есть процесс их проигрывания никак не зависит от расположения воспроизводящей головки на временной шкале или наличия других проигрывающихся звуков. Можно, например, добиться эффекта эха, запустив проигрывание одного и того же звука несколько раз подряд через определенный промежуток времени. Важное различие между обычными событийными звуками и присоединенными программно заключается в том. что последние не привязаны к какому-то одному кадру. Запустить их воспроизведение можно с любого кадра, проигрывающегося после кадра, содержащего код с attachSound().

Остановить проигрывание динамически присоединенного звука, удалив управляющий им объект класса Sound, не получится. Для этого нужно использовать метод stop(). Если удалить клип, к которому относится управляющий динамически присоединенным звуком объект класса Sound, то звук перестанет быть доступным.


Это доказывает, что ссылка на звук на самом деле внедряется методом attachSound() во внутреннюю структуру клипа.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Импортирование внешних МР3-файлов
Операции со звуком без использования программирования
Основные понятия теории цифрового звука
Свойства position и duration
Событийный (event) и потоковый (stream) звук

Вернуться в раздел: Action Script / 15. Работа со звуком