Как добавить компрессор к аудио, а затем построить график формы волны в Javascript?

Может кто-нибудь помочь мне построить график формы сжатого аудиосигнала в веб-аудио API? Я успешно построил график для аудиосигнала, но когда я пытаюсь добавить audioContext.createDynamicsCompressor(), он выдает ошибку, говоря TypeError: Argument 1 of AudioContext.createMediaElementSource does not implement interface HTMLMediaElement. Может кто-нибудь, пожалуйста, помогите мне решить эту ошибку.

var audioContext = new AudioContext();

function drawBuffer( width, height, context, buffer ) {
var data = buffer.getChannelData( 0 );
var step = Math.ceil( data.length / width );
var amp = height / 2;
for(var i=0; i < width; i++){
    var min = 1.0;
    var max = -1.0;
    for (var j=0; j<step; j++) {
        var datum = data[(i*step)+j]; 
        if (datum < min)
            min = datum;
        if (datum > max)
            max = datum;
    }
    context.fillRect(i,(1+min)*amp,1,Math.max(1,(max-min)*amp));
   }
  }

   function initAudio() {
       var audioRequest = new XMLHttpRequest();
       audioRequest.open("GET", "sounds/path", true);
       audioRequest.responseType = "arraybuffer";
       var source = audioContext.createMediaElementSource(audioRequest);

      // Create a compressor node
      var compressor = audioContext.createDynamicsCompressor();
      compressor.threshold.setValueAtTime(-50, audioContext.currentTime);
      compressor.knee.setValueAtTime(40, audioContext.currentTime);
      compressor.ratio.setValueAtTime(12, audioContext.currentTime);
      compressor.attack.setValueAtTime(0, audioContext.currentTime);
      compressor.release.setValueAtTime(0.25, audioContext.currentTime);
       audioRequest.onload = function() {

    audioContext.decodeAudioData( audioRequest.response, 
        function(buffer) { 
            var canvas = document.getElementById("view1");
            drawBuffer( canvas.width, canvas.height, canvas.getContext('2d'), buffer ); 
        } );
}
audioRequest.send();
 }

 window.addEventListener('load', initAudio );

Заранее спасибо!!!

0 ответов

Другие вопросы по тегам