开发者

Disable surround sound with openAL

开发者 https://www.devze.com 2023-03-10 14:03 出处:网络
I\'m french so sorry for my english. I\'m currently making a splitscreen 2D game with LWJGL. I\'m using the openAL API which is given with LWJGL. Everything seems to works perfectly. Well, too perfec

I'm french so sorry for my english.

I'm currently making a splitscreen 2D game with LWJGL. I'm using the openAL API which is given with LWJGL. Everything seems to works perfectly. Well, too perfectly to be honest : because I'm making a开发者_JAVA技巧 splitscreen game and because I can't have 2 listener sharing the same context, I want to get rid of the left/right panning.

Sound attenuation work well. I change the position of sound depending on the closest player. The listener doesn't change, always at (0,0,0). The sound position is (soundPosition - closestPlayerPosition).

So how do I get rid of the surround thing ? I want to keep sound attenuation over distance, of course. I could simply put the sound on the Z-axis depending on the distance but this seem a bit silly (I have to compute the distance every time I have to update a sound position).

Thanks !


When you calculate the sound's position (soundPosition - closestPlayerPosition) take the length of the vector returned by that and then put that sound directly down the z axis that distance away from the player.

Example:

soundPosition = (1.4,0,1.4) closestPlayerPosition = (0,0,0)

soundDirection = soundPosition - closestPlayerPosition = (1.4,0,1.4)

soundDistance = soundDirection.Length()

And finally, the final position of your sound:

finalSoundPosition = (0,0,soundDistance) = (0,0,2)

Edit: I didn't notice you already suggested this. To be honest I think this is fine, and its the only way to solve your problem beyond rewriting stuff internal to openAL

0

精彩评论

暂无评论...
验证码 换一张
取 消