2013-02-28 62 views
2

我在Chrome上使用Audio API發佈了奇怪的錯誤(SYNTAX_ERR:DOM異常12)。我第一次嘗試Audio Api,並且做了Kyle Nau的教程(幾次)(http://www.youtube.com/watch?v=1wYTkZVQKzs)。當我用簡單的MP3播放代碼時,所有聲音都可以正常播放,但是當我嘗試從同一教程中添加音量控制區塊時,只會播放新對象創建列表中的最後一個聲音。首先播放兩首節目「SYNTAX_ERR:DOM例外12」。我檢查了mp3和更改聲明的位置=同樣的不好的影響。取消音量控制,並再次播放罰款。在這個教程中一切都很好。Web Audio Api問題(DOM異常12)

試驗表明,問題的衝擊片雷管時取消註釋這一部分:

 playSound.connect(this.gainNode); 
     this.gainNode.connect(audioContext.destination); 

我不明白爲什麼這個錯誤是appers。

這裏的代碼。這是正常的工作變種(我標記問題的地方有評論):

function Sound(source, level) { 
    if (!window.audioContex) { 
     audioContext = new webkitAudioContext; 
    }; 
    var that = this; 
    that.source = source; 
    that.buffer = null; 
    that.isLoaded = false; 

// that.gainNode = audioContext.createGain();

//如果(水平!){

// that.gainNode.gain.value = 1;

//}否則{

// that.gainNode.gain.value =水平;

//};

var getSound = new XMLHttpRequest(); 
    getSound.open("GET",that.source,true); 
    getSound.responseType = "arraybuffer"; 
    getSound.onload = function() { 
     audioContext.decodeAudioData(getSound.response,function(buffer) { 
      that.buffer = buffer; 
      that.isLoaded = true;    
     }); 
    }; 
    getSound.send(); 
}; 

Sound.prototype.play = function(){ 
    if(this.isLoaded === true) { 
     var playSound = audioContext.createBufferSource(); 
     playSound.buffer = this.buffer; 

// playSound.connect(this.gainNode);

// this.gainNode.connect(audioContext.destination);

 playSound.connect(audioContext.destination); 
     playSound.noteOn(0); 
    }; 
}; 

// Sound.prototype.setVolume =函數(水平){

// this.gainNode.gain.value =水平;

//};

var laserSound = new Sound("sound/laser.mp3"); 
var dropSound = new Sound("sound/drop.mp3"); 
var pickupSound = new Sound("sound/pickup.mp3"); 

// laserSound.setVolume(.1);

window.addEventListener("keydown", onKeyDown); 

function onKeyDown(event) { 
    switch (event.keyCode) { 
     //Z 
     case 90: 
      laserSound.play(); 
     break; 
     //X 
     case 88: 
      dropSound.play(); 
     break; 
     //C 
     case 67: 
      pickupSound.play(); 
     break; 
    }; 

}; 
+0

你有沒有找出發生了什麼事?所選答案確實沒有任何幫助。 – Vince 2013-03-25 01:46:58

回答

-1

某處出現語法錯誤。函數聲明之後,不需要放置冒號。你只會在這種情況下,使用一個分號:

var myFunction = function(){ 

}; 
+2

我不知道爲什麼這被選爲一個很好的答案。 DOM Exception 12的定義是「SYNTAX_ERR」,所以這部分是顯而易見的。分號與它無關。 – Vince 2013-03-25 19:40:45

1

當您在第一線的增益節點你註釋掉,它必須是audioContext.createGainNode();而不是audioContext.createGain();

它看起來像你缺少節點。

我希望有幫助。