2

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;
    };

};
4

2 に答える 2

1

コメントアウトした最初の行にゲインノードを作成するときは、audioContext.createGainNode()である必要があります。audioContext.createGain();ではなく

ノードが欠落しているようです。

それがお役に立てば幸いです。

于 2013-04-09T21:44:18.270 に答える
-1

どこかに構文エラーがあります。関数宣言の後にセミコロンを付ける必要はありません。この場合、セミコロンのみを使用します。

var myFunction = function(){

};
于 2013-03-05T15:04:51.423 に答える