2014-04-16 23 views

risposta

8

"Visualizzazione della frequenza" può significare molte cose. In realtà, la mia demo di PitchDetect NON usa una trasformata di Fourier: utilizza l'autocorrelazione. Ma questo ti darà solo un passo unico, ad alta precisione. Se il tuo segnale ha più note simultanee - beh, questo è un problema difficile.

Se si desidera visualizzare un'analisi di frequenza dell'ingresso microfono live, consultare http://webaudiodemos.appspot.com/AudioRecorder/index.html (codice https://github.com/cwilso/AudioRecorder). Questo utilizza la FFT incorporata in RealtimeAnalyser per mostrare un grafico dello spettro di frequenza di un segnale audio dal vivo.

7

scrivo un semplice codice che si può mostrare la frequenza nella tua pagina web:

<body> 
<audio id="audio" src="2.mp3"></audio> 
<div id="bar"> 
    <div id="P10" class="p"></div> 
    <div id="P20" class="p"></div> 
    <div id="P30" class="p"></div> 
    <div id="P40" class="p"></div> 
    <div id="P50" class="p"></div> 
    <div id="P60" class="p"></div> 
    <div id="P70" class="p"></div> 
    <div id="P80" class="p"></div> 
    <div id="P90" class="p"></div> 
</div> 

E script è

<style> 
    #bar { 
     position: fixed; 
     top: 20%; 
     left: 40%; 
     width: 40%; 
     height: 40%; 
     -webkit-transition: 0.1s ease all; 
    } 

    .p { 
     background-color: blue; 
     height: 100%; 
     width: 10%; 
     float: left; 
    } 

</style> 
<script> 
    window.onload = function() { 
     audioCtx = new AudioContext(); 
     analyser = audioCtx.createAnalyser(); 
     source = audioCtx.createMediaElementSource(audio); 
     source.connect(analyser); 
     analyser.connect(audioCtx.destination); 
     analyser.fftSize = 32; 

     var frequencyData = new Uint8Array(analyser.frequencyBinCount); 

     function renderFrame() { 
      analyser.getByteFrequencyData(frequencyData); 
      P10.style.height = ((frequencyData[0] * 100)/256) + "%"; 
      P20.style.height = ((frequencyData[1] * 100)/256) + "%"; 
      P30.style.height = ((frequencyData[2] * 100)/256) + "%"; 
      P40.style.height = ((frequencyData[3] * 100)/256) + "%"; 
      P50.style.height = ((frequencyData[4] * 100)/256) + "%"; 
      P60.style.height = ((frequencyData[5] * 100)/256) + "%"; 
      P70.style.height = ((frequencyData[6] * 100)/256) + "%"; 
      P80.style.height = ((frequencyData[7] * 100)/256) + "%"; 
      P90.style.height = ((frequencyData[8] * 100)/256) + "%"; 
      console.log(frequencyData) 
      requestAnimationFrame(renderFrame); 
     } 
     audio.pause(); 
     audio.play(); 
     renderFrame(); 
    }; 
</script> 

Buona fortuna.

+0

Stavo cercando un esempio semplice come questo con barre, grazie! – Macumbaomuerte

+0

Non ci posso credere, è perfetto! Grazie ! –

Problemi correlati