繁体   English   中英

在viewDidLoad上播放声音-Xcode

[英]Playing sound on viewDidLoad - Xcode

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

问题:加载视图时,声音无法在电话上播放。 但是,如果在以下位置添加断点后逐步执行代码,则可以从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.hAVFoundation / AVFoundation.h
  • 在有断点和无断点的情况下执行代码->通过断点和单步执行,我可以听到声音; 没有我不能。

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

谢谢。

viewDidLoad完成后,音频播放器对象“ click”将被重新分配,因为它已分配给局部变量。 您需要为播放器创建一个ivar或属性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM