我正在制作一款小型iOS游戏,除了声音外,还完成了所有内容.我检查了文件格式,尝试过.wav和.aiff,但没有一个能够正常工作.相关代码如下:
.h
文件:
#import <AudioToolbox/AudioToolbox.h>
@public SystemSoundID mBeep;
NSString* path;
NSURL* url;
Run Code Online (Sandbox Code Playgroud)
.m
文件:
path = [[NSBundle mainBundle]pathForResource:@"hit" ofType:@"wav"];
url = [NSURL URLWithString:path];
AudioServicesCreateSystemSoundID((CFURLRef)url, &mBeep);
AudioServicesPlaySystemSound(mBeep); //Gets called, doesn't play
Run Code Online (Sandbox Code Playgroud)
如果我使用无证ID之一,就像1103
用AudioServicesPlaySystemSound
,声音正常播放.
我很确定我的文件很好,因为相同的.wav文件在Android,VLC,iTunes等上运行良好.
有谁知道我做错了什么?
最可能的罪魁祸首是WAV上的编码.如本回答所示,iOS仅支持某些编解码器,而您尝试播放的WAV可能使用不受支持的编解码器.
就像那个答案所说,最简单的解决方案是使用命令行afconvert
工具(无损)将您的WAV转换为Apple的默认CAF格式,并使用它:
afconvert sound1.wav sound1.caf
Run Code Online (Sandbox Code Playgroud)
另一种可能性和实际问题的任择议定书有,是该文件不存在和/或pathForResource
没有成功找到它,它会被指示path
是nil
.