我想知道openAL中是否有一个可用于从特定时刻(寻道时间)播放声音文件的命令。就像我正在使用滑块并滑动它一样,一旦释放滑块,声音文件应该从该特定瞬间开始播放。

我已经为iOS实现了它。但是我还没有找到可以在特定时间播放文件的openAL方法。

alSourcei(sourceID, AL_BUFFER, 0);
alSourcei(sourceID, AL_BUFFER, bufferID);



// Set the pitch and gain of the source
alSourcef(sourceID, AL_PITCH, aPitch);
alSourcef(sourceID, AL_GAIN, aGain * fxVolume);

if(aLoop) {
    alSourcei(sourceID, AL_LOOPING, AL_TRUE);
} else {
    alSourcei(sourceID, AL_LOOPING, AL_FALSE);
}
// Set the source location
alSource3f(sourceID, AL_POSITION, aLocation.x, aLocation.y, 0.0f);
**Here we play the sound ***

alSourcePlay(sourceID);

执行以上代码总是从初始位置开始播放音轨。
我想知道openAL中是否有任何方法可以从某个特定的时间点开始寻找音轨。

最佳答案

您需要实现寻求。根据您想要的搜索精确度(即到最近的帧或帧边界之间的搜索)来做,可能会非常棘手。

如何执行此操作取决于声音数据的表示方式。我以前已经实现了此功能,以便在Openal上使用ogg vorbis数据进行流式传输。为此,我使用了已实现的ov_seek作为ov_open_callbacks的一部分。

我发现有一个关于devmaster的OpenAL流的教程,我认为它很有用。

10-05 20:23