Главная
Форум
Баннеры
ТОП Сайтов
Мониторинг серверов
Банлист Сервера
Статистика Сервера
Наши отзывы
Новые сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
Урок: онлайн mp3 плеер с загрузкой из xml
DooDLeZДата: Воскресенье, 28.03.2010, 20:05 | Сообщение # 1

WebMaster
Сообщений: 485
[ ]
:-(
Всем привет) Вот мой первый собственноручно нанисанный урок предоставленный на суд широкой публике.
Результат:

Результат в работе: Смотреть
Исходник: Скачать

Для начала создадим XML файл и запишем туда пути к mp3 файлам:

Code
<playlist>
<song link="song1.mp3" />
<song link="song2.mp3" />
<song link="song3.mp3" />
</playlist>

Сохраним его в одну папку с .swf файлом и скопируем туда три mp3 файла соответственно song1.mp3, song2.mp3, song3.mp3. Названия песен будут браться из id3 тагов mp3 файла так, что во избежания путаници заполните их.

После этих процедур можно приступать к написанию флешки

Создаём новый документ, в нём создаём пять слоёв и называем их
graphics
text
buttons_gr
buttons
action script

graphics - рисуем задний фон для кнопок, процентов загрузки и регулятора громкости. Блокируем этот слой, он нам больше не понадобится.

text - создаём три текстовых поля (Text Field) со значениями (Properties) Dynamic Text и Instance Name
load_txt - процент загрузки
play_txt - процент проигрыша песни
title_txt - номер трека, название группы, название песни
Блокируем этот слой.

buttons_gr - здесь рисуем значки кнопок, превращаем их в Movie Clip'ы и задаём им Instance Name
play_gr
pause_gr
stop_gr
prev_gr
random_gr
next_gr
download_gr
volume_slider - кнопка на ползунке громкости
Они будут отвечать за анимацию кнопок.
Блокируем слой.

buttons - чтобы не целиться в графику кнопки (особенно если кнопкой сделан текст) создаём восемь невидимых Movie Clip'ов которые будут отвечать за нажатие на кнопку и задаём им Instance Name:
play_btn
pause_btn
stop_btn
prev_btn
random_btn
next_btn
download_btn
volume_btn - область наведения на управляющий громкостью
volume_btn1 - левый конец слайдера громкости
volume_btn2 - правый конец слайдера громкости
Блокируем слой.

action script - здесь будет скрипт плеера. Сразу блокируем слой, открываем Actions и начнём:

Сначала создадим переменные необходимые в дальнейшем

Code
var sound:Sound = new Sound()  //звук который будем проигрывать
var song:Array = new Array()  //массив с путями к mp3 файлам
var playlist:XML = new XML() // файл XML
var volume_set:Number = 100 //Начальное значение громкости от 0 до 100

Далее приступим к загрузке песен из XML файла:

Игнорируем пробелы

Code

playlist.ignoreWhite = true    

При удачной загрузке XML перепишем пути к mp3 в массив song и запустим случайную песню, в противном выведем сообщение в поле tittle_txt

Code

playlist.onLoad = function(success) {
if (success) {
    for (i=0; i<=playlist.firstChild.childNodes.length-1; i++){
     song[i] = playlist.firstChild.childNodes[i].attributes.link
    }
    track = randRange (0, song.length -1)
    pause_pos = 0
    press_key(next_btn)
    }
else {title_txt.text = "Файл XML не загружен" }
}

Когда обработчик определён начнём загрузку XML файла

Code
playlist.load("playlist.xml")

Напишем функцию которая будет генерировать псевдослучайное число в заданных параметрах

Code

function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.round(Math.random()*(max-min))+min
return randomNum
}

Запустим итнервал, который будет просчитывать процент загрузки и проигрывания песни, а также заполнять текстовые поля

Code

setInterval(function (){
position = Math.round(sound.position/sound.duration*100);
loading = Math.round(sound.getBytesLoaded() / sound.getBytesTotal() * 100)
if (sound.getBytesLoaded() > 1) {
if(loading==100) {load_txt.text = "ok"} else {load_txt.text = loading + "%"}
play_txt.text = position + "%"
title_txt.text = track + 1 + ". " + sound.id3.TPE1 + " - " +sound.id3.TIT2
}
} , 100 )

Напишем обработчик, который запустит следующую или случайную песню в зависимости от того, включён ли режим случайного воспроизведения песен

Code

sound.onSoundComplete = function () {
if (random_play==true) {press_key (random_btn)}
else {press_key (next_btn)}
}

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

function press_key(presskey) {
if (presskey==download_btn) {getURL(song[track])}
if (presskey==next_btn){if(track >= song.length-1){track=0} else {track=track+1}}
if (presskey==prev_btn){if(track <= 0){track = song.length-1} else {track=track-1}}
if (presskey==random_btn){track=randRange (0, song.length -1)}
if (presskey==stop_btn) {sound.stop(); song_is_play = false} else {
sound.stop()
sound.start()
pause_pos=0
song_is_play = true
sound.onLoad = function(success:Boolean) {
    if (success) {} else {title_txt.text = "loading..."}
}
sound.loadSound(song[track], true)
sound.setVolume(volume_set)
}
}

Так как в AS 2.0 нет функции паузы звука то напишем функцию для кнопки pause которая будет запоминать позицию воспроизведения песни и потом начинать воспроизведение с того же места

Code
pause_btn.onPress = function(){
if (song_is_play==true) {
    pause_pos=sound.position/1000
    sound.stop()
    song_is_play=false
    }
else {
    sound.start(pause_pos)
    song_is_play=true
    pause_pos=0
    }
}

Чтобы после нажатия pause кнопка play продолжала проигрывание, а после нажатия stop начинала заново напишем функцию и для неё

Code

play_btn.onPress = function(){
if (pause_pos==0) {press_key (play_btn)}
else {sound.start(pause_pos)}
}

Напишем режим случайного воспроизведения звука с анимацией кнопки random. Чтобы всё было понятно для анимации я выбрал атрибут _alpha (прозрачность) принимающий значения 50 и 100.

Code

random_play = false
over_key (random_gr)
random_btn.onPress = function(){
if (random_play==true) {
    random_gr._alpha = 50
    random_play=false
    }
else {
    random_play=true
    random_gr._alpha = 100
    }
}

Пропишем код для остальных кнопок, которые будут запускать общую функцию press_key

Code
stop_btn.onPress = function(){press_key (stop_btn)}
prev_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key(prev_btn)}}
next_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key (next_btn)}}
download_btn.onPress = function(){press_key (download_btn)}

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

Code

//функция наведения на клавишу
function over_key(overkey) {overkey._alpha = 50}

//функция отведения от клавиши
function out_key(outkey) {outkey._alpha = 100}

//наведение на кнопки
play_btn.onRollOver = function(){over_key(play_gr)}
pause_btn.onRollOver = function(){over_key(pause_gr)}
stop_btn.onRollOver = function(){over_key(stop_gr)}
prev_btn.onRollOver = function(){over_key(prev_gr)}
next_btn.onRollOver = function(){over_key(next_gr)}
download_btn.onRollOver = function(){over_key(download_gr)}

play_btn.onRollOut = function(){out_key(play_gr)}
pause_btn.onRollOut = function(){out_key(pause_gr)}
stop_btn.onRollOut = function(){out_key(stop_gr)}
prev_btn.onRollOut = function(){out_key(prev_gr)}
next_btn.onRollOut = function(){out_key(next_gr)}
download_btn.onRollOut = function(){out_key(download_gr)}

Добавим регулятор громкости нарисованный при помощи drawing API

Code

// громкость
volume_btn.onPress = function() {volume_drag=1}
volume_slider.onMouseMove = function () { if (volume_drag==1){
volume_long = volume_btn2._x - volume_btn1._x
volume_set = Math.round(volume_btn1._xmouse / volume_long * 100 )
if (volume_set < 0) {volume_set = 0}
if (volume_set > 100) {volume_set = 100}
volume_line.volume1._xscale = volume_set
slider_pos = _root._xmouse
if (_root._xmouse > volume_btn2._x) {slider_pos = volume_btn2._x}
if (_root._xmouse < volume_btn1._x) {slider_pos = volume_btn1._x}
volume_slider._x = slider_pos
volume_slider._y = volume_btn1._y
sound.setVolume(volume_set)
}
}

// начертание линии громкости
var volume_line:MovieClip = this.createEmptyMovieClip ("vol", 1)
volume_line._x = volume_btn1._x
volume_line._y = volume_btn1._y
volume_line.createEmptyMovieClip ("volume1", 1)
volume_line.volume1.beginFill (0xFF0000, 100)
volume_line.volume1.lineStyle(1, 0x000000, 100);
volume_line.volume1.moveTo (0, 0)
volume_line.volume1.lineTo (volume_btn2._x - volume_btn1._x, volume_btn2._y - volume_btn2._y)
volume_line.volume1.endFill ()

//применение громкости при запуске
volume_long = volume_btn2._x - volume_btn1._x
volume_line.volume1._xscale = volume_set
volume_slider._x = volume_btn1._x + volume_long / 100 * volume_set
sound.setVolume(volume_set)

//отмена всех слайдеров по отпусканию кнопки мыши
_root.onMouseUp = function() {volume_drag=0}

Ну и весь код целиком

Code

// объявление переменных
var sound:Sound = new Sound()
var song:Array = new Array()
var playlist:XML = new XML()
var volume_set:Number = 100

//загрузка из xml
playlist.ignoreWhite = true
playlist.onLoad = function(success) {
if (success) {
    for (i=0; i<=playlist.firstChild.childNodes.length-1; i++){
     song[i] = playlist.firstChild.childNodes[i].attributes.link
    }
    track = randRange (0, song.length -1)
    pause_pos = 0
    press_key(next_btn)
    }
else {title_txt.text = "Файл XML не загружен" }
}

playlist.load("http://r2-gothic.clan.su/player/playlist.xml")

//функция для получения случайного номера
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.round(Math.random()*(max-min))+min
return randomNum
}

// интервал для подсчёта процентов
setInterval(function (){
position = Math.round(sound.position/sound.duration*100);
loading = Math.round(sound.getBytesLoaded() / sound.getBytesTotal() * 100)
if (sound.getBytesLoaded() > 1) {
if(loading==100) {load_txt.text = "ok"} else {load_txt.text = loading + "%"}
play_txt.text = position + "%"
title_txt.text = track + 1 + ". " + sound.id3.TPE1 + " - " +sound.id3.TIT2
}
} , 100 )

//обработчик для запуска следующей песни
sound.onSoundComplete = function () {
if (random_play==true) {press_key (random_btn)}
else {press_key (next_btn)}
}

// функция нажатия клавиш
function press_key(presskey) {
if (presskey==download_btn) {getURL(song[track])}
if (presskey==next_btn){if(track >= song.length-1){track=0} else {track=track+1}}
if (presskey==prev_btn){if(track <= 0){track = song.length-1} else {track=track-1}}
if (presskey==random_btn){track=randRange (0, song.length -1)}
if (presskey==stop_btn) {sound.stop(); song_is_play = false} else {
sound.stop()
sound.start()
pause_pos=0
song_is_play = true
sound.onLoad = function(success:Boolean) {
    if (success) {} else {title_txt.text = "loading..."}
}
sound.loadSound(song[track], true)
sound.setVolume(volume_set)
}
}

//кнопка pause
pause_btn.onPress = function(){
if (song_is_play==true) {
    pause_pos=sound.position/1000
    sound.stop()
    song_is_play=false
    }
else {
    sound.start(pause_pos)
    song_is_play=true
    pause_pos=0
    }
}

//кнопка play
play_btn.onPress = function(){
if (pause_pos==0) {press_key (play_btn)}
else {sound.start(pause_pos)}
}

//кнопка random
random_play = false
over_key (random_gr)
random_btn.onPress = function(){
if (random_play==true) {
    random_gr._alpha = 50
    random_play=false
    }
else {
    random_play=true
    random_gr._alpha = 100
    }
}

//нажатие кнопок
stop_btn.onPress = function(){press_key (stop_btn)}
prev_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key(prev_btn)}}
next_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key (next_btn)}}
download_btn.onPress = function(){press_key (download_btn)}

//функция наведения на клавишу
function over_key(overkey) {overkey._alpha = 50}

//функция отведения от клавиши
function out_key(outkey) {outkey._alpha = 100}

//наведение на кнопки
play_btn.onRollOver = function(){over_key(play_gr)}
pause_btn.onRollOver = function(){over_key(pause_gr)}
stop_btn.onRollOver = function(){over_key(stop_gr)}
prev_btn.onRollOver = function(){over_key(prev_gr)}
next_btn.onRollOver = function(){over_key(next_gr)}
download_btn.onRollOver = function(){over_key(download_gr)}

play_btn.onRollOut = function(){out_key(play_gr)}
pause_btn.onRollOut = function(){out_key(pause_gr)}
stop_btn.onRollOut = function(){out_key(stop_gr)}
prev_btn.onRollOut = function(){out_key(prev_gr)}
next_btn.onRollOut = function(){out_key(next_gr)}
download_btn.onRollOut = function(){out_key(download_gr)}

// громкость
volume_btn.onPress = function() {volume_drag=1}
volume_slider.onMouseMove = function () { if (volume_drag==1){
volume_long = volume_btn2._x - volume_btn1._x
volume_set = Math.round(volume_btn1._xmouse / volume_long * 100 )
if (volume_set < 0) {volume_set = 0}
if (volume_set > 100) {volume_set = 100}
volume_line.volume1._xscale = volume_set
slider_pos = _root._xmouse
if (_root._xmouse > volume_btn2._x) {slider_pos = volume_btn2._x}
if (_root._xmouse < volume_btn1._x) {slider_pos = volume_btn1._x}
volume_slider._x = slider_pos
volume_slider._y = volume_btn1._y
sound.setVolume(volume_set)
}
}

// начертание линии громкости
var volume_line:MovieClip = this.createEmptyMovieClip ("vol", 1)
volume_line._x = volume_btn1._x
volume_line._y = volume_btn1._y
volume_line.createEmptyMovieClip ("volume1", 1)
volume_line.volume1.beginFill (0xFF0000, 100)
volume_line.volume1.lineStyle(1, 0x000000, 100);
volume_line.volume1.moveTo (0, 0)
volume_line.volume1.lineTo (volume_btn2._x - volume_btn1._x, volume_btn2._y - volume_btn2._y)
volume_line.volume1.endFill ()

//применение громкости при запуске
volume_long = volume_btn2._x - volume_btn1._x
volume_line.volume1._xscale = volume_set
volume_slider._x = volume_btn1._x + volume_long / 100 * volume_set
sound.setVolume(volume_set)

//отмена всех слайдеров по отпусканию кнопки мыши
_root.onMouseUp = function() {volume_drag=0}

Вот в принципе и всё, жду коментов))

Немного доработал код. Версия 2:
xml:

Code

<song link="song1.mp3" />
<song link="song2.mp3" />
<song link="song3.mp3" />

Action Script:

Code

// объявление переменных
var sound:Sound = new Sound()
var song:Array = new Array()
var playlist:XML = new XML()
var volume_set:Number = 100

//загрузка из xml
playlist.ignoreWhite = true
playlist.onLoad = function(success) {
if (success) {
    for (i=0; i<=playlist.childNodes.length-1; i++) {
     song[i] = playlist.childNodes[i].attributes.link
    }
    pause_pos = 0
    track = randRange (0, song.length -1)
    press_key(next_btn)
    } else {title_txt.text = "Файл XML не загружен"}
}
playlist.load("http://r2-gothic.clan.su/player/playlist.xml")

//функция для получения случайного номера
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.round(Math.random()*(max-min))+min
return randomNum
}

// интервал для подсчёта процентов
setInterval(function (){
position = Math.round(sound.position/sound.duration*100);
loading = Math.round(sound.getBytesLoaded() / sound.getBytesTotal() * 100)
pos_move(position, loading)
if (sound.getBytesLoaded() > 1) {
if (track <=8) {track_num = "0" + (track + 1)} else {track_num = track + 1}
title_txt.text = track_num + ". " + sound.id3.TPE1 + " - " +sound.id3.TIT2
}
} , 100 )

//обработчик для запуска следующей песни
sound.onSoundComplete = function () {
if (random_play==true) {press_key (random_btn)}
else {press_key (next_btn)}
}

// функция нажатия клавиш
function press_key(presskey) {
if (presskey==next_btn){if(track >= song.length-1){track=0} else {track=track+1}}
if (presskey==prev_btn){if(track <= 0){track = song.length-1} else {track=track-1}}
if (presskey==random_btn){track=randRange (0, song.length -1)}
if (presskey==stop_btn) {sound.stop(); song_is_play = false} else {
sound.stop()
sound.start()
pause_pos=0
song_is_play = true
sound.onLoad = function(success:Boolean) {
    if (success) {} else {title_txt.text = "loading..."}
}
sound.loadSound(song[track], true)
sound.setVolume(volume_set)
}
}

//кнопка pause
pause_btn.onPress = function(){
if (song_is_play==true) {
    pause_pos=sound.position/1000
    sound.stop()
    song_is_play=false
    }
else {
    sound.start(pause_pos)
    song_is_play=true
    pause_pos=0
    }
}

//кнопка play
play_btn.onPress = function(){
if (pause_pos==0) {press_key (play_btn)}
else {sound.start(pause_pos)}
}

//кнопка random
random_play = false
over_key (random_gr)
random_btn.onPress = function(){
if (random_play==true) {
    random_gr._alpha = 50
    random_play=false
    }
else {
    random_play=true
    random_gr._alpha = 100
    }
}

//нажатие кнопок
stop_btn.onPress = function(){press_key (stop_btn)}
prev_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key(prev_btn)}}
next_btn.onPress = function(){if(random_play==true) {press_key(random_btn)} else {press_key (next_btn)}}
download_btn.onPress = function(){getURL(song[track])}

//функция наведения на клавишу
function over_key(overkey) {overkey._alpha = 50}

//функция отведения от клавиши
function out_key(outkey) {outkey._alpha = 100}

//наведение на кнопки
play_btn.onRollOver = function(){over_key(play_gr)}
pause_btn.onRollOver = function(){over_key(pause_gr)}
stop_btn.onRollOver = function(){over_key(stop_gr)}
prev_btn.onRollOver = function(){over_key(prev_gr)}
next_btn.onRollOver = function(){over_key(next_gr)}
download_btn.onRollOver = function(){over_key(download_gr)}

play_btn.onRollOut = function(){out_key(play_gr)}
pause_btn.onRollOut = function(){out_key(pause_gr)}
stop_btn.onRollOut = function(){out_key(stop_gr)}
prev_btn.onRollOut = function(){out_key(prev_gr)}
next_btn.onRollOut = function(){out_key(next_gr)}
download_btn.onRollOut = function(){out_key(download_gr)}

// громкость
volume_btn.onPress = function() {volume_drag=1; volume_move()}
volume_slider.onMouseMove = function(){volume_move()}
function volume_move () { if (volume_drag==1){
volume_long = volume_btn2._x - volume_btn1._x
volume_set = Math.round(volume_btn1._xmouse / volume_long * 100 )
if (volume_set < 0) {volume_set = 0}
if (volume_set > 100) {volume_set = 100}
volume_line.volume1._xscale = volume_set
slider_pos = _root._xmouse
if (_root._xmouse > volume_btn2._x) {slider_pos = volume_btn2._x}
if (_root._xmouse < volume_btn1._x) {slider_pos = volume_btn1._x}
volume_slider._x = slider_pos
volume_slider._y = volume_btn1._y
sound.setVolume(volume_set)
}
}

// начертание линии громкости
var volume_line:MovieClip = this.createEmptyMovieClip ("vol",this.getNextHighestDepth())
volume_line._x = volume_btn1._x
volume_line._y = volume_btn1._y
volume_line.createEmptyMovieClip ("volume1", 1)
volume_line.volume1.lineStyle(1, 0x000000, 100);
volume_line.volume1.moveTo (0, 0)
volume_line.volume1.lineTo (volume_btn2._x - volume_btn1._x, volume_btn2._y - volume_btn2._y)

//применение громкости при запуске
volume_long = volume_btn2._x - volume_btn1._x
volume_line.volume1._xscale = volume_set
volume_slider._x = volume_btn1._x + volume_long / 100 * volume_set
sound.setVolume(volume_set)

//отмена всех слайдеров по отпусканию кнопки мыши
_root.onMouseUp = function() {volume_drag=0}

// позиция и перемотка
function pos_move (pos_set, lod_set) {
pos_long = pos_btn2._x - pos_btn1._x
pos_line.position1._xscale = pos_set
lod_line.loading1._xscale = lod_set
pos_slider._y = pos_btn1._y
pos_slider._x = pos_btn1._x + pos_long / 100 * pos_set
}

// начертание линии загрузки
var lod_line:MovieClip = this.createEmptyMovieClip ("lod", this.getNextHighestDepth())
lod_line._x = pos_btn1._x
lod_line._y = pos_btn1._y
lod_line.createEmptyMovieClip ("loading1", 1)
lod_line.loading1.lineStyle(1, 0xFFFFFF, 50);
lod_line.loading1.moveTo (0, 0)
lod_line.loading1.lineTo (pos_btn2._x - pos_btn1._x, pos_btn2._y - pos_btn2._y)

// начертание линии позиции
var pos_line:MovieClip = this.createEmptyMovieClip ("pos", this.getNextHighestDepth())
pos_line._x = pos_btn1._x
pos_line._y = pos_btn1._y
pos_line.createEmptyMovieClip ("position1", 1)
pos_line.position1.lineStyle(1, 0x000000, 100);
pos_line.position1.moveTo (0, 0)
pos_line.position1.lineTo (pos_btn2._x - pos_btn1._x, pos_btn2._y - pos_btn2._y)

// добавление слайдера и обнуление линии позиции
var pos_sl:MovieClip = this.createEmptyMovieClip ("pos_slider", this.getNextHighestDepth())
pos_sl.attachMovie("pos_1", "pos_mc", this.getNextHighestDepth())
pos_sl._x = pos_btn1._x
pos_sl._y = pos_btn1._y
pos_line.position1._xscale = 0
lod_line.loading1._xscale = 0


  • Страница 1 из 1
  • 1
Поиск:


Все права принадлежат PainKiller.Net.Ru 2009-2010. Дизайн сайта разработан - PainKiller.Net.Ru
Внимание! Рип шаблона запрещен "Нарушение авторского права"! Design bY PainKiller.Net.Ru
Тиц и pr сайта