OpenAL iPhone: невозможно воспроизвести звук

Я пытаюсь воспроизвести простой звуковой файл через OpenAL, указав это руководство:

Я создал из него монолитный код для первоначального тестирования, но не могу заставить звук воспроизводиться. Я много чего пробовал, но не могу воспроизвести звук. Любая помощь очень ценится. Спасибо.

Вот мой код:

ALCdevice* device;
device = alcOpenDevice(NULL);

ALCcontext* context;
alcCreateContext(device, NULL);
alcMakeContextCurrent(context);

NSString* path = [[NSBundle mainBundle] pathForResource:@"mg" ofType:@"caf"];
NSURL* pathURL = [NSURL fileURLWithPath:path];

AudioFileID audioID;
OSStatus audioStatus = AudioFileOpenURL((CFURLRef)pathURL, kAudioFileReadPermission, 0, &audioID);


UInt32 fileSize = 0;
UInt64 outDataSize;
UInt32 propSize = sizeof(UInt64);
OSStatus res = AudioFileGetProperty(audioID, kAudioFilePropertyAudioDataByteCount, &propSize, &outDataSize);
fileSize = (UInt32)outDataSize;

unsigned char* outData = malloc(fileSize);
OSStatus res2 = AudioFileReadBytes(audioID, false, 0, &fileSize, outData);

AudioFileClose(audioID);

ALuint bufferID;
alGenBuffers(1, &bufferID);
alBufferData(bufferID, AL_FORMAT_STEREO16, outData, fileSize, 44100);

ALuint sourceID = 2;
alGenSources(1, &sourceID);
alSourcei(sourceID, AL_BUFFER, bufferID);
alSourcef(sourceID, AL_PITCH, 1.0f);
alSourcef(sourceID, AL_GAIN, 1.0f);
alSourcei(sourceID, AL_LOOPING, AL_FALSE);
free(outData);
outData = NULL;

alSourcePlay(sourceID);

person Alterecho    schedule 10.02.2012    source источник
comment
Я мало что знаю об openAL, но пробовали ли вы AVAudioPlayer? developer.apple.com/library/ios/#documentation/AVFoundation/ может использоваться пользователем   -  person Barlow Tucker    schedule 10.02.2012
comment
Да, я пробовал AVAudioPlayer, но я хорошо его прочитал, только если можно допустить задержку. То есть не рекомендуется проигрывать звуковые эффекты.   -  person Alterecho    schedule 11.02.2012


Ответы (1)


Только что узнал! Я использовал:

alcCreateContext(device, NULL);

вместо:

context = alcCreateContext(device, NULL);

В указании на это помогла функция alGetError ().

person Alterecho    schedule 11.02.2012
comment
вам нужно отметить свой ответ как правильный, иначе он все равно останется без ответа - person Max MacLeod; 13.02.2012