Я пытаюсь разобраться с OpenAL, прорабатывая учебник здесь: http://benbritten.com/2008/11/06/openal-sound-on-the-iphone/
Моя проблема в том, что звук не воспроизводится, хотя нет ошибок iOS. Существует ошибка OpenAL, хотя. Пример кода ниже представляет собой тело метода IBAction и приводит к AL_INVALID_OPERATION в alGenSources (1, & sourceID). sourceID сообщает как NULL.
Я пробовал это на устройстве и симуляторе.
Этот пример кода, кажется, широко используется, но я не могу найти никого, кто бы жаловался на эту конкретную проблему. Кто-нибудь может пролить свет на это? Большое спасибо за любую помощь,
NSString *audioFileName = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"caf"];
AudioFileID fileID = [self openAudioFile:audioFileName];
UInt32 filesize = [self audioFileSize:fileID];
unsigned char *outData = malloc(filesize);
OSStatus result = noErr;
result = AudioFileReadBytes(fileID, false, 0, &filesize, outData);
AudioFileClose(fileID);
if (result != 0) {
NSLog(@"Can't load file..");
}
NSUInteger bufferID;
//NSLog(@"bufferID %@", [NSNumber numberWithUnsignedInteger:bufferID]);
alGenBuffers(1, &bufferID);
//NSLog(@"bufferID %@", [NSNumber numberWithUnsignedInteger:bufferID]);
alBufferData(bufferID, AL_FORMAT_STEREO16, outData, filesize, 44100);
[bufferStorageArray addObject:[NSNumber numberWithUnsignedInteger:bufferID]];
alGetError();
ALuint sourceID;
alGenSources(1, &sourceID);
if(alGetError() == AL_INVALID_OPERATION)
{
printf("\n++++ Error creating buffers INVALID_OPERATION!!\n");
//exit(1);
}
else
{
printf("No errors yet.");
}
alSourcei(sourceID, AL_BUFFER, bufferID);
alSourcef(sourceID, AL_PITCH, 1.0f);
alSourcef(sourceID, AL_GAIN, 1.0f);
if (loops) {
alSourcei(sourceID, AL_LOOPING, AL_TRUE);
}
[soundDictionary setObject:[NSNumber numberWithUnsignedInt:sourceID] forKey:@"sound"];
if (outData) {
free(outData);
outData = NULL;
}
[self playSound:@"sound"];