一种基于Android的音频焦点实现方法

阅读: 评论:0

著录项
  • CN202210114660.7
  • 20220130
  • CN114416017A
  • 20220429
  • 重庆长安汽车股份有限公司
  • 高斯雄;谢乐成
  • G06F3/16
  • G06F3/16

  • 重庆市江北区建新东路260号
  • 重庆(50)
  • 重庆博凯知识产权代理有限公司
  • 孙根
摘要
本发明公开了一种基于Android的音频焦点实现方法,包括S1、在Android系统提供的默认音频焦点策略的基础上注入自定义的外部音频焦点策略;S2、定义音频焦点策略的规则为当音源获得焦点后才能接入;S3、定义音源类型的优先级;S4、定义两个音源类型同时申请焦点时的组合类型;S5、申请音源申请焦点;S6、当申请音源使用完焦点后,释放焦点;S7、根据当前音源的优先级和组合类型自动将释放的焦点恢复至当前音源,并返回当前音源获得焦点通知和申请音源释放焦点成功通知。本发明解决了Android系统原生策略使用场景比较单一,功能不够全面的问题,能根据自身使用场景完全自定义包括混音场景、相互打断、不同场景下音量控制等复杂场景的实现。
权利要求

1.一种基于Android的音频焦点实现方法,其特征在于,包括如下步骤,

S1、在Android系统提供的默认音频焦点策略的基础上注入自定义的外部音频焦点策略,该外部音频焦点策略用于完成焦点的申请、释放、维护和通知;

S2、定义音频焦点策略的规则为当音源获得焦点后才能接入;

S3、定义音源类型的优先级;

S4、定义两个音源类型同时申请焦点时的组合类型;

S5、申请音源申请焦点;根据申请音源和当前音源的优先级和组合类型确定申请音源的申请焦点结果,若申请音源申请到焦点,则返回申请焦点成功通知并执行下一步骤;否则,返回申请焦点失败通知并中止执行;

S6、当申请音源使用完焦点后,释放焦点;

S7、根据当前音源的优先级和组合类型自动将释放的焦点恢复至当前音源,并返回当前音源获得焦点通知和申请音源释放焦点成功通知。

2.根据权利要求1所述的一种基于Android的音频焦点实现方法,其特征在于,所述自定义的外部焦点策略通过AudioPolicy.Builder类里的setAudioPolicyFocusListener方法注册外部监听,并在实例AudioPolicyFocusListener回调中使用该自定义的外部音频焦点策略。

3.根据权利要求1所述的一种基于Android的音频焦点实现方法,其特征在于,所述音源类型的优先级为,按键音>电话>语音助手>导航>媒体。

4.根据权利要求1所述的一种基于Android的音频焦点实现方法,其特征在于,所述组合类型包括混音、停止当前音源、暂停当前音源、拒绝申请音源、混音并降低当前音源音量或混音并降低申请音源音量。

5.根据权利要求1所述的一种基于Android的音频焦点实现方法,其特征在于,通过栈对焦点进行维护和管理,每个焦点均有一条栈进行维护和管理。

6.根据权利要求1所述的一种基于Android的音频焦点实现方法,其特征在于,所述申请音源申请焦点包括如下步骤,其中,当前音源包括第一当前音源和第二当前音源;

S501、申请音源发出申请焦点请求;

S502、判断申请音源和第一当前音源的优先级,并确定组合类型,形成第一混音逻辑;

S503、若组合类型为拒绝申请音源,则申请音源申请焦点失败;

S504、若申请音源与第一当前音源为同一优先级,则判断第一混音逻辑是否为停止当前音源,若是,则第一当前音源失去焦点,申请音源申请焦点成功;否则第一当前音源短暂失去焦点,申请音源申请焦点成功;

S505、若组合类型为其他类型,则继续判断申请音源和第二当前音源的优先级,确定组合类型,形成第二混音逻辑,并执行下一步骤;

S506、若组合类型为拒绝申请音源,则判断第二当前音源是否持有焦点;若是,则第二当前音源失去焦点,申请音源申请焦点成功;否则返回S504通过判断第一混音逻辑由第一当前音源获取焦点;

S507、若组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则判断第一混音逻辑的组合类型由第一当前音源获取焦点或直接获取焦点;否则第二当前音源获取焦点。

7.根据权利要求6所述的一种基于Android的音频焦点实现方法,其特征在于,所述释放焦点包括如下步骤,

S601、当申请音源使用完焦点后,发出释放焦点请求;

S602、判断第一当前音源和第二当前音源的优先级,并确定组合类型,形成第三混音逻辑;

S603、若第三混音逻辑的组合类型为拒绝申请音源或第一当前音源和第二当前音源为同一优先级,则判断第二当前音源是否持有焦点,若是,则第二当前音源失去焦点,第一当前音源获得焦点;否则,第一当前音源获得焦点;

S604、若第三混音逻辑的组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则第一当前音源获得焦点;否则第二当前音源获得焦点;

S605、当第一当前音源获得焦点后,发出申请音源释放焦点成功通知。

说明书
技术领域

本发明属于计算机技术技术领域,更具体涉及一种基于Android的音频焦点实现方法。

近年来车辆娱乐系统要求越来越高,接入的应用越来越多,原生的Android焦点策略满足不了车辆的需求,加上Android是多任务系统,Android系统允许应用间竞争资源,比如音频,Android系统在资源足够的情况下允许应用间同时播放音视频,系统会把所有音频流合并在一路通道里,这样做优点是体现了Android系统的性能,但是也给用户带来了一定的困扰,易出现混音。所以Android系统引入了“音频焦点”的概念,应用只有在获取到焦点的情况下才被允许播放音频。

焦点机制是一种合作模式,Android系统建议应用遵守音频焦点准则,不强制应用在申请到焦点时才能播放。所以,如果应用在不遵循准则的情况下去播放容易造成一种不好的用户体验。

我国专利CN202011566023.0公开了一种车辆的音频播放方法、装置、电子设备及存储介质,包括:获取音频播放的播放机制;根据播放机制生成xml配置文件;利用回调函数解析xml配置文件,生成配置策略,并根据配置策略修改车辆的音频播放策略,并根据修改后的音频播放策略播放至少一个目标音频。由此,解决了相关技术中对于不同的车载平台,在做音频焦点策略改变时都需要来修改MediaFocusControl.java文件来实现平台特有的音频焦点策略风格的问题。该发明只提供了利用xml配置策略动态,利用外部策略得到音频焦点申请结果,只是把每次修改MediaFocusControl.java文件换为xml文件执行,应用场景比较单一,功能不够全面,难以满足了用户个性化的需求。

为解决上述问题,本发明提供了一种基于Android的音频焦点实现方法,解决了Android系统原生策略使用场景比较单一,功能不够全面的问题,能根据自身使用场景完全自定义包括混音场景、相互打断、不同场景下音量控制等复杂场景的实现。

为了解决上述技术问题,本发明采用的技术方案是这样的:一种基于Android的音频焦点实现方法,包括如下步骤,

S1、在Android系统提供的默认音频焦点策略的基础上注入自定义的外部音频焦点策略,该外部音频焦点策略用于完成焦点的申请、释放、维护和通知;

S2、定义音频焦点策略的规则为当音源获得焦点后才能接入;

S3、定义音源类型的优先级;

S4、定义两个音源类型同时申请焦点时的组合类型;

S5、申请音源申请焦点;根据申请音源和当前音源的优先级和组合类型确定申请音源的申请焦点结果,若申请音源申请到焦点,则返回申请焦点成功通知并执行下一步骤;否则,返回申请焦点失败通知并中止执行;

S6、当申请音源使用完焦点后,释放焦点;

S7、根据当前音源的优先级和组合类型自动将释放的焦点恢复至当前音源,并返回当前音源获得焦点通知和申请音源释放焦点成功通知。

作为优化,所述自定义的外部焦点策略通过AudioPolicy.Builder类里的setAudioPolicyFocusListener方法注册外部监听,并在实例AudioPolicyFocusListener回调中使用该自定义的外部音频焦点策略。

作为优化,所述音源类型的优先级为,按键音>电话>语音助手>导航>媒体。

作为优化,所述组合类型包括混音、停止当前音源、暂停当前音源、拒绝申请音源、混音并降低当前音源音量或混音并降低申请音源音量。

作为优化,通过栈对焦点进行维护和管理,每个焦点均有一条栈进行维护和管理。

作为优化,所述申请音源申请焦点包括如下步骤,其中,当前音源包括第一当前音源和第二当前音源;

S501、申请音源发出申请焦点请求;

S502、判断申请音源和第一当前音源的优先级,并确定组合类型,形成第一混音逻辑;

S503、若组合类型为拒绝申请音源,则申请音源申请焦点失败;

S504、若申请音源与第一当前音源为同一优先级,则判断第一混音逻辑是否为停止当前音源,若是,则第一当前音源失去焦点,申请音源申请焦点成功;否则第一当前音源短暂失去焦点,申请音源申请焦点成功;

S505、若组合类型为其他类型,则继续判断申请音源和第二当前音源的优先级,确定组合类型,形成第二混音逻辑,并执行下一步骤;

S506、若组合类型为拒绝申请音源,则判断第二当前音源是否持有焦点;若是,则第二当前音源失去焦点,申请音源申请焦点成功;否则返回S504通过判断第一混音逻辑由第一当前音源获取焦点;

S507、若组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则判断第一混音逻辑的组合类型由第一当前音源获取焦点或直接获取焦点;否则第二当前音源获取焦点。

作为优化,所述释放焦点包括如下步骤,

S601、当申请音源使用完焦点后,发出释放焦点请求;

S602、判断第一当前音源和第二当前音源的优先级,并确定组合类型,形成第三混音逻辑;

S603、若第三混音逻辑的组合类型为拒绝申请音源或第一当前音源和第二当前音源为同一优先级,则判断第二当前音源是否持有焦点,若是,则第二当前音源失去焦点,第一当前音源获得焦点;否则,第一当前音源获得焦点;

S604、若第三混音逻辑的组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则第一当前音源获得焦点;否则第二当前音源获得焦点;

S605、当第一当前音源获得焦点后,发出申请音源释放焦点成功通知。

与现有技术相比,本发明具有如下优点:

本发明通过在Android系统除提供一种默认的音频策略外,提供注册的方式注入外部音频焦点策略;自定义AudioPolicy焦点策略通过AudioPolicy.Builder类里的setAudioPolicyFocusListener方法注册外部监听,在实例AudioPolicyFocusListener回调中使用自定义的音频焦点策略;在自定义音频焦点策略里完成不同应用焦点的申请、释放维护及通知。

本发明高度平台化,移植到其他项目只需修改xml文件的一个配置即可实现不同场景下不同应用间焦点的管理;解决了Android原生系统覆盖场景少,不能实现复杂场景的覆盖问题;以前降低音量完全由应用自己控制改为系统控制,使音量降低变得灵活可控;单一应用在符合混音场景的同时可申请到不同类型的焦点;增加了几种音频类型,使覆盖范围更广泛。

综上所述,自定义音频焦点策略解决了Android原生系统很多覆盖不到的场景问题,系统焦点维护变得更简单灵活,能快速实现音频焦点的管理维护。

图1为本发明焦点申请过程示意图;

图2为本发明焦点释放过程示意图;

图3为本发明实施例中的场景一时序图;

图4为本发明实施例中的场景二时序图。

下面将结合附图及实施例对本发明作进一步说明。

实施例:参见图1-图4,

一种基于Android的音频焦点实现方法,包括如下步骤,

S1、在Android系统提供的默认音频焦点策略的基础上注入自定义的外部音频焦点策略,该外部音频焦点策略用于完成焦点的申请、释放、维护和通知。所述自定义的外部焦点策略通过AudioPolicy.Builder类里的setAudioPolicyFocusListener方法注册外部监听,并在实例AudioPolicyFocusListener回调中使用该自定义的外部音频焦点策略。通过栈对焦点进行维护和管理,每个焦点均有一条栈进行维护和管理。

S2、定义音频焦点策略的规则为当音源获得焦点后才能接入。

S3、定义音源类型的优先级。所述音源类型的优先级为,按键音>电话>语音助手>导航>媒体。

S4、定义两个音源类型同时申请焦点时的组合类型;所述组合类型包括混音(same)、停止当前音源(sotp)、暂停当前音源(pause)、拒绝申请音源(reject)、混音并降低当前音源音量(mix_duck2)或混音并降低申请音源音量(mix_duck1)。

S5、申请音源申请焦点;根据申请音源和当前音源的优先级和组合类型确定申请音源的申请焦点结果,若申请音源申请到焦点,则返回申请焦点成功通知并执行下一步骤;否则,返回申请焦点失败通知并中止执行;

所述申请音源(音源A)申请焦点包括如下步骤,其中,当前音源包括第一当前音源(音源B)和第二当前音源(音源C);

S501、申请音源发出申请焦点请求;

S502、判断申请音源和第一当前音源的优先级,并确定组合类型,形成第一混音逻辑;

S503、若组合类型为拒绝申请音源,则申请音源申请焦点失败;

S504、若申请音源与第一当前音源为同一优先级,则判断第一混音逻辑是否为停止当前音源,若是,则第一当前音源失去焦点,申请音源申请焦点成功;否则第一当前音源短暂失去焦点,申请音源申请焦点成功;

S505、若组合类型为其他类型,则继续判断申请音源和第二当前音源的优先级,确定组合类型,形成第二混音逻辑,并执行下一步骤;

S506、若组合类型为拒绝申请音源,则判断第二当前音源是否持有焦点;若是,则第二当前音源失去焦点,申请音源申请焦点成功;否则返回S504通过判断第一混音逻辑由第一当前音源获取焦点;

S507、若组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则判断第一混音逻辑的组合类型由第一当前音源获取焦点或直接获取焦点;否则第二当前音源获取焦点。

S6、当申请音源使用完焦点后,释放焦点。

所述释放焦点包括如下步骤,

S601、当申请音源使用完焦点后,发出释放焦点请求;

S602、判断第一当前音源和第二当前音源的优先级,并确定组合类型,形成第三混音逻辑;

S603、若第三混音逻辑的组合类型为拒绝申请音源或第一当前音源和第二当前音源为同一优先级,则判断第二当前音源是否持有焦点,若是,则第二当前音源失去焦点,第一当前音源获得焦点;否则,第一当前音源获得焦点;

S604、若第三混音逻辑的组合类型为混音并降低当前音源音量或混音并降低申请音源音量,则判断第二当前音源是否持有焦点,若是,则第一当前音源获得焦点;否则第二当前音源获得焦点;

S605、当第一当前音源获得焦点后,发出申请音源释放焦点成功通知。

S7、根据当前音源的优先级和组合类型自动将释放的焦点恢复至当前音源,并返回当前音源获得焦点通知和申请音源释放焦点成功通知。

具体的,本发明基于Android系统除提供一种默认的音频策略外,提供注册的方式注入外部音频焦点策略,自定义Audio Policy焦点策略通过setAudioPolicyFocusListener方法在实例AudioPolicyFocusListener回调中使用自定义的音频焦点策略。

在自定义音频焦点策略里完成不同应用焦点的申请、释放维护及通知,本发明策略定义为音源分为几个大类,根据优先级为每个大类定义了level、bus编号、混音音量处理逻辑等属性,又定义两组音源类型同时申请焦点时可形成的几种组合情况(只混音、停止当前音源、暂停当前音源、拒绝申请源、混音时降低当前源或申请源音量)几种;

通过栈维护应用焦点的管理,每个level的焦点都会有一条栈进行维护,应用申请焦点时会先去查询当前系统持有焦点的类型,根据类型匹配申请源是否能够申请到焦点,给出对应结果做焦点结果通知,如图1所示。

应用释放焦点时音源栈对此做的处理如图2所示。

按上述方案实施后即可得到一个灵活多变的Android系统音频焦点策略,基于当前车机使用的音频策略,和对Android系统焦点的管理方法,用常见场景做说明:

场景一:多媒体播放过程中,TTS语音助手或电话打断,TTS语音助手或电话结束后,多媒体恢复播放,如图3所示

A1.应用A按Android原生API申请多媒体焦点进行多媒体播放;

A2.应用B用电话或TTS语助申请焦点后,由于电话或语助优先级高于媒体,应用A会收到AudioManager.AUDIOFOCUS_LOSS_TRANSIENT(短暂失去焦点)通知;

A3.应用A焦点短暂丢失应该暂停播放并记录被动丢失焦点暂停;

A4.应用B电话或语助焦点申请成功,并开始播放或者通话;

A5.应用B电话或语助结束 焦点释放;

A6.系统返还焦点给应用A,收到AudioManager.AUDIOFOCUS_GAIN通知,媒体恢复播放。

本例中,基于技术方案定义的常用焦点优先级:按键音>电话焦点>语助焦点>导航>媒体,且当前为媒体持有焦点时,语助TTS或者电话TEL打断媒体焦点都只是让媒体短暂丢失焦点,所以语助TTS或者电话TEL结束时释放焦点,系统焦点会自动恢复到之前播放的媒体应用,改变了由应用自己申请焦点类型来控制焦点是否能回到自己应用改为策略控制,降低了应用使用API的难度。

场景二:媒体在播放中,导航去申请焦点,如图4所示

A1.应用A申请媒体焦点;

A2.焦点管理判断当前没有其他应用持有焦点,通知应用A焦点申请成功;

A3.应用A收到焦点申请成功回调,开始播放音乐;

A4.打开导航开始导航播报,导航申请焦点;

A5.根据焦点策略导航和语音同级并且需要混音播放,所以此时会反馈焦点申请成功通知导航app,并且根据混音策略降低多媒体音量;

A6.导航收到焦点申请成功回调事件,开始播报;此时和语音混音;

A7.导航播报完成,释放焦点,多媒体应用A音量恢复正常;

目前音频策略定义的媒体遇到导航会把媒体进行区间降音,系统会根据媒体当前音量处于不同区间段值做降音处理,更加灵活多变。

本例中,导航和媒体为一种混音场景,所以无论当前持有焦点的是媒体还是导航,应用申请另一个焦点都能得到申请成功的结果,降音处理改由系统进行处理,实现了系统的统一性,而不是以前的改由应用处理,造成不同的应用处理方式不一致,给用户的体验也不好

本发明通过在Android系统除提供一种默认的音频策略外,提供注册的方式注入外部音频焦点策略;自定义AudioPolicy焦点策略通过AudioPolicy.Builder类里的setAudioPolicyFocusListener方法注册外部监听,在实例AudioPolicyFocusListener回调中使用自定义的音频焦点策略;在自定义音频焦点策略里完成不同应用焦点的申请、释放维护及通知。

本发明高度平台化,移植到其他项目只需修改xml文件的一个配置即可实现不同场景下不同应用间焦点的管理;解决了Android原生系统覆盖场景少,不能实现复杂场景的覆盖问题;以前降低音量完全由应用自己控制改为系统控制,使音量降低变得灵活可控;单一应用在符合混音场景的同时可申请到不同类型的焦点;增加了几种音频类型,使覆盖范围更广泛。

综上所述,自定义音频焦点策略解决了Android原生很多覆盖不到的场景问题,系统焦点维护变得更简单灵活,能快速实现音频焦点的管理维护。

最后需要说明的是,以上实施例仅用以说明本发明的技术方案而非限制技术方案,本领域的普通技术人员应当理解,那些对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,均应涵盖在本发明的权利要求范围当中。

本文发布于:2023-04-13 05:55:00,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/85374.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图