AVAudioSession 的 OutputVolume 永远不会改变
Posted
技术标签:
【中文标题】AVAudioSession 的 OutputVolume 永远不会改变【英文标题】:AVAudioSession's OutputVolume never changes 【发布时间】:2014-07-21 18:43:26 【问题描述】:SO 上有很多问题和答案都说[AVAudiosession sharedInstance].outputVolume
是检测设备音量的唯一方法。但它似乎并不完全正确。 outputVolume
永远不会改变,尽管它在第一次设置时是正确的(在应用程序启动时)。
我做错了吗?除了读取outputVolume
的值,我不知道还能做什么。我的直觉会告诉我这是一个错误,如果不是因为 other people 似乎做得很好。我还在 iOS 7 和 8 上对其进行了测试,所以它不是 iOS 8 的错误。我在一个小型测试项目中复制了同样的东西,所以我的项目中没有任何东西干扰它。
另外:我很清楚铃声音量和音量之间的区别。我都改了,报的量还是没变。
这是我在测试项目中使用的函数:
- (void)checkVolume
float volume = [AVAudioSession sharedInstance].outputVolume;
NSLog(@"Volume: %f", volume);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
[self checkVolume];
);
【问题讨论】:
【参考方案1】:使用KVO,并确保激活sharedInstance
:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil];
【讨论】:
我明白了。秘密就在[[AVAudioSession sharedInstance] setActive:YES error:nil];
行中。这是我在outputVolume
改变之前必须调用的。非常感谢
在找到这个答案之前,我不得不查看很多虚假的 SO 答案。它应该被评为更高。
我仍然遇到一个问题,即 outputVolume 上的 KVO 在我的应用失去焦点后似乎停止工作(基本上是在我的音频会话被重置时),即使我重新注册了观察者。跨度>
【参考方案2】:
我发现我需要实际输出声音才能使 [AVAudioSession sharedInstance].outputVolume 准确。
换句话说 - [AVAudioSession sharedInstance].outputVolume 有点小问题 - 你需要播放音频才能返回正确的音量。
【讨论】:
这篇文章看起来不像是试图回答这个问题。这里的每一篇文章都应该明确地尝试回答这个问题;如果您有批评或需要澄清问题或其他答案,您可以在其下方直接post a comment(如这个)。请删除此答案并创建评论或新问题。见:Ask questions, get answers, no distractions 你会发现网上很多人说 [AVAudioSession sharedInstance].outputVolume 不起作用,这就是为什么至少有时会这样。 问题是为什么获取音量不能正常工作。答案是你需要播放声音才能让它工作。【参考方案3】:我检查了 iOS 12:
[[AVAudioSession sharedInstance] setActive:YES error:nil];
float vol = [[AVAudioSession sharedInstance] outputVolume];
NSLog(@"outputVolume: %f", vol);
【讨论】:
【参考方案4】:我也有这个问题。您需要开始您的音频会话并为其指定一个类别:
let session = AVAudioSession.sharedInstance()
do
try session.setCategory(.playback, options: .mixWithOthers)
try session.setActive(true)
catch
print("Unable to start audio session: \(error)")
您的音频会话的输出音量现在应该会发生音量变化。
【讨论】:
以上是关于AVAudioSession 的 OutputVolume 永远不会改变的主要内容,如果未能解决你的问题,请参考以下文章