【问题标题】:AudioServicesPlaySystemSound not playing any sound in iOS 8 deviceAudioServicesPlaySystemSound 没有在 iOS 8 设备中播放任何声音
【发布时间】:2015-12-06 04:55:34
【问题描述】:

我的项目中添加了 AVFoundationAudioToolbox 框架。在我想播放系统声音的班级中,我#include <AudioToolbox/AudioToolbox.h> 并打电话给AudioServicesPlaySystemSound(1007);。我正在运行iOS 8 的设备中进行测试,声音已打开且音量足够高,但是当我运行应用程序并调用AudioServicesPlaySystemSound(1007); 时我听不到任何系统声音......我会错过什么?

【问题讨论】:

  • 你检查静音开关了吗??
  • @JasonNam 是的,声音已开启...
  • 其他音频好听吗?
  • @JasonNam 铃声和音乐播放良好...

标签: ios audio avfoundation audiotoolbox system-sounds


【解决方案1】:

这将播放系统声音。

但请记住,系统声音不会播放更长的声音。

NSString *pewPewPath  = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
AudioServicesPlaySystemSound(_engineSound);

【讨论】:

  • 你能给一些建议,如何播放更长的声音或重复的音调吗?我必须重复播放声音,直到没有接听电话。
【解决方案2】:

根据文档:

此函数 (AudioServicesPlaySystemSound()) 将在 未来的版本。使用 AudioServicesPlaySystemSoundWithCompletion 而是。

使用以下代码 sn-p 播放声音:

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; //filename can include extension e.g. @"bang.wav"
if (fileURL)
{
    SystemSoundID theSoundID;
    OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
    if (error == kAudioServicesNoError)
    { 
        AudioServicesPlaySystemSoundWithCompletion(theSoundID, ^{
            AudioServicesDisposeSystemSoundID(theSoundID);
        });
    }
}

此外,完成块确保声音播放在被处理之前已完成。

如果这不能解决问题,则可能您的问题与代码无关,而是与设置有关(静音/模拟器上的设备从 MAC 系统偏好设置中静音,请确保选中“播放用户界面音效”)

【讨论】:

  • 你能链接到文档吗?我找不到你的报价。
  • 这是来自 SDK 头文件。尝试使用不推荐使用的方法,XCode 会显示警告消息。
【解决方案3】:

iOS10 无法播放这样的音频

SystemSoundID audioID;

AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &mySSID);
AudioServicesPlaySystemSound(audioID);

改用这个:

AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &audioID);

AudioServicesPlaySystemSoundWithCompletion(audioID, ^{
    AudioServicesDisposeSystemSoundID(audioID);
});

【讨论】:

    【解决方案4】:

    我刚刚在运行 iOS 8 的 iPad 和 iPhone 上测试了代码,它在真实设备上运行。

    由于一些非常奇怪的原因,它不适用于任何设备的 iOS 8 模拟器,即使它适用于 iOS 7 和 7.1 模拟器。

    否则下面的代码在所有真实设备上都可以正常工作。

    NSString *pewPewPath  = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
    NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
    AudioServicesPlaySystemSound(_engineSound);
    

    【讨论】:

      【解决方案5】:

      对于 swift 3.x 和 xcode 8:

      var theSoundID : SystemSoundID = 0
      let bundleURL = Bundle.main.bundleURL
      let url = bundleURL.appendingPathComponent("Invitation.aiff")
      
      let urlRef = url as CFURL
      
      let err = AudioServicesCreateSystemSoundID(urlRef, &theSoundID)
      if err == kAudioServicesNoError{
          AudioServicesPlaySystemSoundWithCompletion(theSoundID, {
              AudioServicesDisposeSystemSoundID(theSoundID)
          })
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多