Chrome with Audio APIで奇妙なエラー(SYNTAX_ERR:DOM Exception 12)を発行しました。私は初めてAudioApiを試し、Kyle Nau(http://www.youtube.com/watch?v=1wYTkZVQKzs)のチュートリアル(数回)を行いました。単純なmp3でコードを実行すると、すべてのサウンドが正常に再生されますが、同じチュートリアルからボリュームコントロールブロックを追加しようとすると、新しいオブジェクト作成のリストの最後のサウンドのみが再生されます。最初の2つは、「SYNTAX_ERR:DOMException12」を再生中に表示します。私はmp3をチェックし、宣言の位置を変更する=同じ悪影響。ボリュームコントロールを削除すると、すべてが再び正常に再生されます。このチュートリアルでもすべて問題ありません。
テストでは、この部分のコメントを外すと問題が発生することが示されています。
playSound.connect(this.gainNode);
this.gainNode.connect(audioContext.destination);
このエラーが発生する理由がわかりません。
ここにコードがあります。これは正常に機能するバリアントです(問題のある場所にコメントを付けました):
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();
// if(!level){
// that.gainNode.gain.value = 1;
// } そうしないと {
// that.gainNode.gain.value = level;
//};
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 = function(level){
// this.gainNode.gain.value = level;
//};
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;
};
};