SystemSoundID 有时会随设备音量而变化

Posted

技术标签:

【中文标题】SystemSoundID 有时会随设备音量而变化【英文标题】:SystemSoundID Sometimes Changing With Device Volume 【发布时间】:2013-05-20 00:30:16 【问题描述】:

我正在使用SystemSoundID 类在我的游戏中播放音效,但结果有些奇怪。我的一些声音,包括下面的landed1,会根据音量按钮改变音量,但其他的,比如deathsound 总是以最大音量播放。以下是与这两种声音相关的所有代码。

SystemSoundID deathsound;

SystemSoundID landed1;

...

NSURL *soundURL;

soundURL = [[NSBundle mainBundle] URLForResource:@"SMPKLanded1" withExtension:@"mp3"];
    AudioservicesCreateSystemSoundID ((__bridge CFURLRef) soundURL, &landed1);

soundURL = [[NSBundle mainBundle] URLForResource:@"SMPKDeathSound" withExtension:@"mp3"];
    AudioServicesCreateSystemSoundID ((__bridge CFURLRef) soundURL, &deathsound);

...

AudioServicesPlaySystemSound(landed1);

...

AudioServicesPlaySystemSound(deathsound);

如果代码和文件类型基本相同,为什么两者的行为会如此不同?这毫无意义!

【问题讨论】:

【参考方案1】:

好吧,经过大量时间让自己发疯后,我终于想通了。其中一些与AVAudioPlayer 同时播放,出于某种原因,这使得它们符合音量按钮,而另一些则不符合。我的下一步显然是创建一个无声的AVAudioPlayer,我现在已经这样做了,并且该程序可以正常运行。

作为后续问题,是否有人知道为什么拥有AVAudioPlayer 会影响SystemSoundIDs

【讨论】:

以上是关于SystemSoundID 有时会随设备音量而变化的主要内容,如果未能解决你的问题,请参考以下文章

根据设备音量ios控制滑块[关闭]

scrollWidth,clientWidth,offsetWidth的区别

好奇 CKAsset 的 fileUrl 是不是会随时间变化?

scrollWidth,clientWidth,offsetWidth的区别

scrollWidth,clientWidth,offsetWidth的区别

为啥while循环的执行速度会随时间变化?