不要播放声音

时间:2012-09-26 11:12:59

标签: objective-c ios xcode audio

我将我的项目转换为ARC。 Xcode在示例

的代码中改变了这一行
soundFileURLRef = (CFURLRef) [tapSound retain];

soundFileURLRef = (__bridge CFURLRef) tapSound;

但没有声音播放。怎么了?

- (IBAction)buttonTapped:(UIButton *)sender {
        // Create the URL for the source audio file. The URLForResource:withExtension: method is new in iOS 4.0
        NSURL *tapSound = [[NSBundle mainBundle] URLForResource: @"abide" withExtension: @"aif"];

        CFURLRef        soundFileURLRef;
        SystemSoundID   soundFileObject;

        // Store the URL as a CFURLRef instance
        soundFileURLRef = (__bridge CFURLRef) tapSound; // I think this line is wrong

        // Create a system sound object representing the sound file.
        AudioServicesCreateSystemSoundID (

                                          soundFileURLRef,
                                          &soundFileObject
                                          );

        AudioServicesPlaySystemSound (soundFileObject);
    }

1 个答案:

答案 0 :(得分:3)

逻辑上,您的代码看起来完全正常。我怀疑您实际上没有将abide.aif与您的应用程序捆绑在一起,或者您不小心输入了错误的名称(扩展名为aiff?)。您可以通过在[NSBundle URLForResource:withExtension:]调用后设置断点并检查tapSound的内容来验证这一点。

请确保您已在“复制包资源”中为您的目标实际包含它:

此外,您应该知道,AudioServicesCreateSystemSoundID的来电应与AudioServicesDisposeSystemSoundID来电平衡。你在这里不必要地分配内存,ARC不会为你处理这个问题。

执行此操作的理想方法是完成所有工作,以便在SystemSoundIDawakeFromNib方法中创建viewDidLoad,将其存储为ivar,并且只调用{{ 1}}在您的按钮点击方法中。在dealloc方法中,您应该调用AudioServicesPlaySystemSound

让我知道它是怎么回事。