Иллюстрированный самоучитель по WEB-графике

       

Управление звуком


На некоторых сайтах, созданных на основе Flash-технологии, имеется возможность управления звуком. Например, звук можно выключить в процессе проигрывания мультфильма, изменить громкость, а на некоторых сайтах можно даже регулировать звуковой баланс. Сначала рассмотрим общие сведения, а затем перейдем к примеру.

Объект Sound

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

Mysound =new Sound О;

Здесь Mysound — имя, назначаемое объекту класса Sound. Теперь можно управлять звуком, присоединяя через точку к имени объекта имена методов и указывая

необходимые параметры. Ниже перечислены основные методы объекта Sound:

  • attachSound ("имя_звука") —присоединяет к мультфильму звуковой файл из библиотеки;
  • getPan () — возвращает последнее значение баланса в интервале от -100 до 100. Левому динамику соответствует отрицательное значение, правому — положительное. Значение 0 представляет равномерное распределение силы звука междудинамиками;
  • getVolume ()— возвращает уровень громкости в интервале от 0 до 100;
  • setPan () — устанавливает баланс между левым и правым динамиком. Значения от -100 до -1 соответствуют большей громкости левого динамика, а от 1 до 100 — правого;
  • setVolume () — устанавливает громкость в интервале от 0 до 100. Значением по умолчанию является 100;
  • start (задержка, количество_повторений) — начинает воспроизведение звукового файла.Необязательные параметры позволяют задать время задержки в секундах и количество повторений воспроизведения;
  • stop () — приостанавливает воспроизведение звукового файла. Параметров нет;
  • Кроме перечисленных выше, имеется еще один метод объекта Sound — setTransform. Синтаксис его использования другой. Для вызова метода setTransform необходимо указать объект класса Object, связанный с параметрами управления динамиками. После этого создается объект класса Sound, который будет обрабатывать значения этих параметров с помощью метода setTransform. Параметры, о которых идет речь, определяют уровень входного сигнала в процентах (в интервале от-100 до 100):






  • l l—уровень воспроизведения в левом динамике сигнала, поступающего с левого входа;


  • 1 r— уровень воспроизведения в левом динамике сигнала, поступающего с

    правого входа;


  • r r — уровень воспроизведения в правом динамике сигнала, поступающего

    с правого входа;


  • r l— уровень воспроизведения в правом динамике сигнала, поступающего c левого входа.


  • По умолчанию параметры ll и rr имеют значение 100, а параметры 1r и rl — значение 0. процедура настройки параметров звука с помощью метода setTransform выглядит следующим образом:

    Mytransform = ne Object () ;

    Mytransform.il = 100;

    Mytransform.Ir = 0;

    Mytransform.rr = 100;

    Mytransform.rl = 0;

    MySound = new Sound ();

    MySound.setTransform (Mytransform};

    Задавая другие комбинации параметров звука, можно получать интересные эффекты.

    Пример элемента управления звуком

    Теперь рассмотрим пример создания элемента управления звуком. В новом мультфильме определим три слоя. Первый, самый верхний, назовем action, второй — volume и третий — pan. У нас должно получиться, как показано на рисунке:



    Рис. 630. Создание слоев action, volume и pan в мультфильме

    В слой action поместим такое действие:

    zvuk = new Sound();

    zvuk.attachSound("zvuk" ) ;

    zvuk.start(0, 999999);

    Этим создаётся новый звуковой объект. Присоединяем его из библиотеки с именем zvuk и запускаем с позиции 0, устанавливая количество повторений 99 999 раз (т. е. практически бесконечно). Если сейчас запустить мультфильм, то мы ничего не увидим и не услышим. Чтобы что-нибудь услышать, надо дать звуку имя. Для этого откроем библиотеку и найдем в ней наш звуковой символ. Неважно, как он там сейчас называется. Чтобы назвать звук, следует щелкнуть на его имени правой кнопкой мыши и в контекстном меню выбрать команду Linkage (). В раскрывшемся окне выберем переключатель Export this symbol и зададим имя zvuk. Иначе говоря, сделаем так, как показано на рисунке:



    Рис. 631. Окно Symbol Linkage Properties. Ввод имени 'вука (Identifier) и установки типа связи (Linkage)



    Теперь при просмотре мультфильма можно услышать звук.

    На данном этапе осталось только организовать управление нашим звуком. Для решения этой задачи существует множество способов. Мы реализуем самый распространенный: метод ползунка.

    Создадим новый символ-кнопку и назовем её polzunok_volume. Она будет выполнять роль регулятора громкости. Далее, создадим ещё один символ типа Movie Clip с названием Polzunok_MC_volume. Поместим в него из библиотеки символ polzunok_volume и зададим ему такое действие:

    on (press) {

    startDrag (this, false, 0, 7, 100, 7);}

    on (release) {

    stopDrag ();

    Затем создадим символ типа Movie Ciip и назовем его shkala_volume. В этом символе нарисуем прямоугольник, по которому будет передвигаться ползунок. Для правильной работы зададим для него координаты в палитре Info, как показано на рисунке:



    Рис. 632. Задание координат и размеров шкалы громкости звука

    Теперь создадим в этом символе новый слой и поместим туда polzunok_MC_volume. Слой с ползунком должен быть выше слоя со шкалой. Поставим ползунок в центре шкалы и назначим ему такое действие:

    onClipEvent (enterFrame) {

    root.zvuk.setVolume(this. x) ;

    Этим мы добьёмся того, что звук будет иметь значение, соответствующее координате х ползунка. Теперь переходим на главную сцену и вставляем туда символ shkala_volume. Вот мы и создали элемент управления громкостью звука.

    Теперь организуем балансировку звука между левым и правым динамиками. Для этого создадим символ-кнопку с названием polzunok_pan и нарисуем там ползунок, затем создадим символ типа Movie Clip с именем polzunok_MC_pan поместим туда наш polzunok_pan. Зададим ему действие:

    on (press) {

    startDrag (this, false, on (release) { stopDrag ();

    -100, 0, 100, 0) ;

    }

    Теперь создадим ещё один символ типа Movie Clip с именем shkala_pan. Нарисуем там нашу шкалу в виде прямоугольника с параметрами, как показано на рисунке:



    Рис. 633. Задание координат и размеров шкалы балансировки звука

    В этом же символе создадим ещё один слой и поместим его выше текущего. В этом слое расположим ползунок polzunok_MC_pan и зададим для него следующее действие:



    onClipEvent (enterFrame)

    ( root.zvuk.setPan(this. x) ;

    Теперь переходим на главную сцену и вставляем в неё шкалу балансировки звука shkala_pan. Посмотрите мультфильм и попробуйте изменить положение ползунков. Если ошибок нет, то всё будет работать.

    Однако у нас нет цифрового отображения громкости и баланса звука. Давайте разработаем и такой сервис. На главную сцену вставим два динамических текстовых поля. Одно для отображения громкости, другое —для баланса. Назовем их vol и pan соответственно. Сначала займёмся полем vol.

    Выделим символ shkala_volume и откроем палитру Action для нашего ползунка. Добавим к уже имеющемуся следующий код:

    s = new Sound(zvuk);

    _root.vol = s.getVolume();

    Таким образом, у нас должно получиться следующее:

    onClipEvent (enterFrame) {

    в Flash

    root . zvuk . set Volume (this. _x) ; ^ = new Sound (zvuk) ; root.vol = s . getVolume ( ) ;

    }

    Теперь пользователь может видеть цифровое значение громкости звука. Займемся организацией цифрового отображения баланса. Для этого перейдем к символу shkala_pan и добавим к его действиям следующий код:

    s = new Sound (zvuk) ;

    root. pan = s. getPan (); В результате должно получиться: onClipEvent (enterFrame) {

    root. zvuk. set Pan (this -_x) ; s = new Sound(zvuk);

    root. pan = s.getPan(); }

    Теперь пользователь получает сведения относительно баланса звука. Однако когда ползунок переходит на левую часть шкалы, мы видим отрицательные числа. Обычно в подобных программах отображаются положительные числа и буква «L» или «R». Давайте попробуем сделать так же. Для этого в символе shkala_pan в палитре Actions для ползунка немного изменим существующий код. После замены должно получиться:

    onClipEvent (enterFrame) ( _root . zvuk . setPan (this ._x) ; s = new Sound (zvuk) ;

    if (this._x<0) (

    _root.pan = - (s .getPan () ) +"Left" ; } else if (this._x>0) { _root.pan = s . getPan () +"Right" ; } else if (this._x = = 0) ( _root.pan = s. getPan ();

    Здесь мы поставили условие, что если значение координаты х ползунка меньше нуля (т. е. баланс смещается влево), то в поле pan возвращается значение с минусом (отрицательное число с минусом есть положительное число). Кроме того, к Цифровому значению приписывается строка Left. А если баланс смещается вправо, то всё остаётся как есть и ещё приписывается Right. Если же значение координаты х равно нулю, то вообще ничего не приписывается. Теперь мы имеем более привычную форму отображения баланса. Таким же способом можно сделать, чтобы при минимальной громкости выводилось бы, например «OFF» или «Выкл.», а при максимальном значении — «МАХ». Для этого нужно лишь заменить код для ползунка в символе shkala_volume на следующий:

    _root . zvuk. set Volume (this. _x) ;

    s = new Sound (zvuk) ;

    if (this._x == 0) {

    root.vol = "Выкл."; Т

    else if (this._x == 100) { _root.vol = "MAX"; Т

    else { _root.vol = s.getVolume ();


    Содержание раздела