Центр позиционирования и панорамирования OpenAL 3d

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

person Nathanael Weiss    schedule 12.10.2012    source источник
comment
Судя по всему, это было недавнее изменение: opensource.creative.com/pipermail/openal/2013-July/012714.html см. также code.google.com/p/libgdx/issues/detail?id=1183   -  person rogerdpack    schedule 19.07.2013


Ответы (1)


Вместо того, чтобы использовать AL_POSITION OpenAL, я отслеживал позицию слушателя и все позиции звука вручную, затем вручную применяя спад громкости и панорамируя каждый тик.

Это позволяет использовать определенное окно/ширину/конус пространства, в котором эффект панорамируется полностью по центру. Звучит намного лучше.

Также обратите внимание, что я переключился с AL_LINEAR_DISTANCE_CLAMPED обратно на режим обратного фиксирования по умолчанию. По какой-то причине линейный фиксированный режим вызывал слишком быстрое панорамирование любого эффекта, позиционированного с отрицательным значением X, независимо от эталона или максимального расстояния. Это произошло только в сборках Mac, поэтому я думаю, что реализация OpenAL Mac имеет ошибку панорамирования при использовании линейного зажима.

person Nathanael Weiss    schedule 17.10.2012