Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка и проигрывание звукового файла (http://www.flasher.ru/forum/showthread.php?t=179986)

Denis_gidin 25.05.2012 10:10

Загрузка и проигрывание звукового файла
 
Здравствуйте!
У меня такой вопрос:
Делаю он-лайн плеер.
Есть компонент List в него подгружаю ссылки на mp3 файлы с сайта.
Для загрузки и воспроизведения использую класс Sound. В первый раз когда кликаю по названию песни, звук воспроизводится. Второй раз когда кликаю по названию выходит ошибка!
Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.
Получается я не могу остановить загрузку первого файла. Используя такой код в обработчике события при клике в компоненте List.
Код AS3:

                function listClick(e:ListEvent):void {
                        var list:List = e.target as List;
                        var item:Object = e.item;
                        trace("Label: " + item.label);
                        trace("Label displayed: " + item.url);
                        if (channel) {
                                channel.stop();
                        }
                        music.load(null);
                        music.addEventListener(Event.COMPLETE,musicListener);
                        music.load(new URLRequest(item.url));
                        channel = music.play();
                        music.removeEventListener(Event.COMPLETE,musicListener);
                }

Подскажите в чем проблема? Как остановить загрузку первого файла и успешно воспроизвести следующий звуковой файл. Пожалуйста!

maxkar 25.05.2012 10:44

Создавайте новый Sound каждый раз.
Цитата:

Once load() is called on a Sound object, you can't later load a different sound file into that Sound object. To load a different sound file, create a new Sound object.

Denis_gidin 25.05.2012 11:34

Загрузка звуковых файлов
 
Цитата:

Сообщение от maxkar (Сообщение 1081280)
Создавайте новый Sound каждый раз.

Спасибо. Пробовал. Но когда загружаешь третий раз любой файл выходит ошибка
Ошибка при открытии URL-адреса 'http://rapidly.ru/audio/70747448/41307679/Kasta-Vokrug_shum.mp3'
Error #2044: Unhandled IOErrorEvent:. text=Error #2032: Stream Error.
at src::NetPhotoSlide/src::listClick()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at fl.controls::SelectableList/fl.controls:SelectableList::handleCellRendererDoubleClick()
Может быть из-за того, что все таки продолжается загрузка еще тех прежних ссылок на звуковые файлы?
Код AS3:

                function listClick(e:ListEvent):void {
                        var list:List = e.target as List;
                        var item:Object = e.item;
                        trace("Label: " + item.label);
                        trace("Label displayed: " + item.url);
                        var music:Sound=new Sound();
                        if (channel) {
                                channel.stop();
                        }
 
                        music.addEventListener(Event.COMPLETE,musicListener);
                        music.load(new URLRequest(item.url));
                        channel = music.play();
                        music.removeEventListener(Event.COMPLETE,musicListener);
                }


maxkar 25.05.2012 11:40

А у вас сервер ограничивает количество одновременных загрузок? Тогда и из-за этого может быть. В этом случае предыдущему sound нужно сделать close().

Denis_gidin 25.05.2012 12:00

Загрузка звуковых файлов
 
Цитата:

Сообщение от maxkar (Сообщение 1081294)
А у вас сервер ограничивает количество одновременных загрузок? Тогда и из-за этого может быть. В этом случае предыдущему sound нужно сделать close().

Мне не нужно одновременно несколько загрузок. Надо что бы он старый поток загрузки остановил и начал новый. Использую обновленный код:
Код AS3:

function listClick(e:ListEvent):void {
                        var list:List = e.target as List;
                        var item:Object = e.item;
                        trace("Label: " + item.label);
                        trace("Label displayed: " + item.url);
                        trace(music);
                        if (music){
                                music.close();
                                }
 
                        var music:Sound=new Sound();
                        if (channel) {
                                channel.stop();
                        }
 
                        music.addEventListener(Event.COMPLETE,musicListener);
                        music.load(new URLRequest(item.url));
                        channel = music.play();
                        music.removeEventListener(Event.COMPLETE,musicListener);
                }

но ошибка все равно выходит:
Error #2044: Unhandled IOErrorEvent:. text=Error #2032: Stream Error.
at src::NetPhotoSlide/src::listClick()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at fl.controls::SelectableList/fl.controls:SelectableList::handleCellRendererDoubleClick()
Что делать?

maxkar 25.05.2012 12:06

И что у вас выдает trace(music)? null? У вас переменная локальная, она каждый раз в функции null будет и старый sound вы не закроете. И посмотрите в каком-нибудь http-мониторе, что именно вам сайт отдает вместо файла, какую именно ошибку.

Denis_gidin 25.05.2012 12:17

Загрузка звуковых файлов
 
Цитата:

Сообщение от maxkar (Сообщение 1081299)
И что у вас выдает trace(music)? null? У вас переменная локальная, она каждый раз в функции null будет и старый sound вы не закроете. И посмотрите в каком-нибудь http-мониторе, что именно вам сайт отдает вместо файла, какую именно ошибку.

Да всегда выдает null. http - монитор скачаю и скажу что выдает. А вообще как можно закрыть старый sound?
Я делал sound как глобальную переменную. Но тогда при попытке закрытия потока, выдает ошибку:
Error: Error #2029: This URLStream object does not have a stream opened. А можно ли узнать если поток загрузки sound открыт, то закрыть его?

maxkar 25.05.2012 12:27

А вы его в вашей переменной в new Sound() инициализируете? Устанавливайте ее в null изначально и пользуйтесь конструктором Sound(URLRequest).

Denis_gidin 25.05.2012 12:42

Загрузка звуковых файлов
 
Цитата:

Сообщение от maxkar (Сообщение 1081302)
А вы его в вашей переменной в new Sound() инициализируете? Устанавливайте ее в null изначально и пользуйтесь конструктором Sound(URLRequest).

Спасибо Вам огромное!!! получилось. В общем так если у кого то будет такая же проблема.
Объявил глобальную переменную:
Код AS3:

var music:Sound=null;

в обработчике события компонента List при двойном щелчке использую код:
Код AS3:

function listClick(e:ListEvent):void {
                        var list:List = e.target as List;
                        var item:Object = e.item;
                        trace("Label: " + item.label);
                        trace("Label displayed: " + item.url);
                        trace(music);
                        if (music){
                                music.close();
                                }
 
                        if (channel) {
                                channel.stop();
                        }
                        music=new Sound(new URLRequest(item.url));
                        music.addEventListener(Event.COMPLETE,musicListener);
                        //music.load(new URLRequest(item.url));
                        channel = music.play();
                        music.removeEventListener(Event.COMPLETE,musicListener);
                }

Работает нормально, но если попытка загрузки файла не удалась, то в фрагменте кода:
Код AS3:

if (music){
  music.close();
}

выйдет ошибка о том что поток не открыт, что бы его закрывать.


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

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