• User Attivo

    Audio in sito flash

    Ciao a tutti, vediamo se qualcuno mi risolve anche questa...
    Sto costruendo un sito in flash, nel quale ho bisogno di avere un loop di sottofondo durante la navigazione che però deve interrompersi nel momento in cui l'utente clicca sul preascolto di 15 secondi di alcune tracce e deve ripartire una volta terminato il preascolto. E' possibile?
    Questo è quello che sono riuscito a fare:
    inserire il loop all'interno dell'swf, creare la pagina con i 10 preascolti che vengono pescati da file esterni. Quando clicco su un preascolto il loop si interrompe, ma poi non riparte quando vorrei (non ho idea di quale codice inserire). Inoltre se torno alla home i due file si sovrappongono.
    Grazie per l'aiuto (e per esservi letti questo thread).


  • Super User

    Puoi postare i codici actionscript che usi?


  • User Attivo

    @homeworker said:

    Puoi postare i codici actionscript che usi?

    Allora, ecco la spiegazione completa:
    Ho un fotogramma con label home in corrispondenza del quale ho creato un livello sound dove ho importato il mio loop. Questo parte automaticamente, ma vorrei mettergli dei controlli per disabilitare e riabilitare l'audio.
    Nel livello actions, ho questo Actionscript per caricare gli altri file audio:

    //SUONI
    //wank
    myWank_sound = new Sound();
    myWank_sound.loadSound("discography/wank.mp3", false);
    //eoul
    myEoul_sound = new Sound();
    myEoul_sound.loadSound("discography/eoul.mp3", false);
    //bolluc
    myBolluc_sound = new Sound();
    myBolluc_sound.loadSound("discography/bolluc.mp3", false);
    //poc
    myPoc_sound = new Sound();
    myPoc_sound.loadSound("discography/poc.mp3", false);
    //medls
    myMedls_sound = new Sound();
    myMedls_sound.loadSound("discography/medls.mp3", false);
    //alufo
    myAlufo_sound = new Sound();
    myAlufo_sound.loadSound("discography/alufo.mp3", false);
    //helx
    myHelx_sound = new Sound();
    myHelx_sound.loadSound("discography/helx.mp3", false);
    //vorn
    myVorn_sound = new Sound();
    myVorn_sound.loadSound("discography/vorn.mp3", false);
    //noras
    myNoras_sound = new Sound();
    myNoras_sound.loadSound("discography/noras.mp3", false);
    //sdh
    mySdh_sound = new Sound();
    mySdh_sound.loadSound("discography/sdh.mp3", false);
    

    In un altro fotogramma con label discography-it ho creato la pagina della discografia, che però ha anche la sua traduzione discography-en in un'altro frama.
    Per non rifare due volte tutti i tasti e le condizioni, avevo pensato di creare un livello che comprendesse entrambe le labels.
    Nel primo frame di questo livello (dove c'è anche discography-it) ho inserito queste actions:

    //wank sound
    wankcontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myWank_sound.start(0, 1);
    };
    wankcontrols_mc.stopsound_btn.onRelease = function() {
    	myWank_sound.stop();
    };
    //eoul sound
    eoulcontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myEoul_sound.start(0, 1);
    };
    eoulcontrols_mc.stopsound_btn.onRelease = function() {
    	myEoul_sound.stop();
    };
    //bolluc sound
    bolluccontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myBolluc_sound.start(0, 1);
    };
    bolluccontrols_mc.stopsound_btn.onRelease = function() {
    	myBolluc_sound.stop();
    };
    //poc sound
    poccontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myPoc_sound.start(0, 1);
    };
    poccontrols_mc.stopsound_btn.onRelease = function() {
    	myPoc_sound.stop();
    };
    //medls sound
    medlscontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myMedls_sound.start(0, 1);
    };
    medlscontrols_mc.stopsound_btn.onRelease = function() {
    	myMedls_sound.stop();
    };
    //alufo sound
    alufocontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myAlufo_sound.start(0, 1);
    };
    alufocontrols_mc.stopsound_btn.onRelease = function() {
    	myAlufo_sound.stop();
    };
    //helx sound
    helxcontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myHelx_sound.start(0, 1);
    };
    helxcontrols_mc.stopsound_btn.onRelease = function() {
    	myHelx_sound.stop();
    };
    //vorn sound
    vorncontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myVorn_sound.start(0, 1);
    };
    vorncontrols_mc.stopsound_btn.onRelease = function() {
    	myVorn_sound.stop();
    };
    //noras sound
    norascontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	myNoras_sound.start(0, 1);
    };
    norascontrols_mc.stopsound_btn.onRelease = function() {
    	myNoras_sound.stop();
    };
    //sdh sound
    sdhcontrols_mc.playsound_btn.onRelease = function() {
    	stopAllSounds();
    	mySdh_sound.start(0, 1);
    };
    sdhcontrols_mc.stopsound_btn.onRelease = function() {
    	mySdh_sound.stop();
    };
    

    Se un utente entra nel sito parte il suono in loop, se va in un'altra pagina e torna alla home un altro suono di loop parte e si sovrappone, facendo un bordello.
    Se va in discography-it, clicca su un suono qualunque il suono parte, ma poi, una volta finito, non so come far ripartire il loop.
    Se invece va in discography-en, non va NIENTE. Aiutoooooo!


  • Super User
    musiche = new Array("musica1","musica2","musica3","musica4","musica5","musica6","musica7","bgsound");
    
    // creo gli oggetti musicali
    for&#40;i=0; i<musiche.length; i++&#41; &#123;
    	_root&#91;musiche&#91;i&#93;&#93; = new Sound&#40;&#41;;
    	_root&#91;musiche&#91;i&#93;&#93;.loadSound&#40;"" + musiche&#91;i&#93; + ".mp3", false&#41;; 
    	//trace&#40;musiche&#91;i&#93;&#41;;
    &#125;;
    
    // cekko il caricamento e riproduco il suono di sfondo se tutto ok
    _root.bgsound.onLoad = function&#40;success&#41;&#123;
      _root.bgsound.start&#40;&#41;;
    &#125;;
    
    function stopallsound&#40;&#41; &#123;
    	for&#40;i=0; i<musiche.length; i++&#41; &#123;
    		_root&#91;musiche&#91;i&#93;&#93;.stop&#40;&#41;;
    	&#125;
    &#125;;
    
    playMusica1.onRelease = function&#40;&#41; &#123;
    	stopallsound&#40;&#41;;				// fermo tutti i suoni
    	_root.musica1.start&#40;0, 1&#41;;	// faccio partire la canzone desiderata
    	_root.musica1.onSoundComplete = function&#40;&#41;&#123;
    		_root.bgsound.start&#40;&#41;;	// quanto è finita riparte la musica di sfondo
    	&#125;
    &#125;;
    stopMusica1.onRelease = function&#40;&#41; &#123;
    	stopallsound&#40;&#41;;		// fermo tutti i suoni
    	_root.bgsound.start&#40;&#41;;	// faccio partire la musica di sfondo
    &#125;;
    

    Con l'array delle musiche puoi controllare tutte le musiche da caricare indicando fra "virgolette" il nome del file mp3 (escluso .mp3 che viene aggiunto nella funzione seguente.

    Con la funzione onSoundComplete del pulsante faccio ripartire la musica di sfondo quando la musica richiesta è finita. Questa funzione in particolare non l'ho provata ma dovrebbe funzionare.

    I pulsanti fermano tutti i suoni creati all'inizo nel ciclo for. Con stopallsound non credo si possano controllare i suoni creati con la funzione new sound(); quindi ho creato un altro ciclo for per fermarli tutti assieme

    Si può fare anche una funzioncina per i vari pulsanti play/stop senza riscrivere tutto quel codice ma non l'ho mai fatto e mi devo documentare.

    Cmq c'è un problema di fondo che all'inizio vengono caricati tutti gli mp3 assieme, se sono molti e pesanti rischi di bloccare la linea del navigatore e comunque i play() non funzionerebbero.

    L'ideale sarebbe di caricare al volo il suono, visualizzare l'avanzamento dello scaricamento con Sound.getBytesTotal() Sound.getBytesLoaded() e al completamento far partire il suono.

    Ciao


  • User Attivo

    @homeworker said:

    musiche = new Array&#40;"musica1","musica2","musica3","musica4","musica5","musica6","musica7","bgsound"&#41;;
    
    // creo gli oggetti musicali
    for&#40;i=0; i<musiche.length; i++&#41; &#123;
    	_root&#91;musiche&#91;i&#93;&#93; = new Sound&#40;&#41;;
    	_root&#91;musiche&#91;i&#93;&#93;.loadSound&#40;"" + musiche&#91;i&#93; + ".mp3", false&#41;; 
    	//trace&#40;musiche&#91;i&#93;&#41;;
    &#125;;
    
    // cekko il caricamento e riproduco il suono di sfondo se tutto ok
    _root.bgsound.onLoad = function&#40;success&#41;&#123;
     _root.bgsound.start&#40;&#41;;
    &#125;;
    
    function stopallsound&#40;&#41; &#123;
    	for&#40;i=0; i<musiche.length; i++&#41; &#123;
    		_root&#91;musiche&#91;i&#93;&#93;.stop&#40;&#41;;
    	&#125;
    &#125;;
    
    playMusica1.onRelease = function&#40;&#41; &#123;
    	stopallsound&#40;&#41;;				// fermo tutti i suoni
    	_root.musica1.start&#40;0, 1&#41;;	// faccio partire la canzone desiderata
    	_root.musica1.onSoundComplete = function&#40;&#41;&#123;
    		_root.bgsound.start&#40;&#41;;	// quanto è finita riparte la musica di sfondo
    	&#125;
    &#125;;
    stopMusica1.onRelease = function&#40;&#41; &#123;
    	stopallsound&#40;&#41;;		// fermo tutti i suoni
    	_root.bgsound.start&#40;&#41;;	// faccio partire la musica di sfondo
    &#125;;
    

    Con l'array delle musiche puoi controllare tutte le musiche da caricare indicando fra "virgolette" il nome del file mp3 (escluso .mp3 che viene aggiunto nella funzione seguente.

    Con la funzione onSoundComplete del pulsante faccio ripartire la musica di sfondo quando la musica richiesta è finita. Questa funzione in particolare non l'ho provata ma dovrebbe funzionare.

    I pulsanti fermano tutti i suoni creati all'inizo nel ciclo for. Con stopallsound non credo si possano controllare i suoni creati con la funzione new sound(); quindi ho creato un altro ciclo for per fermarli tutti assieme

    Si può fare anche una funzioncina per i vari pulsanti play/stop senza riscrivere tutto quel codice ma non l'ho mai fatto e mi devo documentare.

    Cmq c'è un problema di fondo che all'inizio vengono caricati tutti gli mp3 assieme, se sono molti e pesanti rischi di bloccare la linea del navigatore e comunque i play() non funzionerebbero.

    L'ideale sarebbe di caricare al volo il suono, visualizzare l'avanzamento dello scaricamento con Sound.getBytesTotal() Sound.getBytesLoaded() e al completamento far partire il suono.

    Ciao

    Mitico homeworker!
    Funziona tutto, solo una postilla... il bgsound è un loop, per farlo andare all'infinito è sufficiente mettere:
    _root.bgsound.start(0,9999);
    o bisogna scrivere qualcos'altro?
    Avrei un'altra domanda: è possibile fare in modo che quando il file è in riproduzione e un utente ritorna all'home page non riprenda da capo ma continui come stava andando? Grazie

    Ciao


  • Super User

    @cecco said:

    Funziona tutto, solo una postilla... il bgsound è un loop, per farlo andare all'infinito è sufficiente mettere:
    _root.bgsound.start(0,9999);
    o bisogna scrivere qualcos'altro?Se non lo metti dovrebbe andare all'infinito.

    @cecco said:

    Avrei un'altra domanda: è possibile fare in modo che quando il file è in riproduzione e un utente ritorna all'home page non riprenda da capo ma continui come stava andando? Grazie

    CiaoCon _global.posizione = _root.bgsound.position memorizzi in una variabile globale la posizione allo stop e la riassegni quando riparte il suono _root.bgsound.start(_global.posizione);

    Ciao