在viewDidLoad上播放声音 - Xcode

时间:2014-05-30 18:52:28

标签: ios xcode audio

我在加载视图时播放声音面临一个小问题(最终是在此代码有效的情况下执行的其他操作)

问题:加载视图时,手机上的声音无法播放。但是,如果我在添加断点后单步执行代码,我可以听到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
  • 执行包含和不包含断点的代码 - >随着断点和踩踏,我可以听到声音;没有我不能。

如果我能得到一些建议或输入来尝试,我将不胜感激。或者甚至是在我的应用程序中实现音频的另一种方式

谢谢。

2 个答案:

答案 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);