Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прервать подгрузку данных (mp3), не доконца загрузить файл в браузер 
V
    Опции темы
numerovan
Дата 15.1.2014, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: 1
Всего: 2



Здравствуйте, хочу спросить: класс Sound и его метод load() загружают файл на сторону клиента, не обходимо подгрузить лишь определенную часть всего mp3-файла, к примеру - файл по времени составляет 340 секунд, нужно в браузер подгрузить 60 секунд, каторые начинаются допустим с 50 секунды самого трека ... можно ли так сделать ?
Если в методе play() указать первый параметр ( play(30000) ), то с этого места данные начинают подгружатся (с 30-й секунды), далее хочу чтоб подгрузилось еще только 60 секунд, надо заметить что файл сразу же начинает воспроизводится. Можно высчитать event.bytesLoaded , перевести его в секунду и понять где 60-ая секунда, а где нет ... а вот как прервать загрузку и чтоб не оборвать воспроизведение музыки, вот это что-то пока не знаю. Есть метод close() класса Sound, он и обрывает загрузку и останавливает воспроизведение, для данной задачи он не подходит, хотя может и ошибаюсь, да кстати, что-то у меня он не работал.
PM MAIL   Вверх
numerovan
Дата 18.1.2014, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: 1
Всего: 2



люди, тут есть кто нибудь ? ну хоть что-то напишите, а то словно один в поле боя.
PM MAIL   Вверх
numerovan
Дата 20.1.2014, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: 1
Всего: 2



Походу такой вариант как я хочу его наверно просто нет. Нужно как-то по другому выкручиваться.

Есть какой нибудь вариант чтоб флеш не сохранял музыкальный файл в кеш браузера ?
PM MAIL   Вверх
numerovan
Дата 22.1.2014, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: 1
Всего: 2



Флэш грузит весь файл, т.е. от начало ... вывод - делать нарезки
PM MAIL   Вверх
numerovan
Дата 1.5.2015, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: 1
Всего: 2



Дополню ответом: чтоб прервать загрузку данных не обходимо отстановить звуковой канал и закрыть объект Sound

т.е. вот так:
Код

// если звук уже проирывается и нам нужно чтоб в этот момент быстро загрузить другой звуковой файл
if(s){
        sc.stop(); // вырубили звуковой канал
// вот если этот try тут не поставить, то при попытки загрузить сразу новый звуковой файл, AS3 будет выдавать ошибки. Тут такой вот парадокс, это блок try как бы подавляет ошибку и с ним, в данном месте, работается более гладко.
        try{
            s.close(); // вырубили звуковой объект
        }
        catch(error:Error){
            trace(error);
        }
        
        PAUSE_POS = 0;    
    }


Добавлено через 6 минут и 6 секунд
Переписал музыкальный флеш-плеер, хотел оформить в виде класса, чтоб удобно было работать, но в силу не глубокого знания как там потом
подключать эти классы не сделал, сделал структурно. Так же хотелось чтоб минимум было файлов связанных с плеером, к примеру *swf и один *.as.
Если бы через класс писать, то наверно бы получилось 3 файла. В общем парится не стал и через ф-ии написал в одном файле. Выложу весь код кому интересно.
Код

import flash.events.Event;
import flash.events.ProgressEvent;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.media.SoundChannel;
import flash.net.URLRequest;

var s:Sound;
var sc:SoundChannel;
var TRANS:SoundTransform;
var PLAYING:Boolean        = false;
var PAUSE_POS:int        = 0;
var VOLUME:Number        = 0.8;
var LOADED_PCT:uint        = 0;
var BUFFER_SIZE:int        = 5000;

if(ExternalInterface.available){
    var readyTimer:Timer = new Timer(100);
    readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
    readyTimer.start();
}

// проверяем готовность документа тоже
function checkReady():Boolean{
    var result:Boolean = ExternalInterface.call("Player.isEnabled"); 
    return result;
}
function timerHandler(event:TimerEvent):void{
    var isReady:Boolean = checkReady();
    if(isReady){
        Timer(event.target).stop();
        setupCallbacks();    
    }
}

// делаем связть между js и as
function setupCallbacks():void{
    ExternalInterface.addCallback("playMp3JS",        playMp3AS);
    ExternalInterface.addCallback("pauseMp3JS",    pauseMp3AS);
    ExternalInterface.addCallback("unPauseMp3JS",    unPauseMp3AS);
    ExternalInterface.addCallback("seekMp3JS",    seekMp3AS);
    ExternalInterface.addCallback("setVolumeJS",    setVolumeAS);
    ExternalInterface.addCallback("fadeOutSndJS",    fadeOutSndAS);
}

function playMp3AS(url){
    if(PLAYING)
        removeEventListener(Event.ENTER_FRAME, onEnterFrame);
    
    if(s){
        sc.stop();
        try{
            s.close();
        }
        catch(error:Error){
            trace(error);
        }
        
        PAUSE_POS = 0;    
    }
        
    s  = new Sound();
    sc = new SoundChannel();
    
    s.addEventListener(ProgressEvent.PROGRESS,    onLoadProgress);
    s.addEventListener(Event.COMPLETE,            onLoadComplete);
    
                                // определяем размер буфера
    s.load(new URLRequest(url), new SoundLoaderContext(BUFFER_SIZE, true));
    
    TRANS = new SoundTransform(VOLUME, 0); // устанавливаем громмоксть на 0.8 и панараму в 0
    sc = s.play(0, 0, TRANS);
    
    sc.addEventListener(Event.SOUND_COMPLETE,    onPlaybackComplete);
    addEventListener(Event.ENTER_FRAME,        onEnterFrame);
        
    LOADED_PCT    = 0;
    PLAYING = true;
}
function pauseMp3AS():void{
    if(!PLAYING)
        return;
        
    PAUSE_POS = sc.position;
    sc.stop();
    removeEventListener(Event.ENTER_FRAME, onEnterFrame);
    PLAYING = false;
}
function unPauseMp3AS():void{
    if(PLAYING)
        return;
        
    sc = s.play(PAUSE_POS, 0, TRANS);
    sc.addEventListener(Event.SOUND_COMPLETE,        onPlaybackComplete); // необходим, после стопа он теряется
    addEventListener(Event.ENTER_FRAME,            onEnterFrame);
    
    PLAYING = true;
}
function seekMp3AS(pos:int):void{
    var transform:SoundTransform = sc.soundTransform;
    
    sc.stop();
    sc = s.play(pos, 0, transform);
    
    sc.addEventListener(Event.SOUND_COMPLETE,    onPlaybackComplete); // необходим, после стопа он теряется
    
    if(!PLAYING)
        addEventListener(Event.ENTER_FRAME,    onEnterFrame);
    
    PLAYING = true;
}
function setVolumeAS(vol:Number):void{
    var transform:SoundTransform    = sc.soundTransform;
    transform.volume                = VOLUME = vol;
    sc.soundTransform                = transform;
}

// когда идет загрузка данных
function onLoadProgress(event:ProgressEvent):void{
    var temp = Math.round(100 * (event.bytesLoaded/event.bytesTotal));
    if(LOADED_PCT < temp){
        ExternalInterface.call("Player.onloadProgressJS", temp);
        LOADED_PCT = temp;
    }
}

// когда файл полностью загружен
function onLoadComplete(event:Event):void{}

// когда происходит конец музыки
function onPlaybackComplete(event:Event):void{
    removeEventListener(Event.ENTER_FRAME, onEnterFrame);
    ExternalInterface.call("Player.onPlayBackCompleate");
    
    PLAYING = false;
    PAUSE_POS = 0;
    sc.stop();
}

// вычисляем время в момент которого звучит музыка
function onEnterFrame(event:Event):void{
    ExternalInterface.call("Player.updateTime", sc.position);
}

// затихание музыки
function fadeOutSndAS():void{
    var readyTimer:Timer = new Timer(50);
    readyTimer.addEventListener(TimerEvent.TIMER, fadeOutSndChild);
    readyTimer.start();
}
function fadeOutSndChild(event:TimerEvent):void{
    var transform:SoundTransform = sc.soundTransform;
    var cur_vol:Number = transform.volume * 100 - 10;
    
    transform.volume = (cur_vol < 10)? 0: cur_vol/100;
    
    sc.soundTransform = transform;
    
    if(!transform.volume)
        Timer(event.target).stop();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.1335 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.