c++ - OpenAL 2d 平移 C++

标签 c++ audio openal audio-panning

我正在尝试弄清楚如何让 openAL 在 2D 中平移(通过操纵 3D 定位)。理想情况下,我希望实现平移,以便左声道或右声道可以完全参与,而另一个声道完全静音。 Open AL 似乎可以很好地处理 3d 距离和衰减,但我正在努力模拟这种 2D 平移。

我正在使用

alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED)

float sourcePosition[3] = {0.99f,0.f,0.f};
alSourcefv(sourceID, AL_POSITION, sourcePosition);
alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_FALSE);
alSourcef(sourceID, AL_MAX_DISTANCE, 1.f);
alSourcef(sourceID, AL_REFERENCE_DISTANCE, 0.5f);

但是右声道中有大量音频。我真的不希望增益根据距离而下降,只是按比例分配 channel 。

是否可以使用开放式 AL 模拟 2d 平移?

最佳答案

您需要将 AL_SOURCE_RELATIVE 设置为 AL_TRUE,而不是 false。

AL_SOURCE_RELATIVE set to AL_TRUE indicates that the position, velocity, cone, and direction properties of a source are to be interpreted relative to the listener position.

OpenAL 1.1 Specification 如是说(第 34 页)!

所以,改变

alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_FALSE);

alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_TRUE);

应该达到预期的结果。

关于c++ - OpenAL 2d 平移 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950606/

相关文章:

wcf - 可以使用 WCF 数据服务返回文件吗?

java - 如何使用 java 和 CMU Sphinx 将音频文件分解为多个片段,然后将分解的音频文件转录为文本

iphone - 使用OpenAL(iOS)播放声音的一部分(输入和输出)吗?

c++ - 为什么 valgrind 没有在我的 "test"程序中检测到内存泄漏?

c++ - 如何抽象 SIMD 代码以在不影响性能的情况下处理不同的数据类型

c++ - 使用 Win32/MFC 将 HTML 文件转换为 PDF

ios - 播放声音后 childViewController 不释放

macos - 播放声音的基本 OpenAL 代码

iphone - 我可以在给定时间仅播放任何缓冲区一次吗?

c++ - C++CLI 的 *var* 关键字