AudioServicesPlaySystemSound 未在 iOS 8 台设备中播放任何声音

AudioServicesPlaySystemSound not playing any sound in iOS 8 device

我的项目中添加了 AVFoundationAudioToolbox 框架。在我想播放系统声音的 class 中,我 #include <AudioToolbox/AudioToolbox.h> 并调用 AudioServicesPlaySystemSound(1007);。我正在 运行ning iOS 8 设备上进行测试,声音已打开并且音量足够高,但是当我 运行 应用程序和 [=14] 时我听不到任何系统声音=] 被称为...我可能会遗漏什么?

这将播放系统声音。

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

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

根据文档:

This function (AudioServicesPlaySystemSound()) will be deprecated in a future release. Use AudioServicesPlaySystemSoundWithCompletion instead.

使用以下代码片段播放声音:

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 系统偏好设置静音,确保 "Play user interface sound effects"已选中)

iOS10 无法像这样播放音频:

SystemSoundID audioID;

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

改用这个:

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

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

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

由于某些非常奇怪的原因,它无法在任何设备的 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);

对于 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)
    })
}