Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bacsh

Problemas com SOM em AS 3

Recommended Posts

Olá galera, meu primeiro post aqui no fórum, sempre tirei muitas dúvidas minhas aqui no imaster, mas nunca fiz uma conta... então primeiramente obrigado por tudo que vocês já me ajudaram...

Vamos ao problema:

 

Eu tenho um site totalmente em flash em AS 3.0 que precisa executar 2 sons separadamente um de fundo e outro em um player com xml, o problema é que não consigo separa-los!

 

Bom, eu tenho a time line principal:

http://img268.imageshack.us/i/36375041.png/

 

ali no frame 1 eu tenho a seguinte action:

 

var default_volume:Number = 0.60; // 0.00 to 1.00

var req:URLRequest = new URLRequest("Jingle_Play_Jingles.mp3");

var bg_music:Sound = new Sound(req);

var music_channel:SoundChannel = bg_music.play(100, 10000);

var music_volume:SoundTransform = new SoundTransform();

 

music_volume.volume = default_volume;

music_channel.soundTransform = music_volume;

sound_control.stop();

sound_control.addEventListener( MouseEvent.CLICK, play_pause );

function play_pause(e:MouseEvent):void

{

music_volume.volume = default_volume;

 

if( e.target.currentFrame == 1 )

music_volume.volume = 0;

 

music_channel.soundTransform = music_volume;

e.target.play();

}

 

esse código carrega meu som que se chama: Jingle_Play_Jingles.mp3 e faz a ligação com o clipe de filme: sound_control que é isso:

http://img265.imageshack.us/i/666hk.png/

 

meio que um botão que eu consigo parar a música e iniciar de novo da onde parou...

 

Agora no frame 30 eu tenho um movie clip que tem todas minhas páginas:

http://img96.imageshack.us/i/22228829.png/

 

no frame 3 eu tenho o clipe de filme com o player dentro:

http://img254.imageshack.us/i/80276768.png/

 

nessa action ali em cima eu tenho o seguinte código:

 

 

 

 

var auto_play:Boolean = false;

var i:Number;

var total_items:Number;

var current_no:Number = 0;

var flashmo_xml:XML;

var flashmo_item_list = new Array();

 

var flashmo_s:Sound = new Sound();

var flashmo_sc:SoundChannel = new SoundChannel();

var flashmo_st:SoundTransform = new SoundTransform();

var flashmo_cpi:Number = 0;

var flashmo_lpi:Number = -1;

var flashmo_pos:Number = 0;

var item_paused:Boolean = false;

var playback_min:uint;

var playback_sec:uint;

var total_min:uint;

var total_sec:uint;

var estimated_length:int;

var drag_area:Rectangle = new Rectangle( 0, status_bar.status_bar_scroller.y, status_bar.load_progress_bar.width, 0 );

 

status_bar.visible = false;

flashmo_volume.visible = false;

flashmo_previous.visible = false;

flashmo_next.visible = false;

flashmo_play.visible = false;

flashmo_pause.visible = false;

 

current_item_title.text = "Loading XML Data...";

 

status_bar.status_bar_scroller.buttonMode = true;

status_bar.status_bar_scroller.addEventListener( MouseEvent.MOUSE_DOWN, scroller_drag );

status_bar.status_bar_scroller.addEventListener( MouseEvent.MOUSE_UP, scroller_drop );

status_bar.fm_bar.addEventListener( Event.ENTER_FRAME, item_progress );

status_bar.clickable_area.buttonMode = true;

status_bar.clickable_area.addEventListener( MouseEvent.MOUSE_DOWN, position_seek );

status_bar.load_progress_bar.addEventListener( Event.ENTER_FRAME, drag_area_progress );

 

function load_xml( xml_file:String ):void

{

var xml_loader:URLLoader = new URLLoader();

xml_loader.load( new URLRequest( xml_file ) );

xml_loader.addEventListener(Event.COMPLETE, read_xml);

}

 

function read_xml( e:Event ):void

{

flashmo_xml = new XML(e.target.data);

total_items = flashmo_xml.song.length();

 

for( i = 0; i < total_items; i++ )

{

flashmo_item_list.push( {

url: flashmo_xml.song.url.toString(),

artist: flashmo_xml.song.artist.toString(),

track: flashmo_xml.song.track.toString()

} );

}

play_item();

add_controls();

}

 

function add_controls():void

{

flashmo_previous.addEventListener(MouseEvent.CLICK, on_click_prev);

flashmo_pause.addEventListener(MouseEvent.CLICK, on_click_pause);

flashmo_play.addEventListener(MouseEvent.CLICK, on_click_play);

flashmo_next.addEventListener(MouseEvent.CLICK, on_click_next);

 

status_bar.visible = true;

flashmo_volume.visible = true;

flashmo_previous.visible = true;

flashmo_next.visible = true;

 

if( auto_play )

{

flashmo_pause.visible = true;

flashmo_play.visible = false;

}

else

{

flashmo_play.visible = true;

flashmo_pause.visible = false;

}

}

function play_item():void

{

status_bar.load_progress_bar.removeEventListener(Event.ENTER_FRAME, drag_area_progress);

flashmo_s.removeEventListener(ProgressEvent.PROGRESS, load_progress);

 

status_bar.load_progress_bar.scaleX = status_bar.clickable_area.scaleX =

status_bar.fm_bar.width = status_bar.status_bar_scroller.x = 0;

 

flashmo_sc.stop();

flashmo_s = new Sound();

flashmo_sc = new SoundChannel();

 

flashmo_volume.mute.gotoAndStop("on");

if( flashmo_volume.flashmo_scroller.x == 0 )

flashmo_volume.flashmo_scroller.x = 60;

 

flashmo_st.volume = flashmo_volume.flashmo_scroller.x /

( flashmo_volume.flashmo_scrollable_area.width - flashmo_volume.flashmo_scroller.width );

flashmo_s.load( new URLRequest( flashmo_item_list[flashmo_cpi].url ) );

 

status_bar.load_progress_bar.addEventListener( Event.ENTER_FRAME, drag_area_progress );

 

if( flashmo_cpi != 0 || auto_play )

{

flashmo_sc = flashmo_s.play();

item_paused = false;

flashmo_pause.visible = true;

flashmo_play.visible = false;

}

else

{

flashmo_pause.visible = false;

flashmo_play.visible = true;

}

 

flashmo_sc.soundTransform = flashmo_st;

flashmo_sc.addEventListener(Event.SOUND_COMPLETE, next_item_handler);

flashmo_s.addEventListener(ProgressEvent.PROGRESS, load_progress);

 

flashmo_lpi = flashmo_cpi;

current_item_text.text = (flashmo_cpi+1) + " de " + total_items;

current_item_title.text = flashmo_item_list[flashmo_cpi].artist

+ " - " + flashmo_item_list[flashmo_cpi].track;

}

 

function next_item_handler(e:Event)

{

play_next_item();

}

 

function load_progress(e:ProgressEvent):void

{

var load_ratio:Number = e.bytesLoaded / e.bytesTotal;

status_bar.load_progress_bar.scaleX = status_bar.clickable_area.scaleX = load_ratio;

 

if( load_ratio >= 1 )

{

flashmo_s.removeEventListener( Event.ENTER_FRAME, load_progress );

}

}

 

function on_click_pause( me:MouseEvent ):void

{

flashmo_play.visible = true;

flashmo_pause.visible = false;

pause_it();

 

}

 

function on_click_play( me:MouseEvent ):void

{

flashmo_pause.visible = true;

flashmo_play.visible = false;

unpause_it();

}

 

function pause_it():void

{

item_paused = true;

flashmo_pos = flashmo_sc.position;

flashmo_sc.stop();

flashmo_sc.removeEventListener(Event.SOUND_COMPLETE, next_item_handler);

}

 

function unpause_it():void

{

item_paused = false;

flashmo_sc = flashmo_s.play(flashmo_pos);

flashmo_sc.addEventListener(Event.SOUND_COMPLETE, next_item_handler);

}

 

function on_click_next( me:MouseEvent ):void

{

play_next_item();

}

 

function on_click_prev( me:MouseEvent ):void

{

play_prev_item();

}

 

function play_next_item():void

{

if( flashmo_cpi < total_items - 1 )

flashmo_cpi++;

else

flashmo_cpi = 0;

 

play_item();

}

 

function play_prev_item():void

{

if(flashmo_cpi > 0)

flashmo_cpi--;

else

flashmo_cpi = total_items - 1;

 

play_item();

}

 

function scroller_drag( me:MouseEvent ):void

{

me.target.startDrag(false, drag_area);

status_bar.status_bar_scroller.addEventListener( Event.ENTER_FRAME, on_scroll );

status_bar.fm_bar.removeEventListener( Event.ENTER_FRAME, item_progress );

stage.addEventListener( MouseEvent.MOUSE_UP, up );

}

 

function scroller_drop( me:MouseEvent ):void

{

me.target.stopDrag();

}

 

function position_seek( me:MouseEvent ):void

{

status_bar.status_bar_scroller.startDrag(true, drag_area);

status_bar.status_bar_scroller.addEventListener( Event.ENTER_FRAME, on_scroll );

status_bar.fm_bar.removeEventListener( Event.ENTER_FRAME, item_progress );

stage.addEventListener( MouseEvent.MOUSE_UP, up );

}

 

function up( me:MouseEvent ):void

{

status_bar.status_bar_scroller.stopDrag();

set_progress();

 

status_bar.fm_bar.addEventListener( Event.ENTER_FRAME, item_progress );

status_bar.status_bar_scroller.removeEventListener( Event.ENTER_FRAME, on_scroll );

stage.removeEventListener( MouseEvent.MOUSE_UP, up );

}

 

function on_scroll( e:Event ):void

{

status_bar.fm_bar.width = status_bar.status_bar_scroller.x;

var playback_ratio:Number = ( status_bar.fm_bar.width / status_bar.load_progress_bar_bg.width )

* estimated_length * 0.001;

 

playback_min = Math.floor(playback_ratio / 60);

playback_sec = Math.floor(playback_ratio % 60);

 

status_bar.status_text.text = pad_zero(playback_min) + ":" + pad_zero(playback_sec)

+ " / " + pad_zero(total_min) + ":" + pad_zero(total_sec);

}

 

function set_progress():void

{

var load_time:Number = flashmo_s.bytesLoaded / flashmo_s.bytesTotal;

var estimated_length:int = Math.ceil( flashmo_s.length / load_time );

var pos:Number = estimated_length * ( status_bar.status_bar_scroller.x / status_bar.load_progress_bar_bg.width );

 

if( !item_paused )

{

if( Math.ceil(pos) == estimated_length )

{

play_next_item();

}

else

{

flashmo_sc.stop();

flashmo_sc = flashmo_s.play(pos);

flashmo_sc.addEventListener( Event.SOUND_COMPLETE, next_item_handler );

}

}

else

{

if( pos == estimated_length )

pos = pos - 1;

flashmo_pos = pos;

}

}

 

function item_progress( e:Event ):void

{

if( !item_paused )

{

var load_time:Number = flashmo_s.bytesLoaded / flashmo_s.bytesTotal;

estimated_length = Math.ceil( flashmo_s.length / load_time );

 

playback_min = Math.floor( ( flashmo_sc.position * 0.001 ) / 60);

playback_sec = Math.floor( ( flashmo_sc.position * 0.001 ) % 60);

total_min = Math.floor( ( estimated_length * 0.001 ) / 60 );

total_sec = Math.floor( ( estimated_length * 0.001 ) % 60 );

 

status_bar.fm_bar.width = Math.round( flashmo_sc.position / flashmo_s.length * status_bar.load_progress_bar.width );

status_bar.status_bar_scroller.x = status_bar.fm_bar.width;

status_bar.status_text.text = pad_zero(playback_min) + ":" + pad_zero(playback_sec) + " / " +

pad_zero(total_min) + ":" + pad_zero(total_sec) ;

}

}

 

function drag_area_progress( e:Event ):void

{

drag_area = new Rectangle(0, status_bar.status_bar_scroller.y, status_bar.load_progress_bar.width, 0);

 

if( status_bar.load_progress_bar.width == status_bar.load_progress_bar_bg.width )

status_bar.load_progress_bar.removeEventListener( Event.ENTER_FRAME, drag_area_progress );

}

 

function pad_zero( str_to_pad:Number ):String

{

if(str_to_pad < 10)

return "0" + str_to_pad;

else

return String( str_to_pad );

}

 

 

O que eu quero?

Já como é muitas coisas... vou fazer uma lista

 

1° quando eu entrar na página com o player e apertar o Play pra iniciar a música, a música de fundo deve parar.

2° estou ouvindo a música do player e resolvi parar... então retorna a música de fundo.

3° estou ouvindo a música do player e clickei em "voltar para a página inicial" a música do player deve parar e voltar a música do fundo.

4° o botão de "voltar para a página inicial" se repeti para as de mais páginas, então não posso usar stop all sounds e tocar o player de novo, pois tenho que considerar as outras páginas do site.

 

Acho que é isso, já tentei de tudo, consegui completar os 3 primeiros passos, o problema é justamente o quarto, pois fiz para quando clicar no Play do Player todos os sons pararem e o som dele começar, e quando clickava em sair o som parava e iniciava o fundo, OK.

Só que se eu fosse em outra página, eu iria abrir a página e quando quisesse voltar para o menu o som ia parar e começar de novo...

 

eu sei que ficou meio difícil de entender pois é meu primeiro post, vou disponibilizar o arquivo para facilitar o entendimento.

 

http://www.megaupload.com/?d=OCQPMSX9

 

Espero realmente que possam me ajudar, pois queria o site 100%, sabe como é cliente, pensa que é só aperta um botão e o som para e outro começa...

 

Desde já agradeço

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os templates habituais do flashmo usam som interno com um loop e um playerzinho on/off.

 

Misturar isso em uma página com player de arquivos externos com carregamento via XML é outra história.

 

 

Um action para acionar 2 players, com carregamento diversos (interno e externo) é pedir milagre.

 

 

Melhor clicar em off no interno para depois acionar o Play do externo.

 

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os templates habituais do flashmo usam som interno com um loop e um playerzinho on/off.

 

Misturar isso em uma página com player de arquivos externos com carregamento via XML é outra história.

 

 

Um action para acionar 2 players, com carregamento diversos (interno e externo) é pedir milagre.

 

 

Melhor clicar em off no interno para depois acionar o Play do externo.

 

 

 

Abraços

 

Poisé Elektra, eu modifiquei o arquivo do som interno pra puxar um externo e funcionou, não achei que ia ser tão difícil de fazer uma função para parar somente um dos players quando clickasse em voltar para página, achei que era algo relacionado a instânciar o som a ser parado, mas pelo jeito estava errado, é muito mais difícil, mesmo assim obrigado pela resposta, não sei porque mas achei que hoje ia entrar no imaster e ia achar a solução pro meu problema, mas como você mesmo disse, acho que só com um milagre!

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.