Ir para conteúdo
Fórum Script Brasil
  • 0

ajuda para manipular audio


Filipe Queiroz

Pergunta

E ae pessoal,

Preciso de ajuda com a manipulação de áudio. Eu quero fazer um aplicativo que é capaz de emitir um som com uma frequência específica.

Meu aplicativo tem o Google Earth incorporar e enquanto o usuário está movendo o mouse sobre o mapa, meu app pega a altitude do relevo no ponto em que o mouse está.

Então eu converto a altitude para uma frequência entre 20Hz e 20kHz.

Até aqui, o meu aplicativo funciona bem. Para entender melhor, pode copiar o código abaixo e experimentar.

Meu problema é alterar a freqüência de áudio em tempo real para a freqüência específica (obtido na última etapa). A frequência muda a cada movimento do mouse.

Alguém sabe o que a língua que eu posso fazer isso? Eu posso fazer com javascript?

Se não der para alterar a frequência do audio, gostaria de alterar o volume do som.

Por exemplo, se o mouse está no ponto mais alto da terra, o som vai ficar no último volume. Se o mouse estiver ao nível do mar, o som vai ficar com volume mais baixo.

Meu aplicativo tem o seguinte código até agora:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="JS Editor v9, http://www.c-point.com" />
    <title>mousemove_listener_example.html
    </title>
    <meta content="text/html; charset=us-ascii" http-equiv="Content-Type" />
&lt;script src=
"http://www.google.com/jsapi?key=ABQIAAAA5El50zA4PeDTEMlv-sXFfRSsTL4WIgxhMZ0ZK_kHjwHeQuOD4xTdBhxbkZWuzyYTVeclkwYHpb17ZQ"
      type="text/javascript"
      xml:space="preserve">
</script>
&lt;script type="text/javascript" xml:space="preserve">
   var ge;
   google.load("earth", "1");
   
   function init() {
     google.earth.createInstance('map3d', initCB, failureCB);
   }
   
   function initCB(instance) {
      ge = instance;
      ge.getWindow().setVisibility(true);
      
      //Define what happens when a mousemove is detected on the globe.
      var highestFrequency = 20000; //Highest frequency audible by human
      var lowestFrequency = 20; //Lowest frequency audible by human
      var frequenceRange = highestFrequency - lowestFrequency;
      var highestGlobePoint = 8850; //Highest point on the globe
      var freq;
      var currentAlt;
      
      function recordAltitude(event) {
         currentAlt = event.getAltitude();
         //maxAlt = Math.max(maxAlt, currentAlt);
         if ( currentAlt <= 0 )
            freq = 20;
         else
            freq = (currentAlt / highestGlobePoint) * frequenceRange + lowestFrequency;
            
         document.getElementById('altitude').innerHTML = 
                   '<p>Current altitude: ' + currentAlt +
                   '<br/> Frequency: ' + freq +
                   '<\/p>';
        
      }
      // Listen to the mousemove event on the globe.
      google.earth.addEventListener(ge.getGlobe(), 'mousemove', recordAltitude);
   }
   function failureCB(errorCode) {   }
   
   google.setOnLoadCallback(init);
</script>
&lt;script type="text/javascript" src="http://www.google.com/uds/?file=earth&v=1" xml:space="preserve">
</script>
&lt;script type="text/javascript" src="./mousemove_listener_example_files/default.I.js" xml:space="preserve">
</script>
  </head>
  <body background="" alink="#0080FF" link="blue" bgcolor="white" vlink="silver">
  
    
    <!-- Tabela do Mapa 3D -->
    <table>
      <tbody>
        <tr> <td>
              <div id="map3d" style="WIDTH: 600px; HEIGHT: 400px">
              </div>
             </td>
             <td>
               <div id="altitude">
                <p>Current altitude: N/A <br /> Frequency: N/A</p>
               </div>
             </td>
        </tr>
      </tbody>
    </table>
    
    <object align=left classid=CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95 id="./audio/testando.wav">
        <param name="FileName" value="./audio/testando.wav">
        <param name="AutoRewind" value="true">
        <param name="AutoStart" value="false">
        <param name="ClickToPlay" value="true">
        <param name="Mute" value="false">
        <param name="ShowControls" value="true">
        <param name="ShowDisplay" value="true">
        <param name="ShowTracker" value="true">
        <param name="PlayCount" value="1">
    </object>
    
  </body>
</html>

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Pode usar o ajax, que faz requisições assíncronas com o Server.

Rafael, eu queria evitar o uso do servidor. Queria que o processamento fosse local.

E consegui.

Conseguindo fazendo um applet e deixando ele na pagina com tamanho 1px por 1px.

Enquanto eu arrasto o mouse eu envio os dados pro applet.

O codigo do applet eu não vou postar por agora não porque ele será minha monografia e fico com receio de publicar agora. Depois que eu defender eu posto o applet aqui.

O codigo ficou assim:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="JS Editor v9, http://www.c-point.com" />
    <title>Sistema Auxiliador de Deficientes Visuais</title>
    <meta content="text/html; charset=us-ascii" http-equiv="Content-Type" />
<script src=
"http://www.google.com/jsapi?key=ABQIAAAA5El50zA4PeDTEMlv-sXFfRSsTL4WIgxhMZ0ZK_kHjwHeQuOD4xTdBhxbkZWuzyYTVeclkwYHpb17ZQ"
      type="text/javascript"
      xml:space="preserve">
</script>
<script type="text/javascript" xml:space="preserve">
   var ge;
   google.load("earth", "1");
   
   function init() {
     google.earth.createInstance('map3d', initCB, failureCB);
   }
   
   function initCB(instance) {
      ge = instance;
      ge.getWindow().setVisibility(true);
      
      //Define what happens when a mousemove is detected on the globe.
      var highestFrequency = 20000; //Highest frequency audible by human
      var lowestFrequency = 20; //Lowest frequency audible by human
      var frequenceRange = highestFrequency - lowestFrequency;
      var highestGlobePoint = 8850; //Highest point on the globe
      var freq;
      var currentAlt;
      
      function recordAltitude(event) {
         currentAlt = event.getAltitude();
         //maxAlt = Math.max(maxAlt, currentAlt);
         if ( currentAlt <= 0 )
            freq = 20;
         else
            freq = (currentAlt / highestGlobePoint) * frequenceRange + lowestFrequency;
            
         document.getElementById('altitude').innerHTML = 
                   '<p>Current altitude: ' + currentAlt +
                   '<br/> Frequency: ' + freq + '<\/p>';
         document.meuapplet.alteraSom( freq );
        
      }
      // Listen to the mousemove event on the globe.
      google.earth.addEventListener(ge.getGlobe(), 'mousemove', recordAltitude);
   }
   function failureCB(errorCode) {   }
   
   google.setOnLoadCallback(init);
</script>
<script type="text/javascript" src="http://www.google.com/uds/?file=earth&amp;v=1" xml:space="preserve">
</script>
<script type="text/javascript" src="./mousemove_listener_example_files/default.I.js" xml:space="preserve">
</script>
  </head>
  <body background="" alink="#0080FF" link="blue" bgcolor="white" vlink="silver">
  
    
    <!-- Tabela do Mapa 3D -->
    <table>
      <tbody>
        <tr> <td>
              <div id="map3d" style="WIDTH: 800px; HEIGHT: 600px" onMouseEnter="document.meuapplet.ligaSom();" onMouseOut="document.meuapplet.desligaSom();">
              </div>
             </td>
             <td>
               <div id="altitude">
                <p>Current altitude: N/A <br /> Frequency: N/A</p>
               </div>
             </td>
        </tr>
      </tbody>
    </table>
    <!-- Fim Tabela do Mapa 3D-->
    
    <applet name="meuapplet" code=Fourier.class width=1 height=1>
      Você deve instalar a versão mais recente do Java. <a href="http://java.com/pt_BR/download/index.jsp"> Baixa aqui a ultima versão. </a>
    </applet><p>   
  </body>
</html>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,1k
×
×
  • Criar Novo...