我是音频编程的新手,如果我使用的术语不正确,请原谅...
我有两个流式缓冲区,我希望它们同时完全同步播放。我想控制流之间的混合比例。我确信这就像播放两个音源并改变它们的增益一样简单,但我读到有人在做一些技巧,比如用 2 个 channel 缓冲而不是两个单 channel 。然后他们从单一来源播放,但控制 channel 之间的混合。我阅读的文章与 OpenAL 无关,所以我的问题是:OpenAL 甚至可能实现这一点吗?
我想我不必这样做,但现在我很好奇并想了解如何设置它。我应该设置 alFilter 吗? Creative 的文档说“包含多个数据通道的缓冲区将在没有 3D 空间化的情况下播放。”读到这里,我想我需要在缓冲级别上进行预传递,然后让源输出混合单声道信号。
我想我会问另一个问题。 OpenAL 是否足够灵活以执行此类技巧?
我手动解码我的流,所以我意识到在输入缓冲区之前自己进行混合是多么容易,但是我将无法实时更改混合因子,因为我已经有了第二个左右缓冲的流。
最佳答案
I have two streaming buffers that I want to have playing simultaneously completely synchronized. I want to control ratio of blending between the streams. I'm sure it's as simple as having two sources playing and just changing the their gain
是的,应该是。你试过了吗?出了什么问题?
ALuint source1;
ALuint source2;
...
void set_ratio(float ratio) {
ratio=std::min(ratio,1);
alSourcef (source1, AL_GAIN, ratio);
alSourcef (source2, AL_GAIN, (1-ratio));
}
关于filter - OpenAL同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252127/