如何在特定时刻使用openAL命令播放声音文件(时间输入为double或float)

时间:2011-03-21 13:24:28

标签: iphone audio openal

我想知道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中是否有任何方法可以在某个特定时刻寻找赛道。

1 个答案:

答案 0 :(得分:1)

你需要实施寻求。根据你想要的准确程度(即到最近的帧或在帧边界之间寻找),这可能非常棘手。

如何实现这取决于声音数据的表示方式。我之前已经实现了这个用于在openal上使用ogg vorbis数据进行流式传输。为此,我使用实现的ov_seek作为ov_open_callbacks的一部分。

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