Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Окончание воспроизведения звука

Поиск

 

Загрузка внешнего содержимого

Методические указания к лабораторной работе

 

1. Загрузка внешних звуковых файлов

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

Например, сайт, написанный на Flash может быть озвучен, но чтобы не делать его слишком тяжеловесным для пользователя, разработчик может предложить ему самостоятельно выбрать, загружать звук или нет. Другой пример – презентация со встроенным музыкальным объемом. Даже если сжать звук до минимально приемлемого качества, объем звукового файла может быть достаточно большим. Если же в презентации должно прозвучать несколько композиций, желательно не встраивать их библиотеку (это, ко всему прочему, осложняет отладку презентации), а загружать при необходимости с диска.

В ActionScript 3.0 встроены следующие классы работы со звуком (все они входят в библиотеку flash.media).

1. Sound – позволяет загрузить звук из библиотеки или извне, управлять основными свойствами звука и запускать его на воспроизведение.

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

3. SoundTransform. Объект этого класса позволит задать звуковую трансформацию для отдельного канала, микрофона или всех звуков во flash-фильме, а именно – изменить громкость или панорамирование звука.

4. SoundMixer. Этот класс управляет одновременно всеми звуками (всеми объектами класса) во flash-фильме.

5. ID3Info. объект этого класса содержит все метаданные, которые могут храниться в MP3-файле (имя исполнителя, название композиции, год выпуска и т.д.). Подобная информация хранится в ID3-тегах, которые являются частью mp3-файла и могут быть заполнены во многих mp3-плеерах (например, в программах WinAMP и AIMP).

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

 

Загрузка внешнего mp3-файла

Загрузить внешний MP3-файл можно при помощи метода load класса Sound:

snd.load(url, context);

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

url – обязательный параметр - объект класса URLRequest, представляющий собой гиперссылку на MP3-файл. Адрес в гиперссылке может быть как относительным, так и абсолютным;

context – необязательный параметр - объект класса SoundLoaderContext, хранящий минимальное количество миллисекунд, которые должны быть загружены в буфер до того, как начнется воспроизведение загруженного звука. По умолчанию значение этого параметра равно null, это соответствует значению 1000 миллисекунд (то есть одна секунде).

Примеры создания объектов – относительных и абсолютных гиперссылок. Обратите внимание, что класс URLRequest импортируется из библиотеки flash.net.

Относительные ссылки:

import flash.net.URLRequest;

 

var req:URLRequest = new URLRequest("sound1.mp3");

или

var req:URLRequest = new URLRequest("music/sound1.mp3");

 

В первом случае звук должен находиться в том же каталоге что и Flash-приложение, загружающее его. Или должен находиться в том же каталоге на сервере. Во втором случае звук находится в подкаталоге «music» того каталога, в котором находится Flash-приложение.

 

Примеры использования абсолютных адресов:

import flash.net.URLRequest;

 

var req:URLRequest =

      new URLRequest (“http://www.music.com/samples/sound.mp3”);

или

var req:URLRequest = new URLRequest (“ftp://ftp.rsreu.ru/music/sound.mp3”);

или

var req:URLRequest = new URLRequest (“file:///D:/music/sound.mp3”);

 

При использовании абсолютного адреса обязательно нужно указывать протокол. В примерах указаны протоколы http://, ftp:// и file:///. Последний ставится перед полным адресом файла, расположенного на локальном диске.

 

Примеры использования метода load:

1. Загрузка внешнего звука с размером буфера равным одной секунде.

import flash.net.URLRequest;

import flash.media.Sound;

var req:URLRequest = new URLRequest("sound1.mp3");

var snd : Sound = new Sound();

snd.load(req);

 

2. Загрузка внешнего звука с размером буфера, равным пяти секундам.

import flash.net.URLRequest;

import flash.media.Sound;

import flash.media.SoundLoaderContext;

 

var req:URLRequest = new URLRequest("sound1.mp3");

var context : SoundLoaderContext = new SoundLoaderContext(5000);

var snd : Sound = new Sound();

snd.load(req, context);

 

Чтобы использовать класс SoundLoaderContext, его нужно импортировать в программу. При инициализации объекта этого класса в функцию-конструктор передается число миллисекунд, соответствующее размеру буфера. В примере используется значение 5000 миллисекунд (то есть 5 секунд). Созданный объект класса SoundLoaderContext передан в качестве второго параметра в метод load.

 

Запуск звука на проигрывание

Метод play() класса Sound начинает воспроизведение звука и имеет следующий синтаксис:

snd.play(offset, loop, transform)

Здесь snd - объект класса Sound.

offset – необязательный параметр, определяющий, с какой миллисекунды должно начаться воспроизведение звука (по умолчанию используется значение ноль, то есть звуки проигрываются с самого начала).

loop – необязательный параметр, задающий, сколько раз подряд должен быть прокручен звук. Многократное воспроизведение небольшого музыкального фрагмента можно использовать для создания фона для сайта или игры. В этом случае, чтобы звук неожиданно не оборвался, в качестве параметра loop нужно передать очень большое число (например, 100 000). Значение по умолчанию – ноль.

transform – объект класса SoundTransform, задающий трансформацию, которая будет применена к звуку. Значение по умолчанию – null, то есть трансформация не применяется.

Метод play() имеет возвращаемое значение – объект класса SoundChannel, то есть звуковой поток, связанный с текущим воспроизводимым звуком.

Примеры:

3. Запуск звука начиная с 10-йсекунды (snd ранее созданный объект класса Sound, в который уже загружен звук):

snd.play(10000);

 

4. Циклическое воспроизведение звука:

snd.play(0, 10000);

 

Работу с объектом класса SoundTransform рассмотрим позже в этой работе.

 

Свойства звука и звукового канала

Как было сказано ранее, для каждого воспроизводимого звука создается отдельный звуковой канал, который представляет собой объект класса SoundChannel. Рассмотрим свойства этого класса.

1. leftPeak и rightPeak имеют тип Number и доступны только для чтения. Возвращают уровень громкости в левом и правом каналах соответственно. Возможные значения – от нуля (тишина) до 1 (полная громкость).

2. position – это свойство тоже доступно только для чтения и имеет тип Number. Это количество миллисекунд, прошедших с начала воспроизведения звука до текущего момента

3. soundTransform – объект класса SoundTransform, связанный с конкретным каналом.

 

Класс имеет единственный метод stop(), останавливающий воспроизведение звука в канале.

Пример 5. Звук начнет воспроизводиться после запуска фильма и будет остановлен при щелчке по клипу sStop.

 

import flash.net.URLRequest;

import flash.media.Sound;

import flash.media.SoundLoaderContext;

import flash.media.SoundChannel;

 

var req:URLRequest = new URLRequest("sound1.mp3");

var context : SoundLoaderContext = new SoundLoaderContext(5000);

 

var snd : Sound = new Sound();

snd.load(req, context);

 

var channel : SoundChannel = snd.play();

 

 

sStop.addEventListener(MouseEvent.CLICK, sstopClick);

 

function sstopClick(_event:MouseEvent)

{

channel.stop();

}

 

Все используемые классы импортированы из собственных библиотек с использованием директивы import. В отличие от предыдущих примеров, здесь мы сохранили в объекте channel ссылку на звуковой канал, созданный для загруженного звука. И хотя channel – это объект (класса SoundChannel), здесь нет необходимости проводить отдельную инициализацию этого объекта (с использованием оператора new и функции-конструктора класса), поскольку возвращаемое методом load значение уже проинициализировано.

Объект channel используется для того, чтобы остановить воспроизведение звука в канале при щелчке по клипу sStop (см. тело функции-листенера).

 

Класс Sound так же имеет ряд свойств, относящихся к звуковому файлу, загруженному в объект этого класса:

- length – длина звука в миллисекундах. Свойство доступно только дял чтения, попытка его переопределить окажется неуспешной;

- url – строка, содержащая адрес гиперссылки, откуда был загружен звуковой файл. Свойство доступно только для чтения. Если звук загружен из библиотеки, то значение этого свойства равно null;

- id3 – указатель на объект класса ID3Info, содержащий метаинформацию о звуковом файле. Свойство доступно только для чтения.

 

Задание трансформации для звука

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

1. leftToRight и leftToLeft - число в промежутке от нуля до единицы, соответствующее громкости, с которой воспроизводится левый канал в правой и левой колонках соответственно. Число 0 соответствует минимальной громкости, 1 – максимальной.

2. rightToRightи rightToLeft – то же самое, но для правого канала.

3. pan – этот параметр управляет панорамированием (балансом) звука. Возможные значения расположены на интервале от -1 (звук воспроизводится только в левой колонке) до 1 (звук воспроизводится только в правой колонке). По умолчанию значение этого параметра равно нулю (звук сбалансирован).

4. volume – громкость звука. Значение этого свойства – число в промежутке от 0 (полная тишина) до 1 (максимальная громкость). По умолчанию значение этого свойства равно 1.

 

Конструктор этого класса имеет только два параметра: в качестве первого передается громкость звука, а в качестве второго – значение параметра pan. Синтаксис:

SoundTransform(vol:Number = 1, panning:Number = 0)

 

По умолчанию для громкости используется значение 1, а для панормамирования – 0.

 

Примеры создания объектов трансформации для звука

6.

import flash.media.SoundTransform;

var transf : SoundTransform = new SoundTransform();

 

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

 

7.

import flash.media.SoundTransform;

var transf : SoundTransform = new SoundTransform(0.5);

После выполнения этого кода будет создан объект SoundTransform с уровнем громкости 50%, и сбалансированным между колонками звуком. Второй параметр не указываем, так как используется его значение по умолчанию.

 

8.

import flash.media.SoundTransform;

var transf : SoundTransform = new SoundTransform();

transf.leftToRight = 0.5;

transf.rightToLeft = 0.5;

Звуковая трансформация будет следующей: уровень громкости – 100%, звук сбалансирован, но громкость левого канала в правой колонке и правого канала в левой колонке будет составлять 50% от максимальной.

 

Применение звуковой трансформации

Применим звуковую трансформацию к звуку, загруженному в объект snd класса Sound в примере 5. В этом примере ссылка на объект – звуковой канал была сохранена в объекте channel. Чтобы применить звуковую трансформацию из примера 8 к этому звуковому каналу, нужно выполнить следующий код:

channel.soundTransform = transf;

 

Объект channel – это объект класса SoundChannel, соответствующего звуковому каналу. Свойство soundTransform этого класса может иметь в качестве своего значения объект класса SoundTransform, хранящий информацию о применяемой к каналу звуковой трансформации.

 

Чтобы применить одну и ту же трансформацию для всех звуков, воспроизводимых в окне flash-плеера одновременно, нужно задействовать класс SoundMixer. Объект этого класса объявлять не нужно.

 

Пример 9. Применение громкости 50% ко всем звукам.

 

import flash.media.SoundTransform;

import flash.media.SoundMixer;

 

SoundMixer.soundTransform = new SoundTransform(0.5);

 

Обработка событий, связанных со звуком

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

1. Окончание загрузки звука

Когда звук полностью загружен, для объекта класса Sound генерируется событие complete. Это событие относится к событийному классу Event.

Пример 10. Обработка события окончания загрузки звука. Звук начнет воспроизводиться только после того, как будет загружен полностью.

 

import flash.net.URLRequest;

import flash.media.Sound;

 

var req:URLRequest = new URLRequest("sound1.mp3");

var snd : Sound = new Sound();

snd.load(req);

 

snd.addEventListener(Event.COMPLETE, sndLoadComplete);

 

function sndLoadComplete(_event : Event)

{

trace("Загрузка звука завершена");

(_event.target as Sound).play();

}

 

Метод addEventListener объявил функцию sndLoadComplete листенером события Event.COMPLETE (в данном случае это событие соответствует окончанию загрузки звукового файла). Внутри этого обработчика события объект, вызвавший событие приводится к типу Sound, и после этого звук запускается на воспроизведение при помощи метода play.

 

Обрабатывать это событие нужно, например, при создании mp3-плеера: как только воспроизведение одного звука закончится, можно будет начать воспроизведение следующего звука.

Событие, связанное с окончанием проигрывания (Event.SOUND_COMPLETE), относится не к классу Sound, а к классу SoundChannel – звуковому каналу.

Пример 11. После завершения воспроизведения звукового файла выводится соответствующее сообщение.

 

import flash.net.URLRequest;

import flash.media.Sound;

import flash.media.SoundChannel;

 

var req:URLRequest = new URLRequest("sound1.mp3");

var snd : Sound = new Sound();

snd.load(req);                  // загрузка звука

var channel:SoundChannel = snd.play(); // запускаем звук на копирование

                                // сохраняем ссылку на звуковой канал

// добавление листенера окончания воспроизведения звука в звуковом канале

channel.addEventListener(Event.SOUND_COMPLETE, playComplete);

 

function playComplete(_event:Event)

{

trace("Воспроизведение завершено");

}

 



Поделиться:


Последнее изменение этой страницы: 2024-06-17; просмотров: 6; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.26.141 (0.008 с.)