【问题标题】:Playing sound on viewDidLoad - Xcode在 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.hAVFoundation/AVFoundation.h
  • 在有断点和没有断点的情况下执行代码 --> 有了断点和单步执行,我可以听到声音;没有我不能。

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

谢谢。

【问题讨论】:

  • 尝试 viewdidappear 一次
  • 您最好将 click 添加为类的属性

标签: ios xcode audio


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多