使用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);
答案 0 :(得分:2)
我没有使用OpenAL的AL_POSITION,而是手动跟踪听众位置和所有声音位置,然后手动应用音量滚降并平移每个音符。
这允许特定窗口/宽度/锥形空间,其中效果完全平移。听起来好多了。
另请注意,我从AL_LINEAR_DISTANCE_CLAMPED切换回默认的反向钳位模式。由于某种原因,无论参考值或最大距离如何,线性钳位模式都会导致任何以负X值定位的效果过快地平移。这只发生在Mac版本中,所以我认为OpenAL Mac实现在使用线性钳位时有一个平移错误。