在iOS中播放的声音
问题描述:
我正在制作一个小型iOS游戏,并且完成了一切,除了声音。我已经检查过这些文件格式,尝试过.wav和.aiff,但都没有工作。相关的代码如下:在iOS中播放的声音
.h
文件:
#import <AudioToolbox/AudioToolbox.h>
@public SystemSoundID mBeep;
NSString* path;
NSURL* url;
.m
文件:
path = [[NSBundle mainBundle]pathForResource:@"hit" ofType:@"wav"];
url = [NSURL URLWithString:path];
AudioServicesCreateSystemSoundID((CFURLRef)url, &mBeep);
AudioServicesPlaySystemSound(mBeep); //Gets called, doesn't play
如果我使用无证ID之一,像1103
与AudioServicesPlaySystemSound
,声音正常播放。
我敢肯定我的文件都很好,因为相同的.wav文件完美的作品在Android上,VLC时,iTunes等
有谁知道我做错了吗?
答
最有可能的罪魁祸首是对WAV编码。如this answer所示,iOS仅支持某些编解码器,并且您尝试播放的WAV可能使用不支持的WAV。
就像那个回答说,最简单的解决方案将是使用命令行afconvert
工具(无损)您的WAV转换成苹果的默认CAF格式,并使用它:
afconvert sound1.wav sound1.caf
另一种可能性,和OP所具有的实际问题是该文件不存在和/或pathForResource
没有成功找到它,这将由path
指示为nil
。
我试过了。您提供的命令不起作用,但通过一些Google搜索,转换发生在“afconvert -f caff -d aac -c 1 /Users/raghavsood/Desktop/iOS/Shared/Resources/hit.wav/Users/raghavsood/Desktop/iOS/Shared/Resources/hit.caf“即使在此之后,声音也不会播放。我也试过使用aiff格式。你还有其他建议吗? – 2012-03-06 15:56:40
你能检查你是否成功阅读文件?尝试对文件做其他事情,比如将其加载到NSData中。 – yuji 2012-03-06 17:58:11
我使用以下命令来读取文件中的数据: NSData * fileData = [NSData dataWithContentsOfFile:path];如果(fileData!= NULL) { NSLog(@“File read”); } 日志语句不显示,所以我猜这个文件没有被读取。我试过改变资源路径。该文件存储在/ Shared/Resources中。我尝试过使用相对路径,替代路径以及沿途发明的其他路径。他们都没有工作。你还有其他建议吗? – 2012-03-06 18:41:01