Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.05.2012, 10:10
Denis_gidin вне форума Посмотреть профиль Отправить личное сообщение для Denis_gidin Найти все сообщения от Denis_gidin
  № 1  
Ответить с цитированием
Denis_gidin

Регистрация: Jan 2012
Адрес: Казахстан, Костанай
Сообщений: 25
Melody Загрузка и проигрывание звукового файла

Здравствуйте!
У меня такой вопрос:
Делаю он-лайн плеер.
Есть компонент 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);
		}
Подскажите в чем проблема? Как остановить загрузку первого файла и успешно воспроизвести следующий звуковой файл. Пожалуйста!

Старый 25.05.2012, 10:44
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Создавайте новый 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.

Старый 25.05.2012, 11:34
Denis_gidin вне форума Посмотреть профиль Отправить личное сообщение для Denis_gidin Найти все сообщения от Denis_gidin
  № 3  
Ответить с цитированием
Denis_gidin

Регистрация: Jan 2012
Адрес: Казахстан, Костанай
Сообщений: 25
Melody Загрузка звуковых файлов

Цитата:
Сообщение от maxkar Посмотреть сообщение
Создавайте новый 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);
		}

Старый 25.05.2012, 11:40
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 4  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
А у вас сервер ограничивает количество одновременных загрузок? Тогда и из-за этого может быть. В этом случае предыдущему sound нужно сделать close().

Старый 25.05.2012, 12:00
Denis_gidin вне форума Посмотреть профиль Отправить личное сообщение для Denis_gidin Найти все сообщения от Denis_gidin
  № 5  
Ответить с цитированием
Denis_gidin

Регистрация: Jan 2012
Адрес: Казахстан, Костанай
Сообщений: 25
Melody Загрузка звуковых файлов

Цитата:
Сообщение от maxkar Посмотреть сообщение
А у вас сервер ограничивает количество одновременных загрузок? Тогда и из-за этого может быть. В этом случае предыдущему 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()
Что делать?

Старый 25.05.2012, 12:06
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 6  
Ответить с цитированием
maxkar

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

Старый 25.05.2012, 12:17
Denis_gidin вне форума Посмотреть профиль Отправить личное сообщение для Denis_gidin Найти все сообщения от Denis_gidin
  № 7  
Ответить с цитированием
Denis_gidin

Регистрация: Jan 2012
Адрес: Казахстан, Костанай
Сообщений: 25
Melody Загрузка звуковых файлов

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

Старый 25.05.2012, 12:27
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 8  
Ответить с цитированием
maxkar

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

Старый 25.05.2012, 12:42
Denis_gidin вне форума Посмотреть профиль Отправить личное сообщение для Denis_gidin Найти все сообщения от Denis_gidin
  № 9  
Ответить с цитированием
Denis_gidin

Регистрация: Jan 2012
Адрес: Казахстан, Костанай
Сообщений: 25
Melody Загрузка звуковых файлов

Цитата:
Сообщение от maxkar Посмотреть сообщение
А вы его в вашей переменной в 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, время: 23:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
sound , звук , звуки , Остановка загрузки
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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