AudioServicesPlaySystemSound 未在 iOS 8 台设备中播放任何声音
AudioServicesPlaySystemSound not playing any sound in iOS 8 device
我的项目中添加了 AVFoundation
和 AudioToolbox
框架。在我想播放系统声音的 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)
})
}
我的项目中添加了 AVFoundation
和 AudioToolbox
框架。在我想播放系统声音的 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)
})
}