Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблема с mp3 плеером (http://www.flasher.ru/forum/showthread.php?t=106458)

Korsar Nik 11.01.2008 17:59

Проблема с mp3 плеером
 
Нужно сделать mp3 плеер с плейлистом. Так как ранее с xml не работал, переделываю чужой исходник. Проблема в том, что не знаю как сделать, чтобы при завершении текущего трека начинал играть следующий. Кроме того, хочется, чтобы при нажатии на трек в плейлисте он сразу начинал играть, без дополнительного нажатия кнопки Play. Подскажите, пожалуйста, как это реализовать. Вот исходник

Заранее спасибо.

Fernando Costa 11.01.2008 18:10

ActionScript 2.0 Language Reference

ActionScript classes > Sound > onSoundComplete (Sound.onSoundComplete handler)

Mr. Fixit 11.01.2008 18:27

хочется в вакансиях =)

вот при нажатии, пусть и играет

Aisaid 11.01.2008 19:31

Вложений: 1
вот простенький мп3 плеер с плейлистом :)
(код без каментов... делал для себя, но всё очень просто)

Korsar Nik 11.01.2008 22:58

2Aisaid
Спасибо, я где-то даже видел этот исходник, когда через поиск плееры искал. Но мне кроме того нужно отображение плейлиста.

Поставлю вопрос конкретнее. Вот код:

Код:

stop();

var snd = this.createEmptyMovieClip("SoundController", 1);

snd.init = function() {
        snd._sound = new Sound(this);
        this.isPlaying = false;
        this.position = 0;
        loadingbar_mc._xscale = 0;
        progressbar_mc._xscale = 0;
};
snd.loadSound = function(url) {
                this._sound.loadSound(url,true);
                stop_btn.onRelease();
};
snd._sound.onSoundComplete = function() {
        stop_btn.onRelease();
};
snd.onEnterFrame = function() {
        if (this.isPlaying) {
                this.position = this._sound.position;
        }
        this.loaded = this._sound.getBytesLoaded()/this._sound.getBytesTotal();
        loadingbar_mc._xscale = scrubber_mc._xscale*this.loaded;
        progressbar_mc._xscale = loadingbar_mc._xscale*this.position/this._sound.duration;
};

play_btn.onRelease = function() {
        if (!isPlaying) {
                snd._sound.start(snd.position/1000);
                snd.isPlaying = true;
        }
};
pause_btn.onRelease = function() {
        if (!snd.isPlaying) {
                return (0);
        }
        snd.position = snd._sound.position;
        snd._sound.stop();
        snd.isPlaying = false;
};
stop_btn.onRelease = function() {
        snd.position = 0;
        snd._sound.stop();
        snd.isPlaying = false;
};
prev_btn.onRelease = function() {
        if (snd.node) {
                if (snd.node.previousSibling) {
                        SetSong(snd.node.previousSibling);
                } else {
                        SetSong(snd.node.parentNode.lastChild);
                }
        }
};
next_btn.onRelease = function() {
        if (snd.node) {
                if (snd.node.nextSibling) {
                        SetSong(snd.node.nextSibling);
                } else {
                        SetSong(snd.node.parentNode.firstChild);
                }
        }
};

scrubber_mc.onPress = function() {
        if (!snd.loaded) {
                return (0);
        }
        var pos = this._xmouse/100;
        snd.position = Math.min(snd._sound.duration, pos*snd._sound.duration/snd.loaded);
        if (snd.isPlaying) {
                snd._sound.start(snd.position/1000);
        }
};

SetSong = function (node) {
        snd.node = node;
        snd.loadSound(node.attributes.src);
        title_txt.text = node.attributes.title;
};

snd.init();

В прицнипе, названия функций сами за себя говорят. Сейчас при нажатии кнопки next_btn становится активным следующий в плейлисте трек и воспроизведение останавливается. Чтобы трек ещё и заиграл, мне нужно нажать play_btn.
А теперь я хочу, чтобы следующий трек автоматически начинал играть при нажатии next_btn. Для этого я просто-напросто добавляю в функцию next_btn вызов функции play_btn:
Код:

next_btn.onRelease = function() {
        if (snd.node) {
                if (snd.node.nextSibling) {
                        SetSong(snd.node.nextSibling);
                } else {
                        SetSong(snd.node.parentNode.firstChild);
                }
        }
        play_btn.onRelease();
};

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

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

Korsar Nik 14.01.2008 02:19

Тема всё ещё актуальна. Помогите, пожалуйста.

Aisaid 14.01.2008 12:44

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

ecolora 10.07.2010 10:52

А Вы решили проблему с множественной загрузкой звука?
http://www.flasher.ru/forum/showthread.php?t=141948
Может поможете советом?
По идее stop не вынуждает браузер прекратить загрузку звука и если пользователь "торопыга", то в конце концов, пощёлкав по очереди треки в проигрывателе, он получит большие тормоза при воспроизведении очередного трека.

KirAmp 10.07.2010 18:08

Korsar Nik
1) В пособии братьев Гурских написано как сделать плеер
2) В конце Мука есть потрясающий справочник на русском языке по процедурам и функциям AS2.
--------------------------------------------
3)
Код AS1/AS2:

sound_obg.onSoundComplete = function() {
    play_var++;
    play_function(play_var);
}

Возможно натолкнет на умные мысли.
--------------------------------------------
Могу и готовый плеер кинуть...... Только толка будем мало......


Часовой пояс GMT +4, время: 05:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.