Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. Начало, срок и окончание военной службы.
  2. Окончание
  3. ОКОНЧАНИЕ
  4. Окончание воспроизведения звука
  5. ОКОНЧАНИЕ ПРИЛОЖЕНИЯ 8
  6. ОКОНЧАНИЕ ПРИЛОЖЕНИЯ 8

Когда вся информация из 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 id3: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_0 N, где N – это номер файла. Если же номер файла двузначен (N >= 10), то имя файла будет выглядеть как images/cat_ N

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

 

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

 

Задание

 

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

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

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

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

 


Дата добавления: 2015-08-27; просмотров: 44 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Окончание воспроизведения звука| Правовой статус беженцев.

mybiblioteka.su - 2015-2024 год. (0.017 сек.)