使用 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);