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 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章