3

使用 OpenAL,可以设置距离模型:

alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);

以及音效的位置:

float globalRefDistance = 125.0f;
float globalMaxDistance = 1250.0f;
ALfloat alPos[] = {pos.x, pos.y, 0.0f}; 
alSourcefv(soundId, AL_POSITION, alPos);
alSourcef(soundId, AL_REFERENCE_DISTANCE, globalRefDistance);
alSourcef(soundId, AL_MAX_DISTANCE, globalMaxDistance);

这可以很好地衰减和平移声音,除非听者靠近声源并在声音的左右来回移动。在这种情况下,平移会从左向右快速移动。实际上并没有一个地方可以播放在中心平移的声音。

如何定义 OpenAL 将 3d 声音放在中心而不平移的范围/窗口/锥体?

我希望能够走到左边的声音,听到它从左声道逐渐淡入。然后在两个频道中待一会儿。然后逐渐在右声道中淡出。

我尝试过将声音设置为有方向性,但似乎没有奏效:

alPos[0] = 0.0f; alPos[1] = 0.0f; alPos[2] = 1.0f;
alSourcefv(soundId, AL_DIRECTION, alPos);
alSourcef(soundId, AL_CONE_INNER_ANGLE, 180.0f);
alSourcef(soundId, AL_CONE_OUTER_ANGLE, 240.0f);
4

1 回答 1

2

我最终没有使用 OpenAL 的 AL_POSITION,而是手动跟踪听者位置和所有声音位置,然后手动应用音量滚降并平移每个滴答声。

这允许效果完全居中平移的特定窗口/宽度/圆锥空间。听起来好多了。

另请注意,我从 AL_LINEAR_DISTANCE_CLAMPED 切换回默认的反向钳位模式。出于某种原因,无论参考或最大距离如何,线性钳位模式都会导致使用负 X 值定位的任何效果平移得太快。这只发生在 Mac 版本上,所以我认为 OpenAL Mac 实现在使用线性钳位时存在平移错误。

于 2012-10-17T19:45:34.773 回答