不要播放声音[关闭]

Posted

技术标签:

【中文标题】不要播放声音[关闭]【英文标题】:Don't play sound [closed] 【发布时间】:2012-09-26 11:12:58 【问题描述】:

我将我的项目转换为 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】:

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

确保您已将其实际包含在“复制捆绑资源”中:

此外,您应该注意对AudioServicesCreateSystemSoundID 的调用应该与AudioServicesDisposeSystemSoundID 调用相平衡。您在这里不必要地分配内存,ARC 不会为您处理这个问题。

执行此操作的理想方法是在您的awakeFromNibviewDidLoad 方法中创建SystemSoundID,将其存储为ivar,并且仅在您的按钮点击方法中调用AudioServicesPlaySystemSound .在你的 dealloc 方法中,你应该调用AudioServicesDisposeSystemSoundID

告诉我进展如何。

【讨论】:

我相信你的意思是说“只在你的按钮点击方法中调用AudioServicesPlaySystemSound()”。不过写得不错。 @NJones:哎呀!感谢您发现这一点。

以上是关于不要播放声音[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c ++中播放声音[关闭]

播放完声音后如何关闭视图

如何使用 WaveOut\waveIn Api 录制和播放声音 [关闭]

C# Android:点击播放声音[关闭]

播放.swf声音文件? [关闭]

在 iphone/android 上播放声音 [关闭]