不要播放声音[关闭]
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 不会为您处理这个问题。
执行此操作的理想方法是在您的awakeFromNib
或viewDidLoad
方法中创建SystemSoundID
,将其存储为ivar,并且仅在您的按钮点击方法中调用AudioServicesPlaySystemSound
.在你的 dealloc 方法中,你应该调用AudioServicesDisposeSystemSoundID
。
告诉我进展如何。
【讨论】:
我相信你的意思是说“只在你的按钮点击方法中调用AudioServicesPlaySystemSound()
”。不过写得不错。
@NJones:哎呀!感谢您发现这一点。以上是关于不要播放声音[关闭]的主要内容,如果未能解决你的问题,请参考以下文章