C# 带OpenAL的线性1D音频平衡

C# 带OpenAL的线性1D音频平衡,c#,audio,openal,opentk,C#,Audio,Openal,Opentk,我已经在OpenTK论坛上问过这个问题,但似乎没有人能回答。() 在OpenTK中,我试图将-1:1的平衡值转换为左/右音频通道。当0(默认值)时,两侧应为100%增益。当1 100%表示右侧,0%表示左侧,相反表示-1。我很难在OAL中使用它,因为这是我第一次使用它 到目前为止,我已经尝试: OAL初始化后: AL.DistanceModel(ALDistanceModel.LinearDistanceClamped); 对于每个新来源: AL.Source(SourceId, ALSour

我已经在OpenTK论坛上问过这个问题,但似乎没有人能回答。()

在OpenTK中,我试图将-1:1的平衡值转换为左/右音频通道。当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%,所以我有点卡住了

我该怎么做呢?感谢您的帮助

维勒先生


顺便说一句:这看起来像是未答复邮件的近似副本。

使用OpenAL软邮件列表,我得到了我需要的答案:

在FNA中,我们会这样做,但这可能并不理想(如果不是不正确的话):

我确信这不会提供硬平移,但你可能并不真的想做硬平移。我们这样做是为了将物体保持在1.0f的距离,但如果您的项目不需要衰减,您可以将其关闭,并可能节省一些时间/精力:

-伊桑

TL;博士: 使用以下选项禁用距离系统:

AL.DistanceModel(ALDistanceModel.None);
然后像这样设置平衡:

AL.Source(SourceId, ALSource3f.Position, balance, 0f, (float)Math.Sqrt(1 - Math.Pow(balance, 2)));

基本上,在Z轴上创建一个半圆,以便在将方向切换到音频时始终与听众保持相同的距离。

您的最佳选择可能是在同一个方向。