0

私は、SoundJS を使用するブラウザー間で一貫性のない動作に遭遇しました。つまり、IE11 は、Abstract Sound Instances からの再生にけちです。

次のコードは、私がテストした他のすべてのブラウザーで機能しますが、IE11 では機能しません。

<html>

<head>

<script src="https://code.createjs.com/soundjs-0.6.1.min.js"></script>
<script>

var sounds = {}

function loadSounds() {
    createjs.Sound.registerSound('audio/song.mp3', 'song', 1);
    songInst = createjs.Sound.createInstance('song');
    sounds['song'] = songInst;
}

function startSound(id,v,l){
    sounds[id].play({loop:((l===true)?-1:0),volume:v});
}

</script>
</head>

<body onload="loadSounds()">
<button value="StartSound" onclick="startSound('song',1,true)">startSound</button>
</body>

</html>

startSound() 関数を次のように変更することで、IE11 でサウンドを再生できます。

function startSound(id,v,l){
    createjs.Sound.play(id,{loop:((l===true)?-1:0),volume:v});
}

しかし、これは残りの実装で問題を引き起こします。各サウンドには、ボリューム トゥイーンなどの機能のためにコールバックできる一意に識別可能なインスタンスが必要になるからです。

最初のアプローチを機能させるために欠けているものはありますか?

4

1 に答える 1

2

HTMLAudioPlugin と AbstractPlugin のコードにバグがあり、src が読み込まれる前にインスタンスを作成すると、期間が適切に設定されません。play 呼び出しでは、位置が期間に対してチェックされ、期間が NaN の場合、そのチェックは失敗します。

この問題を回避するには、インスタンスを作成する前にオーディオをロードする必要があります。

createjs.Sound.addEventListener("fileload", createSound);
createjs.Sound.registerSound("audio/song.mp3", "song", 1);


function createSound(event) {
  songInst = createjs.Sound.createInstance("song");
  // this could also use event.src
  sounds['song'] = songInst;
}

もちろん、今後のリリースでバグも修正する予定です。それが役立つことを願っています。

于 2015-05-27T16:08:17.767 に答える