我已经在OpenTK论坛上问过这个问题了,但似乎没有人能做出回应。(http://www.opentk.com/node/3638)
在OpenTK中,我试图得到一个转换为左/右音频通道的平衡值-1到1。当0(默认值)双方应在100%的增益。当右边是100%,左边是0%,相反是-1。我很难让它在OAL工作,因为这实际上是我第一次使用它。
到目前为止,我已经尝试过:在OAL初始化之后:
AL.DistanceModel(ALDistanceModel.LinearDistanceClamped);对于每一个新的来源:
AL.Source(SourceId, ALSourcef.MaxDistance, 1f);
AL.Source(SourceId, ALSourceb.SourceRelative, false);用于设置余额:
float balance = 0f; //(-1f to 1f)
OpenTK.Vector3 position = new OpenTK.Vector3(balance, 0f, 0f);
AL.Source(SourceId, ALSource3f.Position, ref position);这将使音频在左侧通道上略高于100%,在所有负平衡值中右侧为0%,而对于所有正值,则略高于100%右0%,因此我有点卡住了。
我该怎么做呢?任何帮助都是非常感谢的!
Gr.Viller
顺便说一句:这看起来像是未回答的OpenAL 2d panning C++的一个几乎重复的版本。
发布于 2014-04-21 02:08:47
使用OpenAL软邮件列表,我得到了我需要的答案:
在FNA中,我们会做这样的事情,但这可能并不理想(如果不正确的话):
我知道这并不能提供硬平底锅,但你可能并不真的想做硬平底锅。我们这样做是为了将事情保持在1.0f的距离,但是如果您的项目不需要衰减,您可以关闭它,并可能节省一些时间/精力:
-Ethan
TL;DR:禁用远程系统:
AL.DistanceModel(ALDistanceModel.None);然后像这样设置平衡:
AL.Source(SourceId, ALSource3f.Position, balance, 0f, (float)Math.Sqrt(1 - Math.Pow(balance, 2)));基本上,在Z轴上创建一个半圆,以便始终保持与听者相同的距离,同时将方向移到音频。
https://stackoverflow.com/questions/23154049
复制相似问题