如何在OpenAL中获取具有单个缓冲区的源的长度(持续时间)?

Rya*_*yan 2 c++ openal fmod

我正在从FMOD迁移到OpenAL,我找不到FSOUND_Sample_GetLength()函数的模拟,它返回样本中的样本长度(它不考虑频率)...我得到OpenAL缓冲区名称来自alutLoadMemoryFromFileImage(),所以我无法以这种方式得到波形数据.

请帮忙!

Kar*_*arl 11

你需要使用alGetBufferi()将它拼凑在一起:

ALint sizeInBytes;
ALint channels;
ALint bits;

alGetBufferi(bufferID, AL_SIZE, &sizeInBytes);
alGetBufferi(bufferID, AL_CHANNELS, &channels);
alGetBufferi(bufferID, AL_BITS, &bits);

lengthInSamples = sizeInBytes * 8 / (channels * bits);
Run Code Online (Sandbox Code Playgroud)

并持续几秒钟:

ALint frequency;

alGetBufferi(bufferID, AL_FREQUENCY, &frequency);

durationInSeconds = (float)lengthInSamples / (float)frequency;
Run Code Online (Sandbox Code Playgroud)