我在加载视图时播放声音面临一个小问题(最终是在此代码有效的情况下执行的其他操作)
问题:加载视图时,手机上的声音无法播放。但是,如果我在添加断点后单步执行代码,我可以听到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
}
我做过的事情:
如果我能得到一些建议或输入来尝试,我将不胜感激。或者甚至是在我的应用程序中实现音频的另一种方式
谢谢。
答案 0 :(得分:1)
一旦viewDidLoad完成,您的音频播放器对象"点击"将被解除分配,因为它已分配给本地变量。您需要为玩家创建一个ivar或属性。
答案 1 :(得分:0)
musicFile
不包含音乐文件(或实际上任何文件)的网址。它包含Application本身的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);