我在这里搜索并尝试了所有不同的解决方案,但没有任何效果。所以让我问:
按下按钮时,我正试图在iPhone应用程序上播放声音。我导入了Audio框架,用方法连接按钮,在包中有WAV声音文件,并使用以下代码播放声音:
NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/filename.wav"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);
但按下按钮时它不会发出声音。 (是的,我的声音已经开启了。)
任何想法可能是什么,以及我如何解决它?如果有帮助,我很乐意提供更多信息。
答案 0 :(得分:17)
首先,iPhone的首选声音格式是LE格式的CAF,或mp3用于音乐。您可以使用内置终端实用程序将wav转换为caf:
afconvert -f caff -d LEI16 crash.wav crash.caf
然后最简单的播放声音是使用AVAudioPlayer ...这个快速功能可以帮助你加载声音资源:
- (AVAudioPlayer *) soundNamed:(NSString *)name {
NSString * path;
AVAudioPlayer * snd;
NSError * err;
path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:name];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
NSURL * url = [NSURL fileURLWithPath:path];
snd = [[[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&err] autorelease];
if (! snd) {
NSLog(@"Sound named '%@' had error %@", name, [err localizedDescription]);
} else {
[snd prepareToPlay];
}
} else {
NSLog(@"Sound file '%@' doesn't exist at '%@'", name, path);
}
return snd;
}
答案 1 :(得分:0)
我不知道你是否已经解决了这个问题,但对于我来说,在iOS 7上,有时候(__bridge CFURLRef)
转换不起作用,在这种情况下,如果你打印出{{1的结果},它将是(__bridge CFURLRef)[NSURL fileURLWithPath:path]
。这导致0x0
失败。函数的返回值是AudioServicesCreateSystemSoundID()
的类型。如果失败,该函数将返回OSStatus
,这意味着一个或多个参数无效。 (如果成功执行,则返回-50
。)
我通过使用获取文件路径的C样式函数解决了这个问题:
0