AudioServicesPlaySystemSound 奇怪的行为
Posted
技术标签:
【中文标题】AudioServicesPlaySystemSound 奇怪的行为【英文标题】:AudioServicesPlaySystemSound weird behavior 【发布时间】:2015-12-28 11:54:14 【问题描述】:AudioservicesPlaySystemSound
出现这种不稳定的行为。
出于某种原因,在我的(真实设备)iPhone 5/6 上一切正常。但有时在我的(真实设备)iPhone 6+S 上,我听到 - 有时 - 只有 3 或 2 个声音我正在玩的 5 个
我用来创建这个声音的函数:
if let soundURL = NSBundle.mainBundle().URLForResource(soundName, withExtension: "mp3")
var mySound: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL, &mySound)
AudioServicesPlaySystemSound(mySound);
【问题讨论】:
您在这些设备上的 iOS 版本是什么?它们有什么不同吗? 嘿@Allen。是的。 iPhone 5 是 9.1 和 6 是 8.4 。 iPhone 6+ S 也是 9.1 是在声音的开头还是结尾处截断? @Allen 完全播放或完全播放(每个声音) 【参考方案1】:你应该在代码中做一些调试,找出问题的真正原因,下面的代码会打印出OSStatus:
let result = AudioServicesCreateSystemSoundID(soundURL, &mySound)
print(result)
当结果不为0时你需要弄清楚是什么问题,最常见的问题是声音文件应该小于30秒,否则系统声音服务将无法播放。
另一个问题是你应该在你的应用程序开始时创建系统声音,然后在需要时播放返回的 mySound,不要在每次播放时都调用 AudioServicesCreateSystemSoundID。
import UIKit
import AudioToolbox
class ViewController: UIViewController
var mySound: SystemSoundID = 0
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let soundName = "mytest"
if let soundURL = NSBundle.mainBundle().URLForResource(soundName, withExtension: "mp3")
let result = AudioServicesCreateSystemSoundID(soundURL, &mySound)
print(mySound)
print(result)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
@IBAction func play (sender: UIButton)
AudioServicesPlaySystemSound(mySound);
【讨论】:
嗨,艾伦,谢谢。您能否添加第二个问题的示例(工作代码)?我还没有完全明白。我在上面发布的代码重新创建了每个声音的所有变量,据我所知它们是本地的,所以它不认为是一个问题 + 它们最多大约 1-2 秒。 查看编辑后的答案,您的代码在多次播放时可能会出现问题,因为您每次播放时都会创建新的 AudioServicesCreateSystemSoundID。 哦。凉爽的。我会将此添加到下一次更新中。谢谢!!以上是关于AudioServicesPlaySystemSound 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章