iPhone App - WAV声音文件无法播放

时间:2010-11-27 23:13:08

标签: iphone ios ios4 audio

我在这里搜索并尝试了所有不同的解决方案,但没有任何效果。所以让我问:

按下按钮时,我正试图在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);

但按下按钮时它不会发出声音。 (是的,我的声音已经开启了。)

任何想法可能是什么,以及我如何解决它?如果有帮助,我很乐意提供更多信息。

2 个答案:

答案 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