Carcleo 4 Denunciar post Postado Dezembro 23, 2011 Bom pessoal, estou tentando carregar um fundo musical com AS3. Estou apanhando mas estou indo. Porem, agora preciso de uma força; Seguinte: Bom. Consegui em partes. Para carregar o som foi fazer isso: var soundClip:Sound=new Sound(); //Create a new SoundChannel Object var sndChannel:SoundChannel=new SoundChannel(); //Load sound using URLRequest soundClip.load(new URLRequest("sons/dingo.mp3")); //Create an event listener that wll update once sound has finished loading soundClip.addEventListener(Event.COMPLETE,onComplete,false,0,true); function onComplete(evt:Event):void { //Play loaded sound sndChannel=soundClip.play(); } Agora tenho outros dois problemas: 1)Como faço agora para dar play e pause nesse som usando as3? Essa pergunta é porque : nome_do_botao.onRelease = function........... não funcionou no as3. 2) Nao sei o que foi que eu fiz, mas agora meu painel de AS em todas a linhas aparece o carcter PI. É o do matemática mesmo. Como faz para tirar isso? Compartilhar este post Link para o post Compartilhar em outros sites
IAMDIX 10 Denunciar post Postado Dezembro 24, 2011 poderia colocar um checkbox para on/off e um slider para percentual do volume var canal:SoundChannel = new SoundChannel(); var _som:Sound = new Sound(); var _vol:SoundTransform = new SoundTransform(); var _arq:URLRequest = new URLRequest("nomeArquivo.mp3"); // _som.load(_arq); canal = _som.play(0,int.MAX_VALUE); // slider.addEventListener(Event.ENTER_FRAME, _volume); chk.addEventListener(Event.CHANGE, _chk); // function _volume(e:Event):void { _vol.volume = (e.target.value/100); canal.soundTransform = _vol; txt_som.text = e.target.value + "%"; } function _chk(e:Event):void { if (e.target.selected) { slider.value = 30; } else { slider.value = 0; } } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 24, 2011 Bom, consegui assim: stop(); import flash.display.MovieClip; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest var sound:Sound; var channel:SoundChannel; sound = new Sound(new URLRequest('sons/dingo.mp3')); function tocar(e:Event = null) { channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, tocar); } function parar(e:Event = null) { channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, parar); } function carregar (e:Event = null) { channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, carregar); } carregar(); toca.addEventListener(MouseEvent.CLICK, tocar); para.addEventListener(MouseEvent.CLICK, parar); Agora preciso saber como fazer uma condiçao que diga: se o som já estive tocando, o botão play não execute açao. ou seja, não starte o som novamente Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 24, 2011 Ok. Como eu faço para verificar se o som esta tocando sem ter que usar uma variavel booleana? Existe algo do tipo if(!playng) { } ? Porque se eu usar boleano, depois que o som acabar, caso eu queira tocar ele de novo não daria. A não ser que eu clikasse no stop para virar a booleana. E eu não queria isso pois o visitante pode pensar que é defeito do site e não é. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Pessoal, antes de mais nada, um Feliz Ano Novo a todos. Bom. function tocar(e:Event = null) { if (isPlaying==false) { var channel = sound.play(); var totalBytes:Number = sound.bytesTotal; var loadeBytes:Number = sound.bytesLoaded; channel.addEventListener(Event.SOUND_COMPLETE, carregar); txtBl.text =String(loadeBytes); if(loadeBytes/totalBytes<1) { isPlaying=true; } else { isPlaying=false; } } } Aqui estou tentando fazer duas coisas e não esta dando certo. 1) imprimir no campo de texto, a quantidade de bytes carregados do audio 2) setar a varfiavel booleana isPlayng para false assim que a divisão de bystes caRREGADOS pelo totalk de bytes der 1. Onde estou errando? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 26, 2011 não entendi essa ultima alteração que você fez, porque "if(loadeBytes/totalBytes<1)" ?? não bastaria você fazer isso: function tocar(e:Event = null) { channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, tocar); isPlaying=true; } function parar(e:Event = null) { channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, parar); isPlaying=false; } e pelo que vi, ao executar o tocar(), o som já esta carregado, então para que saber a quantidade de bytes nessa hora? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 O que eu estou precisando saber é se o som esta ou não em execuçao. Mas não pode ser com variavel booleana, porque se for com booleana, na hora que o som para, não tem como começar ele de novo sem clikar no baotão stop Deu pra entender mais ou menos o que eu estou precisando? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 26, 2011 hum, não entendi.... você fala do som para quando o usuario clicar em 'parar' ou quando ele acabou a musica e executa o evento SOUND_COMPLETE? explica melhor Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Seguinte\: A musica começa a tocar. duas coisas estão acontecendo: 1) o carregamento do audio (load até o complete). 2) O som saindo na caixa de som (aqui, a medida que o audio vai sendo carregado, o som vai sendo tocado. Certo? Eu preciso saber o momento certo em que a musica para de tocar e não o momento em que o arquivo termina de carregar., Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 26, 2011 entendi, para isso você já esta usando o channel.addEventListener(Event.SOUND_COMPLETE, tocar); esse evento serve para isso mesmo, e continuando, onde esta o erro? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Eder, não há erro. Eu só preciso saber, atraves de codigo AS3 se o som esta sendo executado e não se ele esta sendo carregado ou se ja carregou. Preciso disso para impossibilitar o usuario de fazer o som tocar um em cima do outro ou ainda de, ao terminar de tocar o som e o usuario terminar de ouvir a musica, ele clikar em play novamente por causa de que a varivel isPlayng booleano esta com true ainda. o Event.SOUND_COMPLETE, mostra que o download do som já se completou. O sound.bytesTotal, mostra quantos bytes tem o som baxado. O sound.bytesLoaded, mostra, a cada instante, quantos bytes foram baixados do som em questão. Agora eu pergunto: Qual é o código que me retorna se o som esta saindo na caixa de som? Ou seja, se o som esta sendo executado. Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 26, 2011 entendi, para evitar que o som toque mais de uma vez, faça isso: function tocar(e:Event = null) { if(channel){ channel.stop(); } channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, tocar); isPlaying=true; } function parar(e:Event = null) { channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, parar); isPlaying=false; } e a variável isPlaying deve servir para saber se a musica esta tocando ou não []´s Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Pois é. O código ficou assim: stop(); import flash.display.MovieClip; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; var isPlaying:Boolean = false; var sound:Sound; var channel:SoundChannel; sound = new Sound(new URLRequest('sons/dingo.mp3')); function tocar(e:Event = null) { if (isPlaying==false) { if(channel) { channel.stop(); } channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, tocar); isPlaying=true; } } function parar(e:Event = null) { if (isPlaying==true) { channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, parar); isPlaying=false; } } tocar(); isPlaying = true; toca.addEventListener(MouseEvent.CLICK, tocar); para.addEventListener(MouseEvent.CLICK, parar); Mas ainda não é isso que eu preciso. Quando o som começo a tocar, assim que terminou a reproduçao do audio, eu clickei no botão play e a musica nõ tocou de novo porque a variavel boolena isPlayng estava setada como true. Daí, não toca novamente o som pois, sgundo a booleana, mesmo que o som não esteje mais tocando, ele não toca de novo pois ja carregou todo. Entendeu? Esse é o problema. Há uma diferenã entre o som sendo carregado e o som sendo reproduzido. Preciso saber se ele esta sendo reproduzido. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Como eu faço para pegar o valor de channel.position? Eu sei que vai de 0 até 1 mas não achei no tutoriais como recuperar essew numero. Tentei assim mas da erro: var sound:Sound; var channel:SoundChannel; var posicao:Number = channel.position; sound = new Sound(new URLRequest('sons/dingo.mp3')); if ( posicao==0.8) { parar(); // esse parar(), é só paara testar se seta funcionando o if } Da o seguinte erro: TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula. at index_fla::MainTimeline/frame2() Como corrijo isso? Compartilhar este post Link para o post Compartilhar em outros sites
Eder Fortunato 15 Denunciar post Postado Dezembro 26, 2011 antes de tentar resolver de outra forma, é bom verificar pq ele não executa o Event.SOUND_COMPLETE quando a musica termina sozinha se você colocar um trace() dentro da função parar(), ele executa quando o som termina de tocar? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Bom. O SOUND_COMPLETE acontece quando o som acaba de carregar (loadedbytes =100%) ou quando a musica acaba de tocar(sair o som na caixa-reproduzir)? Eis o meu codigo completo. Talvez eu possa estar errando em alguma coisa: stop(); import flash.display.MovieClip; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; var isPlaying:Boolean = false; var sound:Sound; var channel:SoundChannel; sound = new Sound(new URLRequest('sons/dingo.mp3')); function tocar(e:Event = null) { if (isPlaying==false) { if(channel) { channel.stop(); } channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, tocar); isPlaying=true; } } function parar(e:Event = null) { if (isPlaying==true) { channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, parar); isPlaying=false; } } tocar(); isPlaying = true; toca.addEventListener(MouseEvent.CLICK, tocar); para.addEventListener(MouseEvent.CLICK, parar); stop();// Declação de Variáveis e Incialização da página HOME var link:URLRequest=new URLRequest("inicio.swf"); mcCarrega.gotoAndPlay(2); // Eventos dos Botões inicio.addEventListener(MouseEvent.CLICK, clique); empresa.addEventListener(MouseEvent.CLICK, clique); produtos.addEventListener(MouseEvent.CLICK, clique); infuteis.addEventListener(MouseEvent.CLICK, clique); ambiental.addEventListener(MouseEvent.CLICK, clique); atuacao.addEventListener(MouseEvent.CLICK, clique); contato.addEventListener(MouseEvent.CLICK, clique); // Função clique que troca o valor da variável LINK function clique(evt:MouseEvent):void { switch (evt.currentTarget) { case (inicio): link=new URLRequest("inicio.swf"); break; case (empresa): link=new URLRequest("empresa.swf"); break; case (produtos): link=new URLRequest("produtos.swf"); break; case (infuteis): link=new URLRequest("infuteis.swf"); break; case (ambiental): link=new URLRequest("ambiental.swf"); break; case (atuacao): link=new URLRequest("atuacao.swf"); break; case (contato): link=new URLRequest("contato.swf"); break; } mcCarrega.gotoAndPlay(2); } Caso queira testar, ai vai o link. http://gapde.com.br/bateriasadvance.com.br/ Se voce deixar a musica terminar de tocar (cerca de 2 minutos) e depois, clikar em play novamnente, ela não vai tocar. Só se voce clikar em stop e depois em play. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 26, 2011 Bom. consegui Acontece que eu estava pensando que o SOUND_COMPLETE, se referia ao som terminado seu download e não o som em execuçao ao seu termino. Então, fiz assim na funçao toca: function tocar(e:Event = null) { if (isPlaying==false) { if(channel) { channel.stop(); } channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE, parar); (AQUI ESTVA PONDO REFERENCIA A FUNÇÃO TOCAR EM VEZ DE A FUNÇAO PARAR. AQUI O ERRO.) isPlaying=true; } } Bom obrigado a todos que ajudarma e um Feliz Ano Novo Compartilhar este post Link para o post Compartilhar em outros sites