Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenAL iPhone:无法播放任何声音_Iphone_Ios_Audio_Openal - Fatal编程技术网

OpenAL iPhone:无法播放任何声音

OpenAL iPhone:无法播放任何声音,iphone,ios,audio,openal,Iphone,Ios,Audio,Openal,我试图通过引用以下内容,通过OpenAL播放一个简单的声音文件: 我已经从中创建了一个单片代码来进行初始测试,但无法播放声音。我一直在尝试很多东西,但我无法播放声音。非常感谢您的帮助。 谢谢 这是我的密码: ALCdevice* device; device = alcOpenDevice(NULL); ALCcontext* context; alcCreateContext(device, NULL); alcMakeContextCurrent(context); NSString*

我试图通过引用以下内容,通过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);
刚刚发现! 我一直在使用:

alcCreateContext(device, NULL);
而不是:

context = alcCreateContext(device, NULL);

alGetError()有助于指出这一点。

我对openAL了解不多,但你试过AVAudioPlayer吗?它可能是用户使用的是的,我试过AVAudioPlayer,但我读过它的罚款,只有当延迟可以容忍。也就是说,不建议播放音效。你需要将自己的答案标记为正确答案,否则它仍然是一个未回答的问题