Ir para conteúdo

POWERED BY:

Arquivado

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

michelmfreitas

[Resolvido] Controle do som

Recommended Posts

Olá pessoal, estou com uma dúvida quanto ao controle de som. Não achei nada quanto a esse erro na net.

 

Preciso que, de acordo com a movimentação do mouse no eixo Y (mouseY) o som carregado possa ser executado, com intervalo de 2 seg em loop, aumentando a velocidade enquanto o mouseY vá pra baixo, ou diminuindo caso o mouse vá pra cima.

 

Explicando um pouco mais simples caso não ficou bem explicado:

 

Tenho um som "pi" que fica apitando... tipo sensor de estacionamento... caso o mouse vá chegando mais pra baixo na tela, esse som vai ficando mais rápido... pi pi pi pi pi.... (rsss)

 

Não consegui avançar mais do que este código.... o som fica em loop infinito...

 

Eis o código atual, com o som carregado apenas:

 

import flash.events.MouseEvent;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.media.SoundTransform;

var musica:URLRequest = new URLRequest("teste.mp3");
var sound:Sound = new Sound();
var soundControl:SoundChannel = new SoundChannel();
var soundVelocidade:SoundTransform = new SoundTransform();
var velocidade:Number = 1;

sound.load(musica);

stage.addEventListener(MouseEvent.MOUSE_MOVE, Inicial);

function Inicial(e:Event):void{
playSound(3);
}

function playSound(num:Number):void{
sound.play(num);
soundControl.addEventListener(Event.SOUND_COMPLETE, onPlayBackComplete);
}


function onPlayBackComplete(e:Event):void{
trace('acabou o som');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar um enter frame, para verificar de tempo em tempo o intervalo de tempo entre um apito e outro e parar o que estiver sendo execultado e execultar outro.

 

var tempo:Number = 0;

addEventListener(Event.ENTER_FRAME,update);

...

 

function update(e:Event):void{

var tempo2:Number ;

 

tempo2 = Stage.stageHeight - mouseY/5 +50;

if(tempo >tempo2){

 

sound = new som();

soundControl.stop();

soundControl = sound.play();

tempo = 0;

}

tempo +=1;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar um enter frame, para verificar de tempo em tempo o intervalo de tempo entre um apito e outro e parar o que estiver sendo execultado e execultar outro.

 

var tempo:Number = 0;

addEventListener(Event.ENTER_FRAME,update);

...

 

function update(e:Event):void{

var tempo2:Number ;

 

tempo2 = Stage.stageHeight - mouseY/5 +50;

if(tempo >tempo2){

 

sound = new som();

soundControl.stop();

soundControl = sound.play();

tempo = 0;

}

tempo +=1;

}

 

Não entendi muito bem, chefe... Porém, não funcionou...

 

import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.media.SoundTransform;
import flash.text.TextField;



var musica:URLRequest = new URLRequest("sensor.mp3");
var sound:Sound = new Sound();
var soundControl:SoundChannel = new SoundChannel();
var soundVelocidade:SoundTransform = new SoundTransform();
var tempo:Number = 0;
var isPlaying:Boolean = new Boolean();
var contador:Number = 300;



sound.load(musica);


stage.addEventListener(MouseEvent.MOUSE_MOVE, Inicial);

function Inicial(e:Event):void{
var numero:Number = contador-mouseY;
numero = (numero*10)/100;
if(numero>=0){
	led.text = ""+numero;
}else{
	led.text = "0";
}

if(mouseY < 50){
	ExibeSensor(img2);
	//playSound(3);
}else if(mouseY > 50 && mouseY < 100){
	ExibeSensor(img3);
	//playSound(3);
}else if(mouseY > 100 && mouseY < 150){
	ExibeSensor(img4);
	//playSound(3);
}else if(mouseY > 150 && mouseY < 200){
	ExibeSensor(img5);
	//playSound(3);
}else if(mouseY > 200 && mouseY < 250){
	ExibeSensor(img6);
	//playSound(3);
}else if(mouseY > 300){
	ExibeSensor(img7);
	addEventListener(Event.ENTER_FRAME, update);
}

}

function update(e:Event):void{
var tempo2:Number ;

tempo2 = 400 - mouseY/5 +50;
if(tempo >tempo2){
soundControl.stop();
soundControl = sound.play();
tempo = 0;
}
tempo +=1;

}


function ExibeSensor(item:Object){
img1.alpha = 0;
img2.alpha = 0;
img3.alpha = 0;
img4.alpha = 0;
img5.alpha = 0;
img6.alpha = 0;
img7.alpha = 0;
item.alpha = 1;
}

function roundDecimal(num:Number, precision:int):Number{

var decimal:Number = Math.pow(10, precision);

return Math.round(decimal* num) / decimal;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz umas alterações:

 

Já testei o script e ta pegando:

http://megaswf.com/serve/2272844

var tempo:Number=0;
var sound;
var soundControl;
addEventListener(Event.ENTER_FRAME,update);
function update(e:Event):void {
var tempo2:Number;

tempo2=(stage.stageHeight-mouseY) +50;
trace(tempo + "  " + tempo2);
if (tempo>tempo2) {

	sound = new som();
	if(soundControl as flash.media.SoundChannel){soundControl.stop();
	}soundControl=sound.play();
	tempo=0;
	trace("play@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
tempo+=10;
}

 

Recomendo fazer uma verificação se o mouse está no stage para não ficar apitando quando o usuário estiver apontando pra fora.

 

 

Usei no exemplo um fla com nada no palco, o som na bliblioteca( som ) e o script.

E o som que usei foi o barulho de erro do windowns( está em c:\windows\media\ )

 

 

 

 

 

EDIT:

 

esqueci de explicar o script:

 

Nas 4 primeiras linhas declaro as variaveis e crio o evento ENTER_FRAME.

 

A variavel tempo vai servir para contar os frames, assim vai dar para calcular o tempo entre um apito e outro.

 

Já na função update, tem a var tempo2 onde é calculada o tempo de intervalo entre apitos de acordo com a posição do mouse.

stage.stageHeigth é a altura do stage.

 

A cada frame é adicionado 10 ao tempo.

 

No update é verificado com o if se tempo é maior que o tempo2.

 

caso seje, para o apito, e toca outra vez ele.

 

Outra coisa que você pode fazer:

verificar a distância do mouse com um movieclip qualquer e fazer apitar mais rápido quando estiver mais perto.

 

 

Eu acredito que de para adaptar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Reabrindo!

 

Surgiu uma nova dúvida: Quero que toque um som mp3 diferente após o MouseY ser maior que 300. Porém, somente o som, uma única vez, sem repetição.

 

Removi o EventListener, dei load em nova música e deu erro.

 

Error: Error #2037: As funções chamadas na seqüência incorreta ou a chamada anterior não teve êxito.
at flash.media::Sound/_load()
at flash.media::Sound/load()

 

Pode me dar mais um help? =)

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.