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从铃声切换到系统音量的主要内容,如果未能解决你的问题,请参考以下文章