iOS AVAudioSession回避缓慢且同步

iOS AVAudioSession回避缓慢且同步,第1张

概述在iOS中,我试图在播放一些音效时躲避音乐应用的音乐.如果你不知道,“躲避”只是意味着在播放我的声音之前音乐音量有点下降,然后播放声音,然后音乐音量恢复到初始音量. 对于躲避,我将AVAudioSession类别设置为AVAudioSessionCategoryAmbient,选项为AVAudioSessionCategoryOptionDuckOthers,然后激活/停用会话(并显然播放中间的声 在iOS中,我试图在播放一些音效时躲避音乐应用的音乐.如果你不知道,“躲避”只是意味着在播放我的声音之前音乐音量有点下降,然后播放声音,然后音乐音量恢复到初始音量.

对于躲避,我将AVAudioSession类别设置为AVAudioSessioncategoryAmbIEnt,选项为AVAudioSessioncategoryOptionDuckOthers,然后激活/停用会话(并显然播放中间的声音).它工作得很好,但是音量变化似乎是在与调用相同的线程中完成的,并且应用程序在修改音量时挂起.

如果你想复制行为,我认为最快的路线是启动一个新的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回避缓慢且同步全部内容,希望文章能够帮你解决iOS AVAudioSession回避缓慢且同步所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1027211.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存