Окончание загрузки метаинформации о файле

Окончание загрузки метаинформации о файле

Когда вся информация из id3-тегов прочитана, генерируется событие id3 для объекта класса Sound. Это событие так же относится к классу Event, в методе addEventListener это событие можно указать как Event.ID3. Как только информация из id3-тегов считана, ее можно вывести пользователю (см. следующий раздел).

Чтение метаинформации о файле

MP3-файлы, в отличие от WAV- или MIDI-звуков, содержат дополнительные элементы, служащие для хранения описательной информации. Эти элементы называются ID3-тегами (ID3 tags).

В ActionScript 3.0 в классе Sound описано свойство id3, а так же добавлено событие, происходящее по завершении загрузки ID3-тегов. Flash-плеер версий 9 и выше поддерживает по Окончание загрузки метаинформации о файле крайней мере ID3-теги версии 2 (спецификации 2.3 и 2.4).

ID3-теги первой версии довольно существенно отличаются от ID3-тегов второй версии.

Во-первых, ID3-тегов первой версии гораздо меньше - всего 7 (первоначально для них выделялось всего 128 байтов). Время показало, что на практике зачастую требуется более обстоятельная информация о звуке, чем имя исполнителя или название альбома. Так появились ID3-теги второй версии, полное количество которых составляет несколько десятков (Flash-плейер считывает не все из них, а только общепризнанные).

Во-вторых, ID3-теги разных версий различаются тем, где они хранятся в MP3-файле. ID3-теги первой версии записываются в самый конец файла, а второй — в Окончание загрузки метаинформации о файле начало. Это различие кажется второстепенным. На самом же деле то, где в файле хранится описательная информация, на практике может оказаться очень важным. Представьте, например, что вы проигрываете MP3-звук в потоковом режиме. Если в нем используются ID3-теги второй версии, то описание станет доступным в самом начале загрузки. В результате будет возможно создать нечто вроде титров, в которых будут приводиться основные сведения о прослушиваемой композиции. Если же в MP3-файле прописаны только ID3-теги первой версии, то воспользоваться содержащейся в них информацией можно будет только по окончании загрузки. Но в случае потокового режима импортирования это уже будет бессмысленно, так Окончание загрузки метаинформации о файле как звук, проигравшись, просто удалится из памяти.

Список лишь некоторых ID3-тегов (первой и второй версий), которые поддерживает Flash-плеер, приведен в таблице

Тег Версия Описание Тег Версия Описание
album Название альбома TALB Название альбома
artist Имя исполнителя TOPE Первый исполнитель
comment Комментарий COMM Комментарий
genre Жанр (кодируется номе- ром) TCON Характеристика жанра
songname Название песни TIT1 Название каталога
track Номер дорожки TIT2 Название песни
year Год записи TIT3 Подзаголовок
TYER Год записи
TRCK Номер дорожки
TPUB Издатель
TCOM Композитор
TLAN Язык исполнения
TOAL Название исходного альбома
TPUB Издательство

Почти наверняка на практике вам придется работать лишь с тремя-пятью основными.

Если Окончание загрузки метаинформации о файле в проекте будет считываться информация из ID3-тегов, то стоит убедиться, что необходимые теги в MP3-файлах заполнены. Если же какие-то теги окажутся пустыми, то стоит заполнить их самостоятельно. Существуют специальные программы, которые дают возможность редактировать ID3-теги. Большинство mp3-плееров так же позволяют заполнять поля информации о звуковом файле.



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

- artist – имя исполнителя;

- songName– название песни;

- album – название альбома;

- genre – характеристика жанра;

- year – год записи;

- comment – комментарий;

- track – номер дорожки в альбоме.

Если snd – это объект класса Sound, в который загружен mp3-файл Окончание загрузки метаинформации о файле, то получить имя исполнителя из ID3-тегов можно следующим образом:

snd.id3.artist

К остальным полям ID3-тегов можно обращаться по из непосредственным именам, например,

snd.id3.TLAN

Если MP3-файл содержит ID3-теги, то плеер автоматически их распознает и сохраняет в свойстве id3, имеющееся у любого объекта класса Sound. Например, тег TYER даст свойство id3.year, тег TLAN — свойство id3.TLAN и т. д. У объекта id3 есть только те свойства, для которых есть заполненные теги.

Пример 12. На рабочем листе создается компонент – надпись. В него заносится имя исполнителя и название композиции, прочитанное из ID3-тегов. Чтобы пример правильно работал, в библиотеке проекта Окончание загрузки метаинформации о файле должен находиться компонент Label. Вначале программы импортируются все необходимые классы.

import flash.net.URLRequest;

import flash.media.Sound;

import flash.media.ID3Info;

import fl.controls.Label;

import flash.text.TextFieldAutoSize;

var req:URLRequest = new URLRequest("sound1.mp3"); // гиперссылка

var snd : Sound = new Sound(); // объект-звук

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

snd.play(); // воспроизведение

// создание надписи

var info:Label = new Label();

// перемещение в новые координаты

info.x = 10;

info.y = 10;

// тип автоматического изменения размеров

info.autoSize = TextFieldAutoSize.LEFT;

addChild(info); // добавление надписи в список отображения

snd.addEventListener(Event.ID3, id3LoadComplete);

//функция-обработчик события окончания чтения метаинформации из id3-тегов

function id3LoadComplete(_event:Event)

{

var id Окончание загрузки метаинформации о файле3:ID3Info = _event.target.id3;

// вывод информации на надпись

info.text = id3.artist+" "+id3.songName;

}

2. Загрузка внешних файлов изображений и swf-файлов

Загружать подобные файлы с диска можно при помощи объекта UILoader.

В окне Component Inspector можно задать следующие настройки экземпляра компонента UILoader:

source –это абсолютная или относительная ссылка на внешний файл формата SWF, JPEG, GIF или PNG илши ссылка на объект списка отображения, в частности – имя клипа. Значение по умолчанию – null;

autoLoad – это логическое свойство, принимающее значение true (по умолчанию) или false. Если задать свойству значение true, то внешнее содержимое начнет сразу закачиваться в экземпляр компонента UILoader после задания свойства source. Если Окончание загрузки метаинформации о файле задать свойству значение false, то содержимое начнет закачиваться только после выполнения команды load();

scaleContent – это тоже логическое свойство, задающее способ масштабирования компонента. Если scaleContent = true (по умолчанию), то загружаемое содержимое будет масштабироваться по размеру экземпляра компонента UILoader, если же scaleContent = false, то сам экземпляр компонента будет масштабироваться по размеру внешнего загружаемого файла. Последнее может быть нежелательным;

maintainAspectRatio – логический параметр. Значение по умолчанию – true соответствует такому режиму загрузки, при котором при любом масштабировании загружаемое содержимое будет сохранять свои пропорции. Если значение этого свойства равно false, то загружаемое содержимое будет масштабировать точно по размерам экземпляра компонента UILoader, следовательно, пропорции этого swf-фильма Окончание загрузки метаинформации о файле или изображения могут быть искажены;

enabled – значение этого свойства рассматривалось неоднократно для других компонентов.

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

loader.source = pname;

loader.load();

где loader – это имя экземпляра компонента UILoader, а pname – это строка, содержащая адрес файла формата SWF или JPEG.

Пример. Небольшой каталог изображений. Все изображения находятся в том же каталоге, где и swf-файл, в подкаталоге images. Изображения имеют имена cat_01.jpg, cat_02, jpg, …, cat_17.jpg.

На рабочем листе размещен экземпляр компонента UILoader, которому задан размер 530 на 380. В Окончание загрузки метаинформации о файле окне Component Inspector экземпляру компонента было дано имя loader и заданы следующие свойства: autoLoad = false, scaleContent = true, поле contentPath оставлено пустым. Рядом расположены две кнопки, осуществляющие переход между изображениями. Им даны имена prev (кнопка перехода к предыдущему изображению) next (кнопка перехода к следующему изображению).

Вначале определим две константы:

var index : int = 1;

var maxPictures:int = 17;

index – это номер текущего просматриваемого изображения, maxPictures – это максимально возможное количество изображений (у нас их 17 штук).

Теперь определим код обработчиков события нажатия кнопок:

bPrev.addEventListener(MouseEvent.CLICK, prevClick);

bNext.addEventListener(MouseEvent.CLICK, nextClick);

// Обработчик события нажатия кнопки перехода к следующему изображению

function nextClick(_event:MouseEvent)

{

LoadPicture(index);

if Окончание загрузки метаинформации о файле (index < maxPictures)

index++;

else bNext.enabled = false;

bPrev.enabled = true;

}

// Обработчик события нажатия кнопки перехода к следующему изображению

function prevClick(_event:MouseEvent)

{

LoadPicture(index);

if (index >1)

index--;

else bPrev.enabled = false;

bNext.enabled = true;

}

LoadPicture(index) – это наша пользовательская функция, осуществляющая загрузку изображения с номером index в экземпляр компонента UILoader.

После вызова функции LoadPicture осуществляется изменение номера изображения для того, чтобы при последующем нажатии на кнопку перейти к другому изображению. При этом номер изображения не превышает максимального количества изображения и не опускается до 0 и ниже. Если же мы подходим к последнему или первому изображению (index = maxPictures или index = 1), то соответствующая кнопка Окончание загрузки метаинформации о файле блокируется (свойству enabled соответствующей кнопки присваивается значение false).

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

Теперь рассмотрим код функции LoadPicture:

function LoadPicture(n : Number)

{

var pname : String;

if (n < 10)

pname = "images/cat_0" + n + ".jpg";

else

pname = "images/cat_" + n + ".jpg";

loader.source = pname;

loader.load();

}

В первых 5-ти строчках Окончание загрузки метаинформации о файле осуществляется задание относительного имени файла на основе известного номера файла, передаваемого в функцию в качестве параметра. Если номер файла меньше 10, то images/cat_0N, где N – это номер файла. Если же номер файла двузначен (N >= 10), то имя файла будет выглядеть как images/cat_N

В последних двух строчках функции задается путь к файлу и осуществляется его загрузка в экземпляр компонента UILoader.

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

Задание

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

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

Содержимое галереи определяется согласно варианту. Вариант задания определяется по номеру в списке.

Номер варианта Задание
Четные Создать каталог изображений на основе компонента Loader
Нечетные Создать несколько отдельных SWF-файлов с анимацией (сцен) и создать к ним просмотрщик – SWF-файл с кнопками перехода между сценами и компонентом Loader.


documentamfjjnd.html
documentamfjqxl.html
documentamfjyht.html
documentamfkfsb.html
documentamfkncj.html
Документ Окончание загрузки метаинформации о файле