在iOS上使用NSException打开al终止游戏

时间:2014-10-18 20:17:52

标签: ios objective-c openal

当我播放我的声音时,它说代码有问题,但我看不出它是什么。游戏运行正常,直到我尝试播放声音,当它以NSException类型的未捕获异常终止时。这不是Open Al的最好例子,但任何人都可以看到它有什么问题吗?

- (id)init
{
self = [super init];
if (self)
{
    openALDevice = alcOpenDevice(NULL);

    openALContext = alcCreateContext(openALDevice, NULL);
    alcMakeContextCurrent(openALContext);
}
return self;
}
-(void)playSound {



NSUInteger sourceID;
alGenSources(1, &sourceID);

NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"flyby" ofType:@"caf"];
NSURL *audioFileURL = [NSURL fileURLWithPath:audioFilePath];

AudioFileID afid;
OSStatus openAudioFileResult = AudioFileOpenURL((__bridge CFURLRef)audioFileURL, kAudioFileReadPermission, 0, &afid);

if (0 != openAudioFileResult)
{
    NSLog(@"An error occurred when attempting to open the audio file %@: %ld", audioFilePath, openAudioFileResult);
    return;
}

UInt64 audioDataByteCount = 0;
UInt32 propertySize = sizeof(audioDataByteCount);
OSStatus getSizeResult = AudioFileGetProperty(afid, kAudioFilePropertyAudioDataByteCount, &propertySize, &audioDataByteCount);

if (0 != getSizeResult)
{
    NSLog(@"An error occurred when attempting to determine the size of audio file %@: %ld", audioFilePath, getSizeResult);
}

UInt32 bytesRead = (UInt32)audioDataByteCount;

void *audioData = malloc(bytesRead);

OSStatus readBytesResult = AudioFileReadBytes(afid, false, 0, &bytesRead, audioData);

if (0 != readBytesResult)
{
    NSLog(@"An error occurred when attempting to read data from audio file %@: %ld",           audioFilePath, readBytesResult);
}

AudioFileClose(afid);

ALuint outputBuffer;
alGenBuffers(1, &outputBuffer);

alBufferData(outputBuffer, AL_FORMAT_STEREO16, audioData, bytesRead, 44100);

if (audioData)
{
    free(audioData);
    audioData = NULL;
}

alSourcef(sourceID, AL_PITCH, 1.0f);
alSourcef(sourceID, AL_GAIN, 1.0f);

alSourcei(sourceID, AL_BUFFER, outputBuffer);

alSourcePlay(sourceID);

}

0 个答案:

没有答案