爲了我遊戲的需要,我需要2D聲音。這意味着發射器應放置在2D平面上的某個位置。如何在Javascript中實現這種效果?我需要使用特殊的聲音格式還是可以控制揚聲器的音量?Javascript中的空間(2D)聲音
我認爲我可以達到每個揚聲器都有2個音量的程度,但我對如何在Javascript中應用不同音量的相同聲音毫無頭緒。
爲了我遊戲的需要,我需要2D聲音。這意味着發射器應放置在2D平面上的某個位置。如何在Javascript中實現這種效果?我需要使用特殊的聲音格式還是可以控制揚聲器的音量?Javascript中的空間(2D)聲音
我認爲我可以達到每個揚聲器都有2個音量的程度,但我對如何在Javascript中應用不同音量的相同聲音毫無頭緒。
準確描述這種包括演示一種製品,可以發現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:我認爲重寫用手援引的條款這裏自定義的答案,但似乎相對無意義的,因爲文章已經足夠清晰,做重複工作更顯得毫無意義
兼容性明智,只有閃光燈和前面提到的代碼的組合提供了一個真正的跨瀏覽器定位/平移音頻解決方案(因爲閃光燈在某些移動設備上不可用)。理想情況下,我建議不要使用音頻API,如果這可以規避,因爲規範中的事情不會改變,因此可能會破壞您的代碼(+這不是不可能在移動設備上以任何方式工作)。唯一的情況是使用更高級的網絡音頻api是有意義的,如果你期望在你的遊戲上至少工作6到18個月(因爲這可能會讓實現甚至穩定到可用點) 。
我們在工作中使用了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
'
閱讀:[Web Audio API](http://www.w3.org/TR/webaudio/) –
@ŠimeVidas的確如此。 – corazza