Эта музыка будет вечной, если я заменю батарейки.
«Наутилус Помпилиус»

Добавить и настроить звук во Flash-клипе можно просто и быстро, в чем вы уже убедились (см. «Мир ПК», № 9/07). А сейчас обсудим, как с помощью команд ActionScript программно контролировать музыкальные фрагменты во Flash, а также как предоставить зрителю возможность управлять проигрыванием и как настраивать параметры экспорта звука.

Раз словечко, два словечко, или ActionScript на страже звука

Способы работы с аудио посредством добавления звукового фрагмента на панель Timeline (Монтажная линейка), к сожалению, не всегда дают желаемый результат, особенно в случае с «тяжелыми» (не в смысле музыкального направления, а в плане объема звукового файла) мелодиями. Но этому есть альтернатива — команды языка программирования ActionScript, который позволит реализовать программным способом все то, что мы вручную делали на прошлом уроке. Рассмотрим, как задавать фоновую музыку
и реакцию на определенное событие, а также как настраивать звуковые эффекты средствами ActionScript. Еще надо обеспечить интерактивность — проигрывание и остановку аудиофрагмента в ответ на действия пользователя. Конечно, чтобы со всем этим разобраться, понадобятся определенные знания в области программирования.

Линкуем, или Привязка звука

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

  1. Откройте панель Library (Библиотека), нажав клавишу , и найдите требуемый музыкальный фрагмент. О том, как его туда поместить, см. «Мир ПК», № 9/07.
  2. Воспользуйтесь контекстным меню, нажав правую кнопку мыши и выбрав пункт Linkage (Привязка).
  3. В появившемся диалоговом окне Linkage Properties (Свойства привязки) установите галочку напротив пункта Export for ActionScript (Экспорт для ActionScript) — рис. 1.
  4. Теперь стал активным пункт Identifier (Идентификатор), и в него введите латиницей название звукового ресурса, например my_sound.
    Примечание. Если отметить пункт Export in first frame (Экспортировать на первый кадр), то при воспроизведении клипа музыкальный фрагмент сначала загрузится (до загрузки клипа) на первый кадр. Поэтому подумайте, нужна ли вам данная возможность, ведь если звуковой файл большой, то загрузка клипа затормозится.
  5. Привязка осуществлена, так что нажмите OK.

Рис. 1. Панель Linkage Properties

Настало время переходить к программированию. Для работы с аудио потребуется встроенный объект Sound, управляющий звуком. Сначала привяжем аудиоресурс к звуковому объекту, не забыв написать идентификатор, заданный на предыдущем этапе. Сделать это поможет метод attachSound. Итак, выполним следующее.

  1. На панели Timeline создайте слой Actions (Действия), и на его первом кадре задайте сценарий.
  2. Для создания скриптов на ActionScript во Flash используйте панель Actions, вызываемую из меню Window • Actions (Окно • Действия) или же нажатием клавиши . Откройте ее и впишите скрипт

var mySound = new Sound ();

mySound. attachSound (“my_sound”);

Да будет звук, или Программируем запуск и остановку мелодий

Аудио готово к работе. Рассмотрим, как программно задать фоновую мелодию. Для запуска звука примените функцию start (); объекта Sound.

  1. Отметьте на панели Timeline кадр, с которого желаете начать воспроизведение (например, первый).
  2. Перейдите на панель Actions и напишите скрипт mySound. start ();
  3. Запустите клип, и, если все было сделано правильно, должна заиграть музыка, а после окончания видеофрагмента она остановится.

В скобках функции можно указать такие параметры, как start (offset, loops).

  • Offset (Смещение) — указывает, с какой секунды будет воспроизводиться музыкальный фрагмент. Если вписать цифру 2, проигрывание начнется со второй секунды. Этот параметр позволяет отсечь время тишины и запустить музыку в нужный момент. Если вы хотите проиграть звук полностью, напишите 0.
  • Loops (Зациклить) — обозначает число повторений проигрываемого фрагмента. Для создания фоновой музыки, которая должна звучать в клипе постоянно, необходимо задать заведомо большее количество повторений, например 10000. В общем, столько, сколько не жалко.

Итак, после этих дополнений наше аудиосопровождение будет управляться скриптом

start (2, 10000);

Это был самый простой способ задания музыкального фона. Как альтернативу ему рассмотрим событие onSoundComplete объекта Sound, позволяющее запустить определенное событие по окончании воспроизведения присоединенного к нему звука. Допустим, вы хотите, чтобы мелодия Sound2 началась по окончании мелодии Sound1. Событие onSoundComplete как раз и будет вызвано после проигрывания присоединенной мелодии. Чтобы реализовать данное задание, нужно на панели Actions ввести код:

var mySound1 = new Sound ();

var mySound2 = new Sound (); // создаем объекты класса Sound

mySound1.attachSound (“Sound1”);

mySound2.attachSound (“Sound2”) // прикрепляем звуковые файлы

mySound1.start (); // запускаем мелодию Sound1

mySound1.onSoundComplete = function () {

mySound2.start (); // после окончания Sound1 запускаем мелодию Sound2

}

Примечание. Не забудьте на панели Library написать идентификаторы звука. У вас это Sound1 и Sound2.

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

Для остановки музыки используйте функцию stop ();. Итак, остановить только одну нужную мелодию, которую вы задали как mySound1, поможет скрипт

mySound1.stop ();

А чтобы прервать все звуки клипа, напишите скрипт

stopAllSounds ();

Громче -тише с ActionScript, или Альтернатива Effects

С помощью ActionScript можно регулировать громкость и распределение звучания по каналам (баланс). Для установки уровня громкости существует метод setVolume (value). В скобках указывается параметр value, изменяющийся от 0 (минимальный уровень, соответствует тишине) до… бесконечности. Не рассчитывайте только, что громкость звука также будет постоянно возрастать, ведь у каждого воспроизводящего устройства есть свой потолок. По умолчанию уровень громкости равен 100. Если вы хотите сделать звук громче, введите значение 150, 200, 300 — в общем, столько, сколько позволяет звуковая плата.

Скрипт для изменения громкости выглядит так:

mySound.setVolume (50); // Звук стал вполовину тише

mySound.setVolume (200); // Звук стал вдвое громче

Настроить баланс между колонками поможет функция setPan (value). Чтобы переместить весь звук в левый канал, укажите –100, а для проигрывания мелодии в правом канале — 100. По умолчанию задан 0, он распределит звучание по каналам равномерно. А смещает звук в левый канал команда

mySound.setPan (-80);

Загружаем внешние MP3-файлы, или Радуем пользователя мелодией

Достаточно заманчиво выглядит возможность загрузки внешних MP3-файлов в ролик. И место экономится, не надо «раздувать» SWF-ролик громоздкими звуковыми файлами, и пользователю предоставляется право выбирать определенную мелодию, под которую ему приятнее смотреть ваш сайт, презентацию и т. д.

Осуществить загрузку можно посредством метода loadSound (url, stream) объекта Sound. Параметры задавайте таким образом:

  • url — напишите путь к файлу. Если документ находится в Сети, то вида http://music. com/music1.MP3, если музыкальный объект располагается на компьютере и хранится в той же папке, что и SWF-файл, — просто music1.MP3;
  • stream — представляет собой логическую переменную, определяющую, в каком режиме будет загружаться музыка;
  • true — файл, даже не загрузившись полностью, начинает воспроизводиться в потоковом режиме. Больше всего true подходит для файлов, располагающихся локально, и удобен тогда, когда вы уверены в качестве канала Интернета. В противном случае ваша аудитория получит неприятные сюрпризы в виде постоянных заминок и пауз;
  • false — при данном значении воспроизведение файла начнется только после его полной загрузки. Его рекомендуется назначать для музыкальных файлов, находящихся в Сети.

Итак, если вы загружаете файл music1.MP3 из той же папки, что и основной клип, то напишите команду:

var mySound1 = new Sound ();

mySound1.loadSound (“music1.MP3”, true);

А для загрузки файла music1.MP3 из Интернета задайте скрипт

var mySound2 = new Sound ();

mySound2.loadSound (“http://music.com/music1.MP3”, false);

Проигрыватель, или Задаем действия кнопкам

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

Присоединить действие к кнопке можно двумя способами: задать скрипт как реакцию на нажатие мыши; написать отдельно функцию и вызвать ее при нажатии на кнопку.

Рассмотрим, к примеру, такой случай, когда одна кнопка заставляет играть мелодию, загруженную из локальной папки, а другая останавливает проигрывание. Следовательно, вам понадобятся символы типа Button (Кнопка). Создайте две кнопки и назовите их play и stop.

Выделите на сцене кнопку play и на панели Actions напишите последовательность:

on (release) {

mySound1.loadSound (“Inside. MP3”, true);

}

Для кнопки stop задайте команду:

on (release) {

mySound1.stop ();

}

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

Обсудим, как работать с функциями и решить эти задачи.

Рис. 2. Панель Properties — кнопки для остановки звукаРазместите две кнопки на сцене и на панели Properties (Свойства), поставьте им в соответствие b_sound и b_stop (рис. 2).

Перейдите на панель Timeline, выделите первый кадр и на панели Actions напишите скрипт:

var mySound = new Sound ();

mySound. attachSound (“mySound”);

var mySound = new Sound ()

var pl = true; // Объявляем булеву переменную и присваиваем ей значение true. Это нужно для того, чтобы звуки не наслаивались.

var mySound_pos = 0; // Объявляем переменную, в которой будет запоминаться момент остановки, первоначально 0.

// Создаем функцию проигрывания.

function my_play () {

if (pl) {

mySound.start (mySound_pos/1000,1000); // Запускаем мелодию, в качестве параметра смещения Offset указываем значение в миллисекундах, которое записалось при остановке (см. ниже). Чтобы перевести миллисекунды в секунды, делим его на 1000. И зацикливаем проигрывание, указав для параметра Loop значение 1000.

pl = false; // При воспроизведении мелодии снова запустить ее будет невозможно.

}

}

/ Создаем функцию остановки мелодии.

function my_stop () {

mySound_pos = mySound.position // С помощью свойства position в переменную mySound_pos записываем значение продолжительности уже проигранной мелодии.

mySound. stop ();

pl = true // После остановки разрешаем проигрывать звук.

}

// Вызываем функцию при нажатии на кнопку.

b_sound. onPress = function () {

my_play ();

}

b_stop. onPress = function () {

my_stop ();

}

В данном тексте я прокомментировала только новые для вас моменты.

Оптимизация звука во Flash, или Соотношение между сжатием и качеством аудио

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

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

Скорость потока («битрейт»). Чем она выше, тем больше места занимает мелодия, но и тем лучше ее качество.

Например, для простых звуков и голоса невысокого качества достаточно 8—16 кбит/c, но чтобы сохранить достойное качество, придется указывать значения не менее 48 кбит/c.

Частота дискретизации. При звукозаписи используется 44—48 кГц, для воспроизведения в Web подойдет и 22 кГц, а для голоса человека и музыки низкого качества хватит и 11 кГц.

Тип — на размер аудио также влияет его тип: моно — один канал, или стерео — два канала. Для простых звуков и несложных мелодий достаточно монозвучания, и тогда они будут занимать в 2 раза меньше места.

Примечание. Не забывайте, что Flash не может сделать звук качественнее, чем тот, который был импортирован, т. е. вам имеет смысл только оптимизировать звук, снижая его частоту и разрядность.

Теперь, когда вы познакомились с минимумом теории, посмотрим, как можно оптимизировать звук при экспорте. Для этого воспользуйтесь вкладкой Flash диалогового окна Publish Settings (Настройки опубликования), которое вызывается нажатием комбинации клавиш ++. Обратим внимание на пункты, имеющие непосредственное отношение к аудио (рис. 3).

Рис. 3. Нижняя часть диалогового окна Publish Settings, отвечающая за экспорт звука

  • Audio Stream (Потоковое аудио) — показывает, с какими параметрами оптимизируется потоковый звук.
  • Audio Event (Событийное аудио) — показывает настройки экспорта событийного звука.
  • Override sound settings (Перекрыть настройки звука) — позволяет заменить стандартные настройки аудио на те, что использовали вы сами.
  • Export device sounds (Экспортировать звуки для устройств) — предназначена для экспорта на мобильные устройства.

Выбор компрессии, или Настройка качества звука

Качество потокового и событийного звука можно настраивать индивидуально. Для настройки как Audio Stream, так и Audio Event используются кнопки Set (Установить), вызывающие диалоговое окно Sound Settings (Настройки звука).

Вот опции диалогового окна Sound Settings (рис. 4).

Рис. 4. Диалоговое окно Sound Settings для MP3-компрессии

  • Compression (Сжатие) — из раскрывающегося списка предлагается выбрать алгоритм сжатия. В зависимости от того, с каким звуком вы работаете и что хотите получить на выходе, существуют следующие возможности:
  • MP3 — компрессия, наиболее подходящая для экспорта мелодий; она устанавливается по умолчанию.
  • ADPCM — рекомендуется выбирать при экспорте совсем коротких звуков невысокого качества.
  • RAW — звук экспортируется без сжатия, про него говорят «as is», т. е. «как есть».
  • Speech (Речь) — больше всего подходит для экспорта файлов, содержащих человеческий голос.
  • Disable (Отключен) — следует выбрать, если не нужно сжимать звук.
    У каждого пункта есть собственные настройки. Они приведены ниже для MP3-компрессии (см. рис. 4).
  • Preprocessing: Convert stereo to mono (Предварительная обработка: конвертировать стерео в моно) — преобразует стереозвук в моно, но часто импортированный аудиофрагмент уже одноканальный, поэтому данная опция бывает неактивна.
  • Bit Rate (скорость потока) — можно оптимизировать звук, выбрав из раскрывающегося списка значение скорости потока. Чем она выше, тем качественнее звук, но и тем больше размер файла. Максимальный Bit Rate — 160 кбит/c. Конечно, если возможно, хорошо бы повысить стандартное значение Bit Rate в 16 кбит/c хотя бы до 32, а еще лучше — до 48.
  • Quality (Качество) — предлагает три алгоритма скорости сжатия, которые обеспечивают следующее: низкое качество и небольшой размер — Fast (Быстрый); «ни вашим ни нашим» — Medium (Средний); очень хорошее качество, но и немалый размер — Best (Лучший).

Совет. Если вы экспортируете звук, уже импортированный как MP3-файл, не стоит ничего изменять в настройках.

Не забудьте произвести настройки отдельно для Audio Stream и для Audio Event, ведь качество той же фоновой мелодии будет отличаться от событийных звуков, например от озвучивания щелчков мыши.

* * *

Здесь были рассмотрены конечно же далеко не все возможности программного управления звуками. Для этого нужно гораздо глубже погружаться в конструкции языка ActionScript, однако и данная статья поможет научиться наиболее востребованным операциям со звуком. Будем считать, что со звуком мы справились, теперь возьмемся за видео. В следующей статье будут обсуждаться возможности использования видеороликов во Flash.

ОБ АВТОРЕ Ксения Свиридова — аспирантка кафедры «Автоматизированные системы управления» НТУ «ХПИ», e-mail: ksenijas@yandex.ru.


ActionScript — из сценарного языка в объектно-ориентированный

Свой путь из варяг в греки ActionScript начинал как сценарный язык в Macromedia Flash. Дебютировали скрипты во Flash 4, а к версии 5 программы оформились в виде языка ActionScript 1.0, не базирующегося ни на классах, ни на других принципах объектно-ориентированных программ (ООП). Он содержал команды, операторы и объекты, которые помещаются в скрипт и управляют клипом. Созданный скрипт можно было присоединять к символам различных типов (например, к кнопке либо Movie-клипу) или к отдельному кадру.

В 2004 г. вышла программа Macromedia Flash MX 2004, поддерживавшая версию ActionScript 2.0. В ней уже были реализованы основные постулаты ООП: программирование, основанное на классах, строгое определение типов, наследование и т. д. Однако ActionScript 2.0 был лишь усовершенствованным ActionScript 1.0, а не новым языком, поскольку во время компиляции классы и методы «двойки» становились прежними прототипами и функциями ActionScript 1.0.

Через год был представлен ActionScript 3.0 как «серьезный» язык программирования в специализированной среде Flex Builder. Именно его мы и увидели в новом Flash CS3. Этот язык можно считать полноценным объектно-ориентированным языком программирования. У ActionScript 3.0 отношение к классам перестало быть формальным, как у ActionScript 2.0. В нем весь синтаксис базируется на классах, и уже нельзя присваивать экземплярам символов и кнопок определенные действия и события. Однако тем, кто привык к языку ActionScript 2.0, особенно дизайнерам, незнакомым с ООП, нелегко переключиться на ActionScript 3.0. Да им и не нужно этого делать — Flash полностью под-держивает ActionScript 1.0 и 2.0.

Впрочем, не стоит использовать более свежую версию языка только ради его новизны. Всегда спрашивайте себя, насколько сложное приложение вы создаете и нужны ли вам в работе преимущества ActionScript 3.0. Если ответ отрицателен, как в нашем случае (мы занимаемся дизайном, а не разработкой сложных приложений), то без колебаний выбирайте версию Flash File (ActionScript 2.0), чтобы сделать новый документ. А если решаете сложные задачи, используйте Flash File (ActionScript 3.0).

2061