Как получить длину (длительность) источника с одним буфером в OpenAL? - PullRequest
2 голосов
/ 02 ноября 2011

Я мигрирую с FMOD на OpenAL и не могу найти аналог функции FSOUND_Sample_GetLength () , которая возвращает длинувыборка в выборках (частота не учитывается) ... Я получаю OpenAL имя буфера от alutLoadMemoryFromFileImage () , поэтому я не могу получитьданные формы сигнала таким образом.

Пожалуйста, помогите!

1 Ответ

11 голосов
/ 03 ноября 2011

Вам нужно собрать его вместе, используя 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);

И на длительность в секундах:

ALint frequency;

alGetBufferi(bufferID, AL_FREQUENCY, &frequency);

durationInSeconds = (float)lengthInSamples / (float)frequency;
...