Создание объектов класса Sound

Для программного управления звуками в ActionScript имеется специальный класс Sound. В отличие от клипов, которые являются не только «материальными» структурами, но и объектами класса MovieClip, объекты класса Sound — это не звуки. Одному объекту класса Sound может не соответствовать звуков в принципе, а иногда он может управлять одновременно десятками звуков. Дело в том, что во Flash звук — это неотделимая часть клипа (особенно справедливо это утверждение по отношению к потоковым звукам). Объект же класса Sound управляет звуковой составляющей клипа. Эту особенность очень важно понять во избежание затруднений в дальнейшем, поэтому повторим: объект класса Sound —это не звук и даже не ссылка на звук. Это инструмент для управления звуковой составляющей клипа, в которую могут входить десятки звуков (или не входить ни один), и в разные моменты времени могут проигрываться разные из них.

Возникает очевидный вопрос: «Что делать, если с клипом связано несколько звуков, а управлять каждым необходимо индивидуально?» Так как объект класса Sound воздействует на все звуки клипа одновременно, очевидно, что для управления каждым звуком по отдельности их все необходимо разнести по разным клипам.


Это важный принцип, который нужно четко усвоить: если вы собираетесь программно управлять звуком, то он должен располагаться строго в отдельном клипе (это касается как звуков, помешенных на временную диаграмму «вручную», так и присоединенных при помощи метода attachSound() или импортированных методом loadSound()). Иначе при попытке, например, остановить воспроизведение одного звука, перестанут проигрываться и вес остальные звуки, относящиеся к данному клипу.

Имеется два типа объектов класса Sound. Первые управляют звуковой составляющей какого-то конкретного клипа. Ссылка на этот клип передается конструктору Sound() при создании объекта.

Например:
var sound:Sound=new Sound(clip); // Объект sound будет связан с клипом clip

Если в клип вложены другие клипы, содержащие звуки, то непосредственно объект класса Sound с ними связан никак не будет. Однако изменение уровня громкости или баланса, присущих звуковой составляющей клипа более высокого уровня, изменит и параметры воспроизведения звуков вложенных в него клипов. Если, например, сделать звук клипа А на X % громче, то настолько же станет громче и звук вложенного в него клипа В. Описанный факт означает, что программное изменение параметров воспроизведения звука, расположенного на основной временной диаграмме, вызовет аналогичные изменения в характере проигрывания всех звуков фильма.


Поэтому тогда, когда это возможно, стоит обходиться без помещения звуков на _root.

Звуками, вложенными в кнопки, нельзя управлять программно: параметром конструктора Sound() может быть только ссылка на клип. Более того, на звуки кнопок не влияет даже изменение характеристик воспроизведения звука содержащих их клипов. Если у вас возникнет потребность применить возможности класса Sound к звукам кнопок, то используйте клипы-кнопки.

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

Довольно часто одну и ту же операцию бывает необходимо провести по отношению ко всем воспроизводящимся звукам фильма (например, пользователь должен иметь возможность отключить звуковое оформление сайта). В таких случаях нужно использовать второй тип объектов класса Sound, управляющих одновременно всеми звуками в фильме. Создать такой объект можно, задействовав конструктор Sound() без параметров:

// Данный код остановит проигрывание всех звуков в фильме
var global_sound:Sound=new Sound();
global_sound.stop();

Распространено ошибочное мнение, что следующие строки являются эквивалентными:

var sound:Sound=new Sound();
var sound:Sound=new Sound(this);

На самом деле данные строки различаются радикально.


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

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

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

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

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