Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    play contemporaneo a audio streaming

    ciao, vorrei poter controllare il play della timeline principale simultaneamente a quello di un file mp3 esterno.
    tale file è cioè caricato in streaming e io vorrei impedire alla _root di andare al fotogramma successivo fino a quando l'mp3 non è stato bufferizzato.

    qualche idea?

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    partendo dal presupposto che tu stia usando la classe Sound per caricare il file esterno, hai a disposizione le proprietà position e duration che puoi sfruttare insieme alla proprietà _totalframes della timeline per creare una proporzione che invii la timeline ad un determinato frame durante tutta la riproduzione del filmato, sfruttando un evento enterFrame per la verifica
    ora c'è una sola cosa da capire, se il suono è in streaming, bisogna capire se la proprietà duration viene correttamente inizializzata dalla classe

    [edit] ok, la legge correttamente ma va scritto tutto dentro onLoad ... esempio:

    Codice PHP:
    stop();
    var 
    s:Sound = new Sound(this);
    s.loadSound("suono.mp3",true);
    s.onLoad = function(ok) {
        if (
    ok) {
            
    _level0.onEnterFrame = function() {
                
    this.gotoAndStop(Math.floor((s.position*this._totalframes)/s.duration));
            };
        }
    };
    s.onSoundComplete = function() {
        
    _level0.onEnterFrame null;
    }; 
    con questo script la timeline segue l'andamento del suono e rimane al frame 1 fino a che il suono non ha riempito il buffer

  3. #3
    molto bello, lineare e semplice.

    2 cose:
    -deduco che sia quindi l'evento onLoad che determina se il buffer ha raggiunto il completamento, giusto?

    -perchè hai usato _level0.onEnterFrame = null; anzichè delete _level0.onEnterFrame;

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >> -deduco che sia quindi l'evento onLoad che determina se il buffer ha raggiunto il completamento, giusto?

    esatto, nel caso che "isStreaming" sia true, altrimenti determina il completamento del caricamento dell'interno suono

    >> -perchè hai usato _level0.onEnterFrame = null; anzichè delete _level0.onEnterFrame;

    fondamentalmente è la stessa cosa, è solo un mio vezzo quello di assegnare un null o undefined alla funzione quando non serve più

  5. #5
    Originariamente inviato da and80
    >> -deduco che sia quindi l'evento onLoad che determina se il buffer ha raggiunto il completamento, giusto?

    esatto, nel caso che "isStreaming" sia true, altrimenti determina il completamento del caricamento dell'interno suono

    >> -perchè hai usato _level0.onEnterFrame = null; anzichè delete _level0.onEnterFrame;

    fondamentalmente è la stessa cosa, è solo un mio vezzo quello di assegnare un null o undefined alla funzione quando non serve più
    che sia corretto eliminare l'evento onEnterFrame quando non serve più non v'è dubbio, era solo un chiarimento sulla scelta sintattica (io uso sempre delete ad es.). volevo capire se comportava qualche risparmio di prestazioni ma se è la stessa cosa bene così.

    perfetto, grazie.

    ciao and.

  6. #6
    purtroppo non funziona.
    l'evento onLoad, anche nel caso di mp3 in streaming, viene richiamato soltanto se il file è stato completamente scaricato.
    nella parte commentata di codice infatti, il trace viene richiamato dopo che la riproduzione dell'audio è iniziata, quindi dopo che il buffer è stato caricato.

    ho comunque risolto utilizzando la proprietà position della classe sound.
    Codice PHP:
    stop();
    this.createEmptyMovieClip("music"this.getNextHighestDepth());
    var 
    bgSound:Sound = new Sound(music);
    bgSound.loadSound("bgSound.mp3"true);
    bgSound.setVolume(15);
    /*bgSound.onLoad = function(success:Boolean) {
    if (success) {
    trace("go");
    _root.gotoAndPlay(_currentframe+1);
    }
    };*/
    bgSound.onSoundComplete = function():Void  {
        
    this.start(0);
    };
    this.onEnterFrame = function():Void  {
        if (
    bgSound.position>0) {
            
    _root.gotoAndPlay(_currentframe+1);
            
    delete this.onEnterFrame;
            
    trace("iniziato");
        }
    }; 

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    hai ragione!

    che tonto... ho fatto la prova senza simulazione

  8. #8


    mi hai comunque aiutato a risolvere.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.