2

我正在尝试使用OpenAl在c++项目中播放声音。我想播放会循环播放的音乐曲目。当文件是320 kbps的.wav.mp3时,这工作得很好。但是当尝试以32 kbps播放.mp3时,它不会循环播放

另一件事是,如果我在使用 .mp3 时将AL_LOOPING标志设置为 true,它将启动 1 秒,然后重新启动轨道。播放 .wav 时,该标志可以正常工作

我的代码是

alGenSources(1, &__alSource);
openAlResult = alGetError();
if (openAlResult != AL_NO_ERROR)
{
    return ConvertError(openAlResult);
}

alSourcef (__alSource, AL_PITCH, 1.0);
alSourcef (__alSource, AL_GAIN, 1.0);
alSource3f(__alSource, AL_POSITION, 0.0, 0.0, 0.0);
alSource3f(__alSource, AL_VELOCITY, 0.0, 0.0, 0.0);
alSource3f(__alSource, AL_DIRECTION, 0.0, 0.0, 0.0);
alSourcef(__alSource, AL_ROLLOFF_FACTOR, 0.0);
alSourcei(__alSource, AL_SOURCE_RELATIVE, AL_TRUE);
// only works for WAV
alSourcei(__alSource, AL_LOOPING, AL_TRUE);

openAlResult = alGetError();

if (openAlResult != AL_NO_ERROR)
{
    return ConvertError(openAlResult);
}

关于 32 kbps 格式的 .mp3 或它不会循环的方式有什么想法吗?

谢谢

4

1 回答 1

0

也许你必须调用 alSourcePlay(__alSource); 设置循环后。

alGenSources(1, &__alSource);

alGenSources(1, &__alSource);
openAlResult = alGetError();

if (openAlResult != AL_NO_ERROR) {
    return ConvertError(openAlResult);
}

alSourcef (__alSource, AL_PITCH, 1.0);
alSourcef (__alSource, AL_GAIN, 1.0);
alSource3f(__alSource, AL_POSITION, 0.0, 0.0, 0.0);
alSource3f(__alSource, AL_VELOCITY, 0.0, 0.0, 0.0);
alSource3f(__alSource, AL_DIRECTION, 0.0, 0.0, 0.0);
alSourcef(__alSource, AL_ROLLOFF_FACTOR, 0.0);
alSourcei(__alSource, AL_SOURCE_RELATIVE, AL_TRUE);
// only works for WAV
alSourcei(__alSource, AL_LOOPING, AL_TRUE);
alSourcePlay(__alSource);

openAlResult = alGetError();

if (openAlResult != AL_NO_ERROR) {
    return ConvertError(openAlResult);
}

于 2015-05-03T09:33:42.263 回答