12

私のゲームのニーズのために、私は2Dサウンドを持っている必要があります。つまり、エミッターは2D平面上のどこかに配置する必要があります。Javascriptでこの効果を実現するにはどうすればよいですか?特別なサウンドフォーマットを使用する必要がありますか、それともスピーカーの音量を制御できますか?

スピーカーごとに2つのボリュームがあるところまでは到達できると思いますが、Javascriptで同じサウンドに異なるボリュームを適用する方法がわかりません。

4

2 に答える 2

7

デモを含むこれを正確に説明する記事はここにあります。

リンク切れを防ぐために、以下の最も関連性の高い部分を引用します

幸い、Web Audio APIには、非常に簡単に使用できるハードウェアアクセラレーションによるポジショナルオーディオ機能が組み込まれています。

コアアイデアは、以下のコードで示されています。

PositionSample.prototype.changePosition = function(position) {
  // Position coordinates are in normalized canvas coordinates
  // with -0.5 < x, y < 0.5
  if (position) {
    if (!this.isPlaying) {
      this.play();
    }
    var mul = 2;
    var x = position.x / this.size.width;
    var y = -position.y / this.size.height;
    this.panner.setPosition(x * mul, y * mul, -0.5);
  } else {
    this.stop();
  }
};

上記の最初のリンクにある作業デモの完全なソースコードは、ここにあります。

オフトピック:引用された記事をここでカスタム回答として手作業で書き直すことを検討しましたが、記事はすでに十分に明確であり、二重の作業を行うことは無意味に見えるため、それは比較的無意味に見えました


互換性に関しては、フラッシュと前述のコードの組み合わせのみが、真のクロスブラウザーポジショニング/パンニングオーディオソリューションを提供します(フラッシュは特定のモバイルデバイスでは使用できないため)。仕様が変更されてコードが破損する可能性が低いため、これを回避できる場合は、オーディオAPIの使用をお勧めします(+モバイルデバイスでどちらの方法でも機能しない可能性はありません)。より高度なWebオーディオAPIを使用することが理にかなっている唯一のシナリオは、ゲームで少なくともさらに6〜18か月作業することを期待している場合です(実装が使用可能なポイントに安定するまでにかかる可能性が高いため) 。

于 2012-06-29T23:50:24.813 に答える
2

仕事でSoundManager2を使用しました。これは、非常に簡単なターンキーソリューションであり、十分に文書化されたAPIでした。

http://www.schillmania.com/projects/soundmanager2/

例:

soundManager.createSound({
 id:'mySound1',
 url:'../mpc/audio/CHINA_1.mp3'
});
soundManager.play('mySound1');

BSDライセンス:http ://www.schillmania.com/projects/soundmanager2/license.txt

于 2012-06-28T00:19:04.870 に答える