Изменение данных во время воспроизведения не поддерживается в OpenAL.
Тем не менее, вы все равно можете попробовать его и посмотреть, получите ли вы приемлемые значения по умолчанию (хотя вы будете бороться с механизмом воспроизведения OpenAL и любой задержкой).ауты в вашем приложении могут сойти с него, так что делайте это на свой страх и риск).
Существует расширенная версия ALBufferData от Apple, которая говорит OpenAL использовать данные, которые вы предоставляете напрямую, а не делать свои локальныекопия.Вы устанавливаете его так:
typedef ALvoid AL_APIENTRY (*alBufferDataStaticProcPtr) (const ALint bid,
ALenum format,
const ALvoid* data,
ALsizei size,
ALsizei freq);
static alBufferDataStaticProcPtr alBufferDataStatic = NULL;
alBufferDataStatic = (alBufferDataStaticProcPtr) alcGetProcAddress(NULL, (const ALCchar*) "alBufferDataStatic");
Вызовите alBufferDataStatic () так, как вы бы вызвали alBufferData ():
alBufferDataStatic(bufferId, format, data, size, frequency);
Поскольку теперь он использует ваш буфер звуковых данных, а не свой собственныйвы можете изменить эти данные, и это не будет мудрее (при условии, что вы не изменяете вещи слишком близко к тому месту, где они в данный момент воспроизводятся в буфере).
Однако этот подход рискован, посколькуэто зависит от времени, которое вы не полностью контролируете.Для обеспечения 100% безопасности вам необходимо использовать аудиоустройства.