Используя 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);