2012-06-24 8 views
12

私のゲームのニーズには、2Dサウンドが必要です。つまり、エミッターは2D平面のどこかに配置する必要があります。どのように私はこの効果をJavascriptで達成するのですか?特別なサウンドフォーマットを使用する必要がありますか、またはスピーカーの音量を調節できますか?Javascriptの空間(2D)サウンド

私はスピーカーごとに2つの音量を持っていると思いますが、Javascriptで同じ音色に異なる音量を適用する方法はわかりません。

+2

」ゲームですか?そこからの音はどこですか? 「

+4

これを読む:[Web Audio API](http://www.w3.org/TR/webaudio/) –

+0

@ imeVidas、確かに。 – corazza

答えて

7

記事はhereを見つけることができます。私は幸いにも

以下、最も関連する部分を引用されるリンク切れを防止するために

、ウェブオーディオ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(); 
    } 
}; 

上記第一リンクにおける作業デモの完全なソースコードがhereを見出すことができます。

はOfftopic:私はここでカスタム答えとして手で引用された論文を書き換えると考えられ、それは記事が十分に明確でやって、二重の仕事よりも、すでに多くのであるように、比較的無意味に思えた無意味なようだ


互換性を保つために、フラッシュと上記のコードの組み合わせのみが、(Flashは特定のモバイルデバイスでは使用できないため)真のクロスブラウザ位置/パンニングオーディオソリューションを提供します。理想的には、仕様が変更される可能性は低いので、これを避けることができればオーディオAPIを使用しないようにアドバイスしてください。これにより、コードを壊す可能性があります(モバイルデバイスでも動作しない可能性は低いです)。より高度なWebオーディオAPIを使用する唯一のシナリオは、あなたのゲームで少なくとも6〜18ヶ月も働くことを期待している場合です(実装が使用可能なポイントにしっかりと収まるようになる可能性が高い時期です) 。

+0

互換性は気にしませんが、私のコードにはFlashが含まれないようにしたいと思います。 – corazza

+0

ハハ、その場合は上記の解決策はちょうどあなたのために完璧です:D(私はあなたが偉大であるから学ぶためにそれをやっていることを意味すると思います:D) –

+0

男、あなたは本当にあなたの "ソリューションを販売しようとしている"それはちょうど+ 50pts、それを簡単に取る。リラックス。 – MMeah

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

+4

サウンドパンの場合は、左右のチャンネルだけを録音し、両者の間をフェードインできます。どんなサウンドエディタでも可能です。 2つのファイルが必要ですが、それは解決策です。 – MMeah

+0

2ファイル間のフェーディングは正確なタイミングマッチングを必要としません。 – wizzard0

+0

WebオーディオAPIにはかなりの数の便利なツールがありますが、そのような深刻なものにはsoundmanagerライブラリを使用できません。(私の答えの記事を参照し、タイミングの説明については少し上にスクロールしてください) –

関連する問題