5

我正在尝试播放声音,但是当我编码时:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject);

它引发以下错误:

将 Objective-C 指针类型“NSURL *”转换为 C 指针类型“CFURLRef”(又名“const struct __CFURL *”)需要桥接转换错误

我已经尝试了以下两种建议的解决方案:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

或者

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject);

但我仍然无法播放声音。

我想问题是:桥接错误是声音没有播放的原因,还是我应该在其他地方寻找?

我可以使用 SysSound 示例代码播放声音,并且我使用的是 iOS 6 和 Xcode 4.5。

感谢您的任何指点:)

4

1 回答 1

10

演员阵容可能不是声音没有播放的原因:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);

很好。

您的错误很可能出现在您没有向我们展示的代码中。一个常见问题是 URL 创建错误或文件格式无效。

修改您的代码如下:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject);
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status);

并检查你得到什么状态码;parmErr(-50) 比较常见,通常意味着您的 URL 为零。

哦,还有一个想法,你没有显示你实际在哪里播放声音。你知道这AudioServicesCreateSystemSoundID实际上并没有播放声音。您需要致电:

AudioServicesPlaySystemSound(soundFileObject);

抱歉,如果您已经知道了!

于 2012-07-28T19:50:40.457 回答