ios - OpenAL 3d 定位和平移中心

标签 ios volume openal audio-panning

使用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 声音置于中心而不进行平移?

我希望能够走到左侧的声音处,听到它从左声道逐渐淡入。然后在两个 channel 中呆一段时间。然后在右 channel 逐渐淡出。

我尝试过将声音设置为定向,但似乎没有效果:

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

最佳答案

我最终没有使用 OpenAL 的 AL_POSITION,而是手动跟踪听者位置和所有声音位置,然后手动应用音量衰减和平移每个刻度。

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

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

关于ios - OpenAL 3d 定位和平移中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12854967/

相关文章:

opengl - 光线转换体渲染中的不透明度校正

使用 openAL 的 iPhone 应用程序可以在模拟器中运行,但不能在设备上运行

c++ - 循环流式传输 .ogg 音频 - OpenAL

iphone - 没有网页 View 的 Twitter 登录

ios - 如何在swift中生成从1到4和8的随机数

docker - Docker LVM支持

java - 媒体播放器对象音量线性增加和减少的Android逻辑错误

c++ - 如何使用OpenAL录制声音

ios - defaults.setValue 保存值始终为 nil 字符串

ios - ./configure 参数为 iOS 构建 C 库