iOS使用虚拟AVAudioPlayer从铃声切换到系统音量

Posted

技术标签:

【中文标题】iOS使用虚拟AVAudioPlayer从铃声切换到系统音量【英文标题】:iOS Switching from ringer to system volume using dummy AVAudioPlayer 【发布时间】:2016-09-13 19:00:44 【问题描述】:

我的应用目前正在根据铃声音量播放声音。许多用户看到它是一个音板应用程序,这很烦人。我注意到,当弹出带有视频的广告时,音量控制会在关闭广告并恢复使用应用程序后更改为系统音量。考虑到这一点,我希望在启动应用程序时使用通过 AVAudioPlayer 播放的虚拟(静音)声音,有点欺骗它使用系统声音控制器而不是铃声。这是我当前用来播放声音的代码:

    func playSound(fNameOnly : String, sFileExt : String = "mp3")

    let soundUrl = NSBundle.mainBundle().URLForResource(fNameOnly, withExtension: sFileExt)
    var SSID : SystemSoundID = 0
    if gSoundsOn && soundUrl != nil 

        AudioservicesCreateSystemSoundID(soundUrl!, &SSID)

        AudioServicesPlaySystemSoundWithCompletion(SSID)
            AudioServicesDisposeSystemSoundID(SSID)
            self.soundComplete(SSID)
        

        self.soundArray.append(SSID)
    

我希望有人可以帮助我创建一个函数/方法,以便在启动/打开应用程序时通过 AVAudioPlayer 播放虚拟声音剪辑。

【问题讨论】:

【参考方案1】:

我也有这个问题。

问题是 AudioServicesPlaySystemSound 总是使用铃声音量,而 AVAudioPlayer 使用音量设置。在 SystemSound 之前播放 AVAudio 声音不会改变这种行为。可能会出现这种情况,因为现在当您按下音量按钮时,会弹出“音量”控件......但您会注意到它对正在播放的系统声音没有影响。这是一个真正的痛苦。

目前我让用户知道他们需要将设备上的铃声设置设置为“使用按钮更改”。这允许他们在游戏中改变铃声的音量。在我看来仍然不是一个很好的解决方案。恐怕唯一的解决方案是将 AVAudioPlayer 用于所有声音。当您需要快速声音时(例如单击按钮),这可能会产生一些不良延迟。

【讨论】:

以上是关于iOS使用虚拟AVAudioPlayer从铃声切换到系统音量的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:当铃声/静音开关从关闭模式打开时不想退出游戏

如何以编程方式播放默认电话铃声?

SpriteKit 覆盖音频文件

如何让我的应用程序中的播放器播放 UNNotificationSound.default()?

iOS 铃声开关使网络音频静音

iOS:将 AVAudioPlayer 的实例从一个变量移动到另一个变量