Объект типа Sound

Краткое содержание главы:

Свойства и методы, Присущие объекту Sound;

Как управлять объектом Sound Посредством ActionScript;

Создание при помощи ActionScriptДинамического МРЗ-проигрыва теля.

В предыдущей главе мы научились помещать звукозаписи на монтаж­ный стол, организовывать их потоковую передачу, немного управлять ими при помощи диалогового окна Редактировать шаблон (Edit Envelope). Все то же самое можно сделать с Объектом Типа Sound, И при этом мы получим еще ценное преимущество — возможность управлять его свой­ствами «на лету» при помощи ActionScript.

ActionScript является ныне полноценным языком Объектно-ориен­тированного программирования (object-oriented programming, OOP) И дает возможность не только работать с различными объектами, но и со­здавать их в динамике. Основные типы объектов во Flash — это филь­мы-символы, текстовые поля, компоненты и, конечно же, звук. В пре­дыдущей главе звук был представлен в совершенно сыром виде (как бы сам по себе) и, соответственно, не мог контролироваться посредством ActionScript. Чтобы получить возможность такого контроля, звук дол­жен быть представлен как объект.

Знакомство с объектом Sound

В следующем скрипте объявляется новый объект типа Sound, в него по­мещается звуковой файл из Библиотеки под названием «rockSong», за­тем происходит обращение к объекту — его воспроизведение:

MySound = new Sound (); mySound. attachSound ("rockSong"); mySound. start ();

Если что-то здесь не понятно, не волнуйтесь — мы будем часто ис­пользовать этот скрипт, и у вас будет возможность поближе с ним по­знакомиться.

Объекту Sound присущи несколько встроенных методов, в том числе:

Start

Начинает воспроизведение объекта типа Sound с указанной отметки. Например, команда

MySound. start (5);

Начнет воспроизведение объекта mySound с отметки 5 секунд. Если па­раметр стартовой отметки опущен, то mySound будет воспроизведен немедленно, с самого начала. Этот метод позволяет также указать коли­чество циклов воспроизведения после параметра стартовой отметки. Например,

MySound. start (5,2);

Воспроизведет звукозапись дважды со стартовой отметки 5 секунд. По умолчанию звукозапись воспроизводится один раз.

Stop

Останавливает воспроизведение звука. Если вы в ActionScript не ука­жете, какой именно звук следует остановить, Flash остановит воспроиз­ведение Всех звукозаписей, воспроизводимых в данный момент.

SetPan

Этот метод позволяет смещать баланс между левым и правым каналами объекта Sound. Значения могут быть от -100 (звук полностью смещен влево) до IOO(полностью вправо). По умолчанию setPan установлен на О, то есть звуковая панорама расположена по центру, без смещения.

SetVolume

Позволяет изменять громкость объекта Sound от 0 (тишина) до (00 (пол­ная громкость) . Значение по умолчанию равно 100.

IoadSound

Теперь, с помощью этого нового метода, Flash MX позволяет импорти­ровать файлы МРЗ… и даже более того! Flash может не только импорти­ровать МРЗ-файл, но и организовать его потоковую передачу. В следую­щем примере определяется файл МРЗ и указывается, что его передача в фильм должна вестись потоком:

MySound. loadSound (Http://vvww. yourhornepage. corn/discopop. rnp3, true);

Если значение параметра isStreaming равно true, идет потоковая пе­редача звука. Если же false — Flash импортирует МРЗ как звуковое со­бытие, то есть загружает полностью, прежде чем воспроизвести.

Таким образом, теперь во Flash MX можно создать динамический МРЗ проигрыватель.

Дополнительные методы

Существует несколько методов, позволяющих получить текущие зна­чения объекта Sound, в том числе getPan и getVolume. Что более важно, Flash имеет возможность получить значения двух таких элементов объек­та, как:

Duration: Продолжительность звукозаписи;

• position: позиция указателя воспроизводимого в данный момент клипа.

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

Динамический звук

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

1. Откройте новый фильм Flash и импортируйте не слишком длинный звуковой файл (Ctrl + R). Я в этом упражнении буду использовать все тот же файл train_exc. mp3, с которым мы работали в предыдущей главе (его можно взять на Www. friendsofed. com), а вы, если хотите, можете взять какой-либо свой файл.

2. Чтобы управлять нашим МРЗ при помощи ActionScript, нужно дать ему имя связи. Откройте Библиотеку (Library) (Fl 1) и щелкните пра-

7 — Flash MX Video

Вой кнопкой мЫшИ на имени звукового файла. В меню выберите пункт Связи (Linkage…).

3. Перед вами появится окно Свойства связи (Linkage Properties). Уста­новите флажок Экспорт для ActionScript (Exportfor ActionScript), пос­ле чего произойдут два события: автоматически установится флажок Экспорт в первый кадр (Export to First Frame), и станет доступным неактивное до этого поле Название (Identifier):

4. Измените Название (Idebtifier) на «music» и нажмите кнопку ОК.

5. Теперь давайте подключим наш звук. Переименуйте имеющийся на монтажном столе слой в «actions» и, выделив кадр 1, откройте панель Действия (Actions) (F9). Введите следующий код:

MySound = new Sound (); mySound. attachSound ("music"); mySound. start ();

Скрипт практически тотже, что и в начале главы. Единственное раз­личие состоит в том, что во второй строке кода указано другое имя связи. Давайте разберем этот код строка за строкой. Мы указываем Flash, что он должен:

• создать новый объект типа Sound под названием mySound;

• взять из Библиотеки аудио файл с именем связи music и поместить его в mySound;

• начать воспроизведение mySound с самого начала, без повторов.

Яв этой главе частенько использую имя mySound, но вы Можете назвать ваш объект типа Sound как угоДно. Впрочем, постарайтесь, чтобы имя не совпадало с именами переменных, командами ActionScript и Другими зарезервированными словами Flash, иначе в вашем скрипте могут воз­никнуть проблемы.

6. А теперь протестируйте фильм, и вы услышите вашу запись. Помни­те, мы сделали это всего лишь при помощи нескольких строчек ActionScript и нового объекта типа Sound, безо всяких длиннющих монтажных столов.

Но не стоит слишком обольщаться — в конце концов, это только од­нократно проигранная звукозапись. Мы пойдем дальше и начнем ма­нипулировать звуком в динамике. Давайте попробуем создать про­стые поля для ввода информации — в них пользователь будет вводить значения громкости и баланса для воспроизводимого звука.

7. Закройте ваш тестовый SWF, На монтажном столе создайте новый слой «text». В кадре 1, с помощью инструмента Текст (Text), изобра­зите два статичных текстовых поля (Static Text) с надписями «VOLUME:» (громкость) и «PANNING:» (баланс):

(VOLUME:!

‘PANNING?]

8. Рядом с каждым изобразите примерно такие же текстовые поля для ввода (Input Text):

Ку Рамка вокруг текста (Show Border Around Text) в инспекторе Па­раметры (Property), в поле Пер. (Var) (переменная, variable) введите «volumeChange »:

| текста,volume:: !,» параметры,v: ю4 о

10.Ту же процедуру повторите для поля рядом с надписью PANNING, только переменная будет называться panChange.

1 !.Текстовые поля готовы, теперь нам нужна кнопка, при нажатии на которую Flash должен изменить параметры звука в соответствии с данными в текстовых полях. Вставьте новый слой под названием « UpdateButton ».

12.Выделите кадр 1 слоя UpdateButton. Чтобы не рисовать кнопку и сэ­кономить время, откройте панель Компоненты (Components) (Ctrl + F7) и перетащите копию компонента PushButton в рабочую область, поместив рядом с полями ввода:

ф. ■ ∙''∙∙': f
 button

!volume-: I I

!panning:! [ ~|

13.Выделив PushButton в рабочей области, отправляйтесь в инспектор Параметры и дайте копии имя «update_mc». Затем щелкните в поле Label и введите «UPDATE»:

14.Teπept>, чтобы эта кнопка могла управлять объектом Sound, нужно добавить еще ActionScript. Выделив кадр 1 слоя actions, откройте па­нель Действия (Actions) и введите под предыдущими тремя строчка­ми следующий код:

This. update_mc. onRelease = function() { mySound. setPan(panChange); mySound. setVolume(volumeChange);

};

Здесь используются уже рассматривавшиеся в этой главе методы setPan и SetVolume для обновления параметров объекта mySound (или звукового файла) после нажатия на компонент PushButton.

15. Запустив тест фильма, попробуйте вводить различные значения и нажимать кнопку. Помните, что значение громкости изменяется в пределах от 0 до 100, а значение баланса — от -100 (только левый ка­нал) до 100 (только правый).

16. Сохраните фильм как sound_app_l. fla и оставьте открытым для сле­дующего упражнения.

На данный момент наше приложение не слишком «умно», не знает пределов громкости и баланса, и пользователь может задрать уровни в область искажений. В следующем упражнении мы установим ограни­чения, чтобы уровни баланса и громкости не могли выйти за пределы надлежащих значений.

Добавляем графический интерфейс

Мы можем усовершенствовать наше маленькое приложение, добавив кнопки «плюс» и «минус»; тем самым мы дадим пользователю нечто бо­лее похожее на графический интерфейс и вернем ему возможность ком­фортабельно управлять звуком при помощи мыши.

1. Если вы еще не закрыли sound_app_l. fla, созданный в последнем упражнении, сохраните его как sound_app_2.fla, и мы начнем пост­роение нашего интерфейса.

2. Вставьте новый слой под названием «small buttons». В кадре 1 нари­суйте маленький квадратик и преобразуйте его в графический сим­вол (F8) под названием «small square». Это будет базовая форма для четырех кнопок.

3. Теперь выделите этот графический символ и преобразуйте его в сим­вол-кнопку под названием «plus volume button». На монтажный стол plus volume button добавьте новый слой и в нем, в состоянии Вверх (Up) нарисуйте значок плюс:

4. Создайте остальные три кнопки, дублируя «plus volume button» и за­меняя знак плюса на минус, «L» и «R». Назовите их «minus volume button», «left button» и «right button» соответственно.

5. Также можете добавить маленькие подписи значений баланса, что­бы подсказать пользователю, какие числа можно вводить. Вот так выглядит весь интерфейс:

VOLUME: |

В

I

ЕВ_______

L… Ир!?АЛ.___________ ]

PANNING:

E

0

100

IOO

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

6. Выделите кнопку minus volume button и присоедините к ней следую­щий код:

On (release) {

VolumeChange -= 5;

}

При этом из значения переменной VolumeChange вычитается 5 (эк­вивалент выражения VolumeChange = VolumeChange — 5).

7. Для plus volume button введите следующий код:

On (release) {

VolumeChange += 5;

}

8. Выделив left button, добавьте такой скрипт:

On (release) { panChange -= 5;

}

9. Наконец, для right button код будет такой:

On (release) {

PanChange += 5;

}

Ну вот, наши маленькие кнопки закончены. Но помните, что я гово­рил об предельных значениях? Если сейчас вы протестируете фильм, то обнаружите, что можете повышать громкость не только до 100, но и дальше! Нам нужно установить два набора ограничений:

Глава 7. Объект типа Sound

• громкость не может быть больше 100 и меньше 0;

• баланс не может быть больше 100 и меньше —100.

10. Выделите кадр 1 слоя actions и вставьте код, выделенный жирным шрифтом, чтобы ActionScript для кадра 1 выглядел так:

MySound = newSound(); mySound. attachSound ("music"); mySound. start();

This. updatemc. onRelease = function)) {

If (volumeChange>100) {

VolumeChange = 100;

}

If (volumeChange<0) {

VolumeChange = 0;

}

If (panChange>100) { panChange = 100;

}

If (panChange<-100) {

PanChange

}

MySound. setPan(panChange); mySound. setVolume(volumeChange);

};

Смысл нового кода простой: «если пользователь вводит значения громкости или баланса, выходящие за установленные пределы, уста­новить соответствующее предельное значение».

11. Проверьте фильм, попробуйте изменять параметры объекта Sound, пользуясь кнопками.

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

12. Сохраните фильм и закройте его.

Звук и видео в «свободном плавании»

Последнее упражнение показало некоторые возможности манипулиро­вания звуком при помощи ActioScript. Однако хотя мы определили наше маленькое приложение как динамическое, в одном отношении оно было

Нединамическим — оно зависело от ввода информации пользователем. В следующем упражнении мы покажем, как создать более «самостоя­тельное» приложение.

Использование SetVolume

Мы собираемся использовать метод setVolume и создать звукозапись, громкость которой будет «плавать» во время воспроизведения.

1. Откройте новый фильм Flash и импортируйте не слишком длинный звуковой файл. Я йо-прежнему буду использовать train_exc. mp3, a вы можете взять все, что угодно.

2. Щелкните правой кнопкой на звуковом файле в Библиотеке (Library), выберите в меню команду Связь (Linkage…) — откроется окно Свой­ства связи (Linkage Properties).

3. Установите флажок Экспорт для ActionScript (ExportforActionScript), в поле Название (Identifier) укажите имя связи «fluxer».

4. Для управления этим звуком понадобится ActionScript. Переименуй­те имеющийся на монтажном столе слой в «actions», в кадр 1 добавь­те следующий код:

Speed =

VolumeChange = 100;

VoIumeAdd = speed; mySound = new Sound (); mySound. attachSound ("fluxer"); mySound. start ();

В первых трех строчках инициализируются переменные для фильма:

• speed — число, на которое изменяется значение громкости за один шаг;

• VolumeChange — на старте фильма устанавливает громкость на 100. В дальнейшем по ходу фильма в этой переменной содержит­ся значение уровня громкости;

• VolumeAdd — реальноезначение, добавляемое (или вычитаемое) к громкости на каждом шаге.

Остальная часть кода вам знакома. Создается объект типа Sound, бе­рется звуковой файл с именем связи fluxer и начинается его воспро­изведение.

5. Теперь добавьте такую строку:

CreateEmptyMovieCIip ("me", 1);

В рабочей области создается пустой фильм-символ, ему присваива­ется имя копии (идентификатор) тс. Это то же самое, что создать обычный фильм-символ во Flash, только здесь мы это сделали при помощи ActionScript.

6. Продолжаем и добавляем следующий код:

Mc. onEnterFrame = function () { if (VoIumeChange >= 100) {

VoIumeAdd = — speed;

1

If (volumeChange <= 0) { volumeAdd = speed;

}

VolumeChange += volumeAdd; mySound. setVolume (VoIumeChange);

};

Первая строка: пустой фильм-символ с именем тс используется, что­бы создать событие, происходящее в каждом кадре. Код, который об­рабатывается в каждом кадре, заключен в фигурные скобки.

Оператор if проверяет, не достигла ли громкость максимума или ми­нимума. Если это так, то знак переменной volumeAdd изменяется на противоположный, в результате чего громкость постоянно то взлета­ет, то падает («плавает»).

В последней секции, после оператора if, происходят две вещи: значе­ние переменной VolumeChange обновляется, затем она используется для установления соответствующей громкости звука.

7. Что ж, не знаю, все ли вы поняли; в любом случае, проверьте фильм. Возможно, все станет понятнее, когда вы это услышите. Громкость непрерывно изменяется от максимума до минимума и обратно:

volume

Ес.<\и вам кажется, что «волны» слишком медленные, попробуйте увели­чить значение переменной скорости, и вы сразу почувствуете резуль­тат. Из этого вы легко сможете сделать эффект плавающей панорамы, когда звук «уходит» то в левый канал, то в правый. Все, что для этого нужно — изменить значение минимума в операторе if: -100 вместо 0, а также заменить последнюю строку на mySound. setPan (volumeChange);.

Кроме того, неплохо было бы дать переменным более точные имена, такие, как panChange и panAdd, это я оставляю на ваше усмотрение. Если будете тестировать этот эффект плавающей панорамы, не за­будьте расставить пошире колонки.

А теперь пойдем еще дальше и оживим наш плавающий звук визу­альным элементом — видеоклипом.

Видео «плавает» вместе со звуком

Мы собираемся сделать так, чтобы альфа-фактор нашего видео «плавал» так же, как звук в предыдущем упражнении, от 0% до 100%. При этом мы можем использовать однин те же переменные для управления и зву­ком, и видео.

1. Продолжая работать с тем же самым фильмом, создайте новый фильм-символ (Ctrl + F8) под названием «video».

2. Импортируйте видео файл в фильм-символ video. Я использовал halfpipe. mov, если хотите, скачайте его и вы.

3. Вернувшись на основной монтажный стол, вставьте новый слой под названием «video».

4. Выделив кадр 1 этого слоя, перетащите копию фильма-символа video на основную сцену и присвойте копии имя «myVid»:

5. окончательный вид кода должен быть таким:Теперь вновь откройте панель Действия (Actions) для кадра 1 слоя actions. После последней строки, но внутри фигурных скобок вставьте следующий код:

I 020

I «г Дейплия — Кадр

J Дейстеич Для кадра 1 Имени слоя Actions

————————- M

MyVid. alpha = VolumeChange;

I speed 1;

I vo IunieChange 100;

IvoIumeAdd * speed;

ImySound — new SoundQ; frnySound. attachSound(”fIuxer"); I rnySound. startQ ;

[ 1) ;

I me. OnEnterFrame = Function Q { if (volurneChange>β100) { VOlumeAdd = — speed;

If (voIurneChangeCsG) {

VoluroeAdd = speed;

VolumeChange += Volurneλdd; rnySound. SetVolume (VolurneChange) ; my V id. _ a l p ha volu meC h a nge;

• ■ ‘♦ « ∙ * ∙ Oi « ι>.’-∙∣

HL1CA* w, • `.

6. Конец! Можете протестировать фильм. Теперь ActionScript управля­ет одновременно двумя объектами: видео фильмом-символом и объектом Sound.

7. Сохраните ваш фильм и закройте его.

Мы увидели, какие преимущества дает использование объекта типа

Sound, тем не менее, полностью игнорировать традиционный способ размещения звука на монтажном столе тоже нельзя. Давайте посмот­рим, как синхронизировать звук с видео.

Параметр Position

Если нужно синхронизировать видео со звуком, то лучше всего перене­сти видео во Flash вместе со звуковой дорожкой, в процессе импорта. Если же в какие-то моменты синхронизация теряется, и возникает не­обходимость оптимизировать и обрабатывать звук отдельно, это можно сделать, используя параметр Position Объекта типа Sound.

Параметр position постоянно обновляется в ходе воспроизведения объекта Sound, получить его значение можно таким образом:

WhereltsAt = mySound. position;

Переменная whereltsAt запрашивает объект mySound, где в данный момент находится указатель воспроизведения. Результат возвращается в миллисекундах, поэтому, например, если указатель находится на от­метке 6 секунд, то будет возвращено значение 6000.

В следующем упражнении мы собираемся использовать это свойство в связке с методом Start Объекта типа Sound, передавая ему значение параметра. Неудобство в том, что метод start воспринимает параметр в секундах, поэтому, если мы укажем значение 6000, он поймет это как 1 час 40 минут. Чтобы обойти это и получить значение в секундах, нудно просто разделить число, возвращаемое параметром position, на 1000:

WhereltsAt = mySound. position /1000;

Проблема решена. Переходим к упражнению…

Я и мой звук \

В этом упражнении мы используем отдельные файлы видео и звука, но будем останавливать и запускать их одновременно при помощи ActionScript.

1. Откройте новый фильм Flash и импортируйте достаточно длинный видео клип (я использовал halfpipe. mov — тот же самый файл, что и в предыдущем упражнении). Как обычно, импортируйте видео в но­вый фильм-символ, дайте символу подходящее название.

2. Перетащите копию фильма-символа в рабочую область и дайте ко­пии имя «myVid».

3. Импортируйте достаточно продолжительный звуковой файл (я опять использую train_exc. mp3) и дайте ему имя связи «music».

4. Вставьте новый слой под названием «buttons» и создайте в рабочей области три простые кнопки для воспроизведения, паузы и останов­ки. Можете нарисовать кнопки самостоятельно, а можете сэкономить время, использовав встроенные кнопки Flash, которые можно найти в папке Playback, выполнив команду Окно > Основные библиотеки > Buttons (Window > Common Libraries > Buttons).

Я перетащил себе кнопки gel Stop, gel Right и gel Pause:

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

5. Создайте новый слой под названием «actions» и откройте панель Дей­ствия (Actions) для кадра Введите следующий код:

Playing = true; mySound = new Sound (); mySound. attachSound ("music"); mySound. start (); myVid. play ();

Все это мы уже видели, стандартная инициализация объекта типа Sound, и я не буду повторяться. Единственное новое добавление — в первой строке: это та самая переменная, о которой мы только что го­ворили. Последняя строка кода — указание начать воспроизведение фильма-символа video одновременно со звуком.

6. Выделите кнопку паузы и дайте копии имя «pause_mc». Выделите кадр 1 слоя actions и введите следующий код после имеющегося:

if (playing==true) {
pausepos = (mysound,position)∕1000;
mysound.stop();
myvid.stop();
playing = false;

pause_mc. onPress = function () {

>;

Давайте переведем этот скрипт на обычный русский язык:

Когда на меня, кнопку паузы, нажимают {
если (видео и звук воспроизводятся

(проверяется переменная)), нужно выполнить { поместить в переменную pausePos текущую позицию

Звука, деленную на 1000 остановить воспроизведение звука остановить видео

Изменить значение переменной playing на «видео *→ho воспроизводится»

Вообще-то это никакая не пауза, а чистейшее надувательство. На са­мом деле кнопка останавливает звук и сбрасывает на начало, тогда как видео действительно только приостанавливается (командой stop ). Прежде, чем сбросить звук, запоминается текущая позиция, делится на 1000, чтобы получить значение в секундах.

7. Возможно, вас удивляет, почему мы так хлопочем об этом, но сейчас вы все поймете. Выделите кнопку воспроизведения и присвойте ко­’ пии имя «р1ау_тс». Добавьте к предыдущему коду следующий (в кад­ре 1 слоя actions):

if (playing==false) {
 (pausepos);

playmc. onPress=function () {

Это переводится так:

Когда на меня нажмут {

Если (видео не воспроизводятся), нужно выполнить { Запустить звук с сохраненной позиции Возобновить воспроизведение видео Изменить значение переменной playing на «видео ■ воспроизводится»

}

};

На предыдущем шаге мы сохранили позицию, в которой мы остано­вили музыку, в переменной pausePos. Теперь, когда пользователь за­хотел продолжить просмотр, мы можем запустить звук с того же ме­ста, где он был остановлен.

8. Выделите кнопку остановки и присвойте копии имя «stop_mc». До­бавьте к предыдущему коду следующий:

Stop_mc. onPress = function () { mySound. stop(); myVιd. gotoAndStop (1); pausePos = 0; playing = true;

};

Скрипт полностью останавливает звук, но на сей раз позиция Не со­храняется. Затем отправляет видео на кадр 1 и там останавливает. Далее переменной pausePos присваивается 0. Это сделано потому, что кнопка воспроизведения всегда запускает звук с сохраненной пози­ции. Наконец, скрипт изменяет значение переменной playing на false. Если пользователь нажмет кнопку воспроизведения теперь, и видео, и звук будут запущены с начала.

9. Проверьте фильм. Единственной проблемой может оказаться то, что ваш видео файлдлиннее, чем звукозапись. Чтобы исправить это, зву­ковой файл можно зациклить. Для этого просто добавьте две строчки в последний кадр вашего фильма-символа video:

J∙oot. mySound. stop();

GotoA∩dStop(1);

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

Не прекращать до OnSoundComplete

Событие onSoundComplete — еще один образчик Action Script, который поможет синхронизировать звук и видео. Это событие — новинка Flash MX. Как видно из его имени, событие происходит, когда воспроизведе­ние объекта типа Sound завершено. Код самую малость посложнее, чем мы видели до сих пор:

MySound. onSoundComplete = function () {

)

Проверяется, закончено ли воспроизведение mySound, и если это так,

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

В следующем упражнении мы создадим потоковый МРЗ-проигрыва — тель, показывающий различные видеоролики для каждого аудио трека. При этом мы используем событие onSoundComplete как переключатель, меняющий видеоролики.

Просто, как MP3

В этом упражнении мы динамически вызываем в наш Flash-фильм два музыкальных файла МРЗ. Если хотите следовать моему примеру в точ­ности, эти два трека можно скачать на сайте Www. friendsofed. com. Они называются recordsback. mp3 и nowewon. mp3. «Весят» они 2 и 2,5 MB соответственно, так что, если соединение у вас медленное, используйте свои МРЗ-файлы.

Здесь будет довольно много ActionScript, но мы все рассмотрим от­дельными блоками.

1 — Откройте новый фильм и импортируйте два видеоклипа, звук вместе с ними не импортируйте. Я использовал cross_ramps. mov и halfpipe. mov. Как обычно, не забудьте поместить каждый видеоро­лик в отдельный фильм-символ.

2. На основной монтажный стол вставьте два новых слоя — «video 1» и «video?», и перетащите каждый фильм-символ в свой собственный слой.

3. Выделите кадр 1 слоя video 1 и перетащите его в кадр 2, затем выдели­те кадр 1 слоя video2 и перетащите в кадр 3. Ваш монтажный стол теперь должен выглядеть так:

Фильм МРЗ-файлов. Кроме того, мы зациклим каждый видеоклип до конца первого аудио трека, а затем, когда стартует следующий MP3, начнем воспроизводить второй видеоклип.

4. Переименуйте Слой 1 (Layer 1) в «actions», выделите кадр 1 и открой­те панель Действия (Actions). Внимательно введите следующий код:

I=1;

SongArray = new Array ();

SongArray [0] = "recordback. mp3"; songArray [1] = "nowewon. mp3"; songCount = SongArrayJenght;

Первым делом мы инициализируем переменную i. В ней будет хра­ниться номер песни, проигрываемой в данный момент.

Далее мы создаем массив из названий песен. Скрипт во второй стро­ке создает новый массив, две следующие строки заполняют ячейки массива названиями песен. Если вас удивляет, что наш список начи­нается с 0, а не с 1, ну… привыкайте, нумерация массивов всегда на­чинается с 0.

Массивы в чем-то схожи с переменными, они тоже хранят информа­цию, но не один элемент данных, а несколько. Можете сравнить мас­сив со списком покупок, вы приходите в магазин и смотрите: «что у нас первое по списку? «что у нас дальше по списку?

А переменные хранят всего один элемент информации, как если бы вместо общего списка вы пришли в магазин с кучей отдельных бума­жек, на каждой из которых записана одна покупка: что у меня там значится на желтоватой бумажке — нет, не на этой, на другой жел­той бумажке!»

Вернемся к массиву в нашем скрипте. Вы можете добавить МРЗ-фай — лы, просто продолжая список. Если вам понадобился третий трек, про­сто вставьте строку:

SongArray [2] = "myThirdTrack. mp3";

,. .и так далее. Последняя строка кода сохраняет количество заполнен­ных ячеек массива. В данном случае переменная SongCount содер­жит число 2.

Как виДите, в скрипте указаны имена файлов, используемых в нашем примере. Если вы используете собственные файлы, замените названия в скрипте именами своих файлов, заключенными в кавычки.

5. Добавьте в скрипт следующие две строки:

MySound = new Sound (); mySound. loadSound (songArray [i-1 ], true];

Первая строка нам знакома: инициализация объекта типа Sound. Во второй строке с помощью метода IoadSound привлекается звуковой МРЗ-файл. Прежде мы использовали только attachSound, но, как ра­нее упоминалось, мы можем динамически вызывать внешние МРЗ файлы для использования во Flash MX. Метод loadSound имеет сле­дующие параметры:

MySound. loadSound (<URL∕ имя файла>, <флаг потоковой передачи>);

Если флаг потока имеет значение true, происходит потоковая пере­дача МРЗ-файла в фильм, если же false — МРЗ импортируется как звуковое событие. В данном упражнении мы будем использовать по­ток, поэтому в нашем коде установлен флаг true.

6. Следующая секция кода. Введите следующее:

MySound. onSoundComplete = function () { i++;

If (i>songCount) {

H;

}

Первую строку мы уже видели, здесь проверяется, завершено ли вос­произведение звука, при помощи события OnSoundComplete. Если звукозапись закончилась, Flash выполняет инструкции, заключенные в фигурные скобки. Инструкции у нас таковы:

По окончании песни нам нужно увеличить нашу переменную-счет­чик, i. Вторая строка кода — это сокращенный эквивалент выраже­ния i = i + 1.

В третьей строке значение счетчика i проверяется и, если оно превы­шает реальное количество песен (хранящееся в songCount), то счет­чик сбрасывается опять на — таким образом, наш список МРЗ за­цикливается, возвращаясь к первой песне.

7. Теперь введите последнюю порцию кода:

MySound. IoadSound (soπgArray [i-1], true); gotoAndPlay (i+1);

};

Первая строчка — уже знакомая нам загрузка МРЗ-файла, исполь­зуя информацию из списка songArray. He удивляйтесь выражению [i-l], — компьютер считает с 0, помните?

Вторая строка отсылает основной монтажный стол к следующему кад­ру, чтобы начать показ следующего видеоклипа. Здесь мы использу­ем i + поскольку наши клипы находятся в кадрах 2 и 3.

8. Последнее, что осталось здесь сделать — вставить действие stop в кадры 2 и 3 слоя actions:

9. Прежде, чем тестировать фильм, нужно сделать еще кое-что. Оты­щите у себя на жестком диске МРЗ-файлы, используемые в этом уп­ражнении, и поместите в ту папку, где находится FLA. Теперь сохра­ните фильм Flash как mp3_player, fla в той же папке, где находятся ваши МРЗ. Это важно — если они окажутся в разных папках, Flash не сможет их найти, когда вы будете проверять фильм.

Постарайтесь избегать употребления в именах файлов служебных сим­волов (таких, как пробелы и слэши). При необходимости используйте Знак подчеркивания или Дефис, это поможет избежать ошибок в ActionScript.

10. А теперь протестируйте фильм.

Первый видеоклип воспроизводится циклически, пока проигрывает­ся первый трек, а затем Flash одновременно запускает следующий трек и следующий видеоклип. Смена не самая плавная, но это из-за загрузки МРЗ-файлов. Если вы хотите синхронизировать звук с ви­део (то есть, сделать не просто МРЗ-проигрыватель), тогда лучше им­портировать звуковой файл в Библиотеку и использовать метод attachSound, чтобы минимизировать паузу между треками.

Конечно, наше МРЗ приложение не самое изощренное, но его отно­сительно просто создать и очень легко содержать: не требуется много труда, чтобы добавить в него больше звуковых треков и видеоклипов, и наше приложение может совершенно спокойно воспроизводить целую папку МРЗ-файлов. Если хотите обогатить его видео элементами, мож­но создать отдельные Flash-фильмы для каждого видеоклипа и, при по­мощи ActionScript загружать эти внешние SWF-файлы в основной фильм по мере надобности.

Еще можно использовать возможности ActionScript для расцвечива­ния или искажения видео изображений. Можно добавить несколько кнопок, чтобы пользователь мог «пролистать» треки или видеоклипы и найти то, что ему нужно. В общем, полная свобода творчества, экспери­ментируйте.

Заключение

В этой главе мы рассмотрели различные способы использования звука во Flash, узнали, как можно использовать внешние звуковые файлы и связать их с видео при помощи ActionScript. Мы выяснили, когда выгод­нее динамически вызывать МРЗ-файлы, а когда лучше импортировать звуковое сопровождение вместе с видео. Мы узнали также, что импор­тирование звука во Flash отдельно от видео дает нам более полный кон­троль над звукозаписью; как в этом случае посредством ActionScript син­хронизировать звук с монтажным столом видео.

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

Эта глава завершает первый и самый важный раздел нашей книги. Теперь, если вы внимательно изучили его, вы обладаете всеми навыка­ми, необходимыми для создания Flash-презентаций. Однако не спеши­те закрыть книгу, следующий раздел — о том, как применить все эти навыки вместе и создать настоящий сетевой или локальный проект…

ГЛАВА

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *