Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #29, АПРЕЛЬ 2003 г.

TIPS OF FLASH: - MP3 плеер в одну строку

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #029, стр. 029-112-1


Интернет сейчас, как немое кино в начале прошлого века. Некоторые сайты озвучены фоновой музыкой, а на особо продвинутых можно выбрать одну из 3-4 мелодий. Но можно ворчать, а можно юзать то, что доступно сейчас. Мы с тобой, например, сделаем сегодня MP3 плеер с возможностью выбора пользователем полюбившегося ему трека. Также дадим возможность юзеру посмотреть инфу по песне. Причем при помощи этого энджина а) элементарно добавить новую mp3'шку на сайт, не меняя мувика и б) можно слушать музыку почти сразу, не дожидаясь загрузки mp3.

TIPS 1. XML-описание

Если нужно передавать во Flash параметры извне, юзь XML - он крут. Сделаем XML с описанием песен и положим несколько MP3 в папку music. Вот какой playlist.xml вышел у меня:

<playlist>

<item url="blamme.mp3"

songName="blamme"

artist="strekachi"

album="Full charge 2000"

genre="drum-n-bas"

comment="это кульная песня!"

duration="189649"/>

<item url="fuzz_fucking.mp3"

songName="fuzz fucking"

artist="prodigi"

album="nope "

genre="nope "

comment="это же продиги"

duration="201326"/>

<item url="track1.mp3"

songName="X-item"

artist="XX"

album="xxx "

genre="sample "

comment="это сэмпл"

duration="8333"/>

</playlist>

TIPS 2

Я не стал полагаться на получение стандартных тегов из MP3, а описал свои в XML. Гораздо удобнее писать в своем XML, что в голову взбредет, чем париться исправлять теги в MP3. Тем более, что XML нас ничем не ограничивает в смысле количества атрибутов и их наполнения. И к тому же эти данные мы можем получить, не загружая MP3 файлы.

TIPS 3. Подготовительный этап

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

Stage.align = "TL";

Stage.scaleMode = "noscale";

Сделаем настройки для XML - берем текущую кодовую страницу и игнорируем пробелы во всех XML документах:

System.useCodePage = true;

XML.prototype.ignoreWhite = true;

Раз есть XML, снова юзаем мою любимую функцию для обхода дерева:

// (c) Ivan Dembicki, dembicki@narod.ru

XMLNode.prototype.nextNode = function() {

if (this.firstChild != null) {

return this.firstChild;

}

var n = this;

while (n.nextSibling == null) {

if (n.parentNode) {

n = n.parentNode;

} else {

return null;

}

}

return n.nextSibling;

};

Подготовка закончена.

TIPS 4. Загрузка и обработка XML

Создадим объект XML и грузанем в него наш XML документ, и сразу после загрузки расставим ID узлам XML. Затем определим, если проект запущен локально (т.е. URL начинается с "file:///"), то вызываем функцию вывода на экран значений продолжительности звучания всех роликов. После этого инициализируем наш MP3 плеер.

input_xml = new XML();

input_xml.load("playlist.xml");

this.input_xml.onLoad = function(success) {

if (success) {

if (this.status != 0) {

trace("invalid xml");

} else {

var i = 0;

var nod = this.firstChild;

while (nod) {

nod.attributes.ID = i++;

nod = nod.nextNode();

}

this.parseXML(this.firstChild);

if (_url.substring(0, 8) == "file:///") {

_root.getDurations();

}

Содержание  Вперед на стр. 029-112-2