@kot123123
я кот

Как исправить decodeAudioData of undefined at FileReader.reader.onload?

Получаю данную ошибку
Uncaught TypeError: Cannot read property 'decodeAudioData' of undefined at FileReader.reader.onload (lvl.js:131)

В этой части кода
this.context = new AudioContext();
  this.mt;

  this.GetMt = function(){
    async function pasteAudio() {
      var blob = await (await fetch('scripts/testSound.mp3')).blob();

      dt = new DataTransfer();
      dt.items.add(new File([blob], 'scripts/testSound.mp3', {type: 'audio/mpeg'}));

      var files = dt.files;

      if (files.length == 0) return;
      var reader = new FileReader();

      reader.onload = function(fileEvent) {
       this.context.decodeAudioData(fileEvent.target.result, calcTempo);
      }
      reader.readAsArrayBuffer(files[0]);
    }
    pasteAudio();

    var calcTempo = function (buffer) {
      var audioData = [];
      // Take the average of the two channels
      if (buffer.numberOfChannels == 2) {
        var channel1Data = buffer.getChannelData(0);
        var channel2Data = buffer.getChannelData(1);
        var length = channel1Data.length;
        for (var i = 0; i < length; i++) {
          audioData[i] = (channel1Data[i] + channel2Data[i]) / 2;
        }
      } else {
        audioData = buffer.getChannelData(0);
      }

     this.mt = new MusicTempo(audioData);


      let wave1Spd = map(mt.tempo,0,350,1,25);
      let wave2Spd = map(mt.tempo,0,350,1,20);
      let wave3Spd = map(mt.tempo,0,350,1,15);
      root.style.setProperty('--spd', wave1Spd+"s");
      root.style.setProperty('--spd2', wave2Spd+"s");
      root.style.setProperty('--spd3', wave3Spd+"s");
      console.log(mt.tempo);

      this.isStarted = true;
      this.song.play();


      /*const audio = new Audio()
      audio.src = 'scripts/testSound.mp3'
      audio.play();
      textAlign(CENTER);
      textSize(32);
      fill(200);
      text('bpm~ '+mt.tempo, windowWidth/2, windowHeight/2);*/

    }
    return true;
  }

в этой строчке
this.context.decodeAudioData(fileEvent.target.result, calcTempo);


До этого эта часть работала, но мне надо было кое-как отредачить код и это видно по приставкам
this.
после чего я начал получать данную ошибку, как я понял проблема с FileReader, но как решить я понятия не имею.
Заранее спасибо за чтение и любую помощь!
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
@kot123123 Автор вопроса
я кот
я просто указал context не как
this.context
а
var context
и все заработало
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DimaIs
Возможно, т.к. это коллбек, теряется контекст
Попробуйте:
reader.onload = function(fileEvent) {
       this.context.decodeAudioData(fileEvent.target.result, calcTempo);
      }.bind(this)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы