我已经在 OpenTK 论坛上问过这个问题,但似乎没有人能够回答。 ( http://www.opentk.com/node/3638 )
在 OpenTK 中,我试图将 -1 到 1 的平衡值转换为左/右音频 channel 。当为 0(默认值)时,双方应为 100% 增益。当 1 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++ 的近乎重复.
最佳答案
使用 OpenAL Soft 邮件列表我得到了我需要的答案:
在 FNA 中,我们做了类似的事情,但它可能并不理想(如果不是不正确的话):
我确定这不会提供硬平移,但您可能真的无论如何都不想进行硬平移。我们这样做是为了将距离保持在 1.0f,但如果您的项目不需要衰减,您可以将其关闭并可能节省一些时间/精力:
-伊森
长话短说: 禁用距离系统:
AL.DistanceModel(ALDistanceModel.None);
然后像这样设置平衡:
AL.Source(SourceId, ALSource3f.Position, balance, 0f, (float)Math.Sqrt(1 - Math.Pow(balance, 2)));
基本上在 Z 轴上创建一个半圆,以便在改变音频方向的同时始终与听众保持相同的距离。
关于c# - 使用 OpenAL 的线性一维音频平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23154049/