在 viewDidLoad 上播放声音 - Xcode
Posted
技术标签:
【中文标题】在 viewDidLoad 上播放声音 - Xcode【英文标题】:Playing sound on viewDidLoad - Xcode 【发布时间】:2014-05-30 18:52:27 【问题描述】:我在加载视图时遇到了一个小问题(如果此代码有效,最终会在执行其他操作时播放声音)
问题:加载视图时手机上没有播放声音。但是,如果我在添加 breakpoint 后单步执行代码,我可以听到 iPhone 发出的声音:
[click play]
我从一个在线教程中获得了以下代码,并将其复制到我的 viewDidLoad 方法中:
- (void)viewDidLoad
[super viewDidLoad];
NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"States" ofType:@"mp3"]];
AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
[click play]; // Breakpoint is here
我做过的事情:
在我的头文件中导入了 AudioToolbox/AudioToolbox.h 和 AVFoundation/AVFoundation.h 在有断点和没有断点的情况下执行代码 --> 有了断点和单步执行,我可以听到声音;没有我不能。如果我能得到一些建议或意见来尝试它,我将不胜感激。甚至是在我的应用程序中实现音频的另一种方式
谢谢。
【问题讨论】:
尝试 viewdidappear 一次 您最好将 click 添加为类的属性 【参考方案1】:您的音频播放器对象“click”将在 viewDidLoad 完成后立即释放,因为它已分配给局部变量。您需要为您的播放器创建一个 ivar 或属性。
【讨论】:
【参考方案2】:musicFile
不包含音乐文件(或者实际上是任何文件)的 URL。它包含应用程序本身的 URL。您想要做的是更多类似的事情:
musicFile = [[NSBundle mainBundle] URLForResource:@"musicFile" withExtension:@"caf"];
另外,对于播放小的短音频片段,您可能只想使用Audioservices
一次性初始化(在 viewDidLoad 中,或静态):
static SystemSoundID sound;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
NSURL* url = [[NSBundle mainBundle] URLForResource:@"statusChanged" withExtension:@"caf"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &sound);
);
然后播放声音:
AudioServicesPlaySystemSound(sound);
【讨论】:
以上是关于在 viewDidLoad 上播放声音 - Xcode的主要内容,如果未能解决你的问题,请参考以下文章