2012-06-24 16 views
12

Oyunumun ihtiyaçları için 2D sesim olması gerekiyor. Yani, emitör bir 2D düzlemde bir yere yerleştirilmelidir. Javascript'te bu etkiyi nasıl başarabilirim? Özel bir ses formatı kullanmalı mıyım yoksa hoparlörlerdeki ses seviyesini kontrol edebilir miyim?Spatial (2D) ses Javascript'te

Sanırım her bir hoparlör için 2 birimimin olduğu noktaya gelebilirim, ancak aynı ses için Javascript'te farklı birimlerin nasıl uygulanacağından emin değilim.

+2

A '' oyunu? Ses nereden geliyor? Bir

+4

Bunu okuyun: [Web Ses API'sı] (http://www.w3.org/TR/webaudio/) –

+0

@ ŠimeVidas, aslında. – corazza

cevap

7

bir makale here bulunabilir.

ben Neyse ki

aşağıdan en alakalı kısımlarını alıntı edilecektir bağlantı çürümesi önlemek için, Web Ses API ile geliyor yerleşik kullanmak oldukça yalındır vardır donanım hızlandırmalı pozisyonel ses özellikleri.

çekirdek fikri aşağıdaki kodu gösterilmiştir:

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

yukarıdaki ilk linkte çalışma demo tam kaynak kodu here bulunabilir.

Offtopic: Burada özel bir cevap olarak elle alıntılanan makaleye yeniden kabul, ama bu makale yeterince açık ve yapıyor çift çalışmaları daha şimdiden daha Görece olarak anlamsız görünüyordu anlamsız görünüyor


Uyumluluk bilgisi, yalnızca flaşın bir bileşimi ve daha önce sözü edilen kod, gerçek bir çapraz tarayıcı konumlandırma/kaydırma ses çözümü sağlar (flaş, belirli mobil cihazlarda mevcut olmadığı için). İdeal olarak, eğer şartnamede değişiklik yapması olası olmadığından ve bu nedenle kodunuzun kırılması ihtimal dışı olduğu için bu durumun engellenmesi durumunda ses API'sinin kullanılmasına karşı tavsiyede bulunacağım (+ bunun mobil cihazlarda herhangi bir şekilde çalışmaması olası değildir). Daha gelişmiş web ses api'lerinin mantıklı olduğu tek senaryo, oyununuzda en az 6 ila 18 aylık bir süre çalışmayı bekliyor olmanızdır (bu, uygulamaların kullanılabilir bir noktaya bile durabilmesi için beklenen süredir). .

+0

Uyumluluk umurumda değil, ancak kodumun Flash içermemesi istiyorum. – corazza

+0

Haha, bu durumda yukarıdaki çözüm tam size göre evet: D (Bu sadece öğrenmek için yaptığınız anlamına geliyor, bu harika: D) –

+0

Adam, gerçekten "çözümünüzü satmaya çalışıyorsunuz ". Sadece + 50pt, kolay olsun. Rahatlayın. – MMeah

2

SoundManager2'yi işte kullandık, orası gerçekten kolay bir anahtar teslim çözüm ve iyi belgelenmiş bir API idi.

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

Örnek:

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

BSD Lisansı: Bir demo dahil tam olarak bu açıklayan http://www.schillmania.com/projects/soundmanager2/license.txt

+4

Ses kaydı için sadece sol veya sağ kanalı kaydedebilir ve ikisi arasında yavaşça kaydırabilirsiniz. Herhangi bir ses editörü buna izin verecektir. İki dosya gerektirir, ancak bu bir çözümdür. – MMeah

+0

2 dosya arasında solma, bazen kolayca yapılmayan tam zamanlama eşleşmesi gerektirir mi? – wizzard0

+0

Web ses API'sı bunun için çok sayıda yararlı araca sahiptir, ancak elbette bunun gibi ciddi bir şey için soundmanager kütüphanesini kullanamazsınız.(Cevabımdaki makaleye bakın ve bazı zamanlama açıklamaları için biraz yukarı kaydırın) –