2012-02-26 115 views
1

我正在制作一个小型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之一,像1103AudioServicesPlaySystemSound,声音正常播放。

我敢肯定我的文件都很好,因为相同的.wav文件完美的作品在Android上,VLC时,iTunes等

有谁知道我做错了吗?

回答

6

最有可能的罪魁祸首是对WAV编码。如this answer所示,iOS仅支持某些编解码器,并且您尝试播放的WAV可能使用不支持的WAV。

就像那个回答说,最简单的解决方案将是使用命令行afconvert工具(无损)您的WAV转换成苹果的默认CAF格式,并使用它:

afconvert sound1.wav sound1.caf 

另一种可能性,和OP所具有的实际问题是该文件不存在和/或pathForResource没有成功找到它,这将由path指示为nil

+2

我试过了。您提供的命令不起作用,但通过一些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

+0

你能检查你是否成功阅读文件?尝试对文件做其他事情,比如将其加载到NSData中。 – yuji 2012-03-06 17:58:11

+0

我使用以下命令来读取文件中的数据: NSData * fileData = [NSData dataWithContentsOfFile:path];如果(fileData!= NULL) { NSLog(@“File read”); } 日志语句不显示,所以我猜这个文件没有被读取。我试过改变资源路径。该文件存储在/ Shared/Resources中。我尝试过使用相对路径,替代路径以及沿途发明的其他路径。他们都没有工作。你还有其他建议吗? – 2012-03-06 18:41:01