gpt4 book ai didi

iOS AVAudioSession 闪避慢且同步

转载 作者:可可西里 更新时间:2023-11-01 06:05:46 26 4
gpt4 key购买 nike

在 iOS 中,我试图在播放某些音效时隐藏音乐应用程序的音乐。如果您不知道,“闪避”只是指在播放我的声音之前音乐音量降低一点,然后播放声音,然后音乐音量恢复到初始音量。

对于回避,我将 AVAudioSession 类别设置为 AVAudioSessionCategoryAmbient 并带有选项 AVAudioSessionCategoryOptionDuckOthers,然后激活/停用 session (并播放声音介于两者之间,很明显)。它运行良好,但音量更改似乎是在与调用相同的线程中完成的,并且在修改音量时应用挂起。

如果您想复制该行为,我认为最快的方法是启动一个新的 SpriteKit 项目,该项目将为您提供样本、船舶旋转项目。然后在touchesBegan:withEvent方法中加入如下代码:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions: AVAudioSessionCategoryOptionDuckOthers error: nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] setActive:NO error:nil];

接下来在 iOS 设备上运行该应用程序,将一些音乐放入音乐应用程序中,然后触摸屏幕以创建船只并躲避音乐。您会听到躲避声,但也会看到屏幕上的船只卡住。

这正常吗?在执行回避时避免应用卡住的最简单方法是什么?

顺便说一句,我在 iOS 8.1 上使用 iPhone 5S。另外,我在 Unity3D 插件中使用它。我如何从 Unity 本身中隐藏音乐应用程序?

最佳答案

您可以尝试将 AVAudioSession 调用放在不同的线程上。这样他们就不会阻塞主 (UI) 线程。这尤其适用于 setActive,它需要很长时间才能完成。

        dispatch_queue_t myQueue = dispatch_queue_create("com.myname.myapp", nil);
dispatch_async(myQueue, ^{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions: AVAudioSessionCategoryOptionDuckOthers error: nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
});

这个问题似乎也很相关:iOS AudioSessionSetActive() blocking main thread?

关于iOS AVAudioSession 闪避慢且同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com