CN116860201B - Linux系统中安卓应用的音量独立调节控制方法及装置 - Google Patents

Linux系统中安卓应用的音量独立调节控制方法及装置 Download PDF

Info

Publication number
CN116860201B
CN116860201B CN202311135440.3A CN202311135440A CN116860201B CN 116860201 B CN116860201 B CN 116860201B CN 202311135440 A CN202311135440 A CN 202311135440A CN 116860201 B CN116860201 B CN 116860201B
Authority
CN
China
Prior art keywords
volume
application
android
volume value
linux
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311135440.3A
Other languages
English (en)
Other versions
CN116860201A (zh
Inventor
李翔
杨沙洲
黄晟
游远
马超
杨硕
彭韬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kirin Software Co Ltd
Original Assignee
Kirin Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202311135440.3A priority Critical patent/CN116860201B/zh
Publication of CN116860201A publication Critical patent/CN116860201A/zh
Application granted granted Critical
Publication of CN116860201B publication Critical patent/CN116860201B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/165Management of the audio stream, e.g. setting of volume, audio stream path
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开一种Linux系统中安卓应用的音量独立调节控制方法及装置,该方法的步骤包括:在安卓环境中创建用于实时同步最新的音量值的系统服务;调用修改后安卓框架层中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后保存到指定文件中;调用修改后安卓系统的混音线程,通过进程号获取当前播放线程所属的应用,根据应用包名从保存的文件中获取对应应用的音量值,并重新赋音量值;对音频数据进行重采样生成新的音频数据后发送至Linux侧进行播放。本发明可以实现对安卓应用输出音量的独立控制,还可以保证应用之前单独控制的音量大小在系统或应用重启后仍然有效。

Description

Linux系统中安卓应用的音量独立调节控制方法及装置
技术领域
本发明涉及Linux系统上兼容安卓(Android)应用的技术领域,尤其涉及一种Linux系统中安卓应用的音量独立调节控制方法及装置。
背景技术
在安卓系统中,AudioFlinger是安卓系统中的音频中枢,向上层提供访问接口,同时对下层通过HAL来管理音频设备,安卓音频硬件抽象层Audio HAL是AudioFlinger直接访问的对象,其定义了音频服务调用的标准接口,将AudioFlinger和AudioPolicyService真正地与硬件设备关联起来。安卓系统可以提供对不同安卓应用输出音量进行单独控制的支持,但是对于兼容运行在Linux系统上的安卓运行环境,由于安卓系统运行在容器环境中,环境的隔离和无法穿透会导致安卓的HAL层无法直接通过TiniAlsa调用Linux内核中的音频设备驱动,致使安卓无法控制音频播放。
为解决上述问题,现有技术中通常是将安卓内的音频数据发送给Linux侧,让Linux侧进行音频数据的统一播放和音量大小的统一调节,但该类方法不能支持安卓应用单独调节音量的功能,无法满足用户多样化的使用需求。
如中国专利申请CN111930340A 公开一种基于Linux与Android兼容技术的虚拟音频装置与方法,该方案通过在容器Android侧实现一虚拟音频设备单元,Android应用通过调用虚拟音频设备单元提供的接口来完成音频的输入、播放和录音;在容器Linux侧实现一虚拟音频接口单元,通过调用Linux音频设备驱动控制硬件音频设备;在容器Linux侧实现一音频会话控制单元,通过建立Socket监听线程穿透容器,实现容器两侧数据的双向传输,解决以容器技术兼容运行在Linux系统中的安卓应用调用Linux内核中音频设备驱动的问题。但是该方案仅能实现在兼容环境中对音频输出的统一播放和音量大小控制,无法实现对安卓应用输出音量进行单独的控制。
有从业者提出通过将安卓应用与AudioTrack绑定,采用AudioTrack传递调整后的音量值,在安卓系统对音频数据重采样后再采用控制音量值多音频数据进行调整,最后采用对应的AudioTrack完成对调整后音频数据的输出,实现对安卓应用输出音量的独立控制。但是该类方案仅仅能够对当前正在播放的Track实现音量重新调整,随着该Track的销毁该音量值也随即失效,会导致应用或系统重启后应用又恢复使用系统默认音量值,使得用户使用体验不佳,且该类方案所适用的应用受限,仅能够针对当前运行在桌面最上层的应用调节音量生效,对于在后台播放的应用,比如音乐类软件后台播放同样无法实现音量单独控制功能。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现操作简单、成本低、灵活性强且能够提高用户体验的Linux系统中安卓应用的音量独立调节控制方法及装置,可以实现对安卓应用输出音量的独立控制,还可以保证应用之前单独控制的音量大小在系统或应用重启后仍然有效。
为解决上述技术问题,本发明提出的技术方案为:
一种Linux系统中安卓应用的音量独立调节控制方法,应用于Linux兼容安卓系统运行的环境中,其中安卓系统以容器方式运行在Linux系统中,该方法的步骤包括:
步骤S1:在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时触发启动;
步骤S2:调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中;
步骤S3:调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,并根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值;
步骤S4:对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
进一步的,所述步骤S1包括:
步骤S101.在安卓环境中创建配置文件,以用于根据系统属性的变化进行后台服务的启动和停止操作;
步骤S102:创建系统服务,并配置为以音量值的改变作为触发条件,当应用调用AudioManager中接口以获取或者修改音量值时启动该系统服务,以将当前最新音量值的XML文件拷贝指定区域。
进一步的,所述步骤S2包括:
步骤S201:创建一个数据处理类PkgVolumeUtils和应用音量基类PackageVolume,其中PkgVolumeUtils类用于处理音量数据的操作,PackageVolume类用于定义应用包名及对应音量值;
步骤S202:当需要调节安卓应用的音量大小时,首先调用AudioManager中获取音量的getStreamVolume接口以根据当前调用的应用包名通过所述PkgVolumeUtils类查找对应包名所保存的音量值;获取到当前所调节应用的音量值大小后,调用AudioManager中的setStreamVolume和adjustStreamVolume设置接口,以截断安卓原有的获取和设置音量流程,将包名和音量值绑定,通过所述PkgVolumeUtils类以键值对的形式保存在指定的XML文件中。
进一步的,所述步骤S202中根据当前调用的应用包名通过所述PkgVolumeUtils类查找对应包名所保存的音量值时,如果对应的XML文件不存在或文件存在但没有对应应用的包名的值,则使用安卓原有的获取音量流程获取音量,否则从XML文件中读取音量值。
进一步的,所述步骤S3包括:
步骤S301:通过AudioFlinger中Track对应的进程号pid获取当前应用的包名;
步骤S302:根据应用包名从保存在XML文件中解析出对应的音量值,其中如果XML文件中不存在当前应用包名,则使用安卓原有的流程获取音量大小;
步骤S303:过滤当前获得的音量值大小,如果音量值大小在安卓系统支持的音量大小范围内,则将新获得的音量值赋值给当前Track,其中Track与创建AudioTrack一一对应。
进一步的,所述步骤S4中,通过AudioFlinger对音频数据进行重采样,生成新的音频数据后由安卓HAL层的音频库通过IPC通信模块将音频数据发送至Linux侧进行播放。
进一步的,所述步骤S4的步骤包括:
步骤S401:通过AudioFlinger对安卓音频数据进行重新采样;
步骤S402:安卓HAL层拦截原有PCM相关操作,使用本地Socket读写音频流数据;
步骤S403:通过安卓HAL层的音频库将重新采样后的PCM音频流数据通过IPC通信模块将音频数据发送至Linux侧的音频服务程序;
步骤S404:Linux 侧的音频服务程序通过监听线程读取到PCM音频流后进行动作匹配,如果动作匹配为音频播放,将数据写入PCM设备,完成音频播放。
一种Linux系统中安卓应用的音量独立调节控制装置,应用于Linux兼容安卓系统运行的环境中,其中安卓系统以容器方式运行在Linux系统中,该装置包括:
系统服务创建模块,用于在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时启动;
音量保存模块,用于调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中;
音量获取模块,用于调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,并根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值;
混音合成模块,用于对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
一种计算机设备,包括处理器以及存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序以执行如上述方法。
一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现如上述方法。
与现有技术相比,本发明的优点在于:
1、本发明应用在Linux兼容安卓系统运行的环境下,在Linux侧进行音频数据统一播放和音量大小统一调节的情况下,通过修改安卓框架层AudioManager类中的接口,截断安卓原有的设置和获取音量流程,将应用包名和音量值进行绑定,以键值对的形式保存到指定文件中,并修改安卓的AudioFlinger服务中MixThread混音线程中获取音量值的方式,通过进程号获取当前播放线程所属的应用,根据应用包名从保存的文件中获取对应应用的音量值,并对应用的AudioTrack重新赋音量值,由AudioFlinger对音频数据进行重采样,生成新的音频数据后将音频数据发送至Linux侧进行播放,使得在使用Linux统一管理安卓音频的情况下,不仅可以实现对安卓应用输出音量的独立控制,还可以保证应用之前单独控制的音量大小在系统或应用重启后仍然有效。
2、本发明通过修改安卓框架层AudioManager类中的接口获取/设置新的音量值,不区分是否为前台应用,还可以实现包括桌面最上层应用、对后台运行的音频播放软件等各类应用都能实现音量单独调节功能,更加精细的实现了应用单独调节音量功能,同时进一步提升了兼容环境上安卓应用的用户体验。
3、本发明通过对每个活跃的Track解析音量和设置音量,使得单个应用调节音量不会影响其他应用的音量大小,且能够记录用户对某个应用的调节音量行为,可以有效提升用户体验。
附图说明
图1是本实施例Linux系统中安卓应用的音量独立调节控制方法的实现流程示意图。
图2是本发明具体应用实施例中实现Linux系统中安卓应用的音量独立调节控制的实现流程示意图。
图3是本实施例中实现同步音量值的流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
在安卓系统中,安卓应用在播放音频流时通常是按照以下流程实现音量调节:创建一个AudioTrack,每个音频流对应一个AudioTrack实例,AudioTrack和AudioFlinger之间通过匿名共享内存来交互音频数据,AudioTrack负责写入音频数据,AudioFlinger负责读取音频数据。安卓应用每构造一个AudioTrack实例,AudioFlinger就会分别构建一个PlaybackThread实例、音频流管理类Track实例、TrackHandle实例、AudioTrackServerProxy实例和一块匿名共享内存与之对应,其中Track与AudioTrack是一对一关系,PlaybackThread与AudioTrack/Track则是一对多关系。安卓系统每一个播放设备(例如耳机、外放)都对应一个output,同时对应会创建一个播放线程playbackThread,playbackThread中的子线程Mixerthread线程会对各个Track重新采样,叠加混音处理,以实现每个Track的音量值设置。音频流管理类AudioFlinger::PlaybackThread::Track,是创建一块匿名共享内存用于AudioTrack与AudioFlinger之间进行数据交换,并负责音频流管理业务。安卓系统通过上述处理,可以提供对不同安卓应用输出音量进行单独控制的支持。
而应用于Linux兼容安卓系统运行的环境中,安卓系统是以容器方式运行在Linux系统中,Linux和安卓之间通过IPC通信模块进行数据交互,本发明在使用Linux统一管理安卓音频的情况下,通过安卓的AudioFlinger服务对AudioTrack重新赋值音量大小的方法实现对安卓应用单独调节音量功能。本发明应用在Linux兼容安卓系统运行的环境下,通过包名(PackageName)区分应用,在Linux侧进行音频数据统一播放和音量大小统一调节的情况下,修改安卓框架层AudioManager类中的接口,截断安卓原有的设置和获取音量流程,将应用包名和音量值进行绑定,以键值对的形式保存到指定文件中,并修改安卓的AudioFlinger服务中MixThread混音线程中获取音量值的方式,通过进程号获取当前播放线程所属的应用,根据应用包名从保存的文件中获取对应应用的音量值,并对对应应用的AudioTrack重新赋音量值,由AudioFlinger对音频数据进行重采样,生成新的音频数据后将音频数据发送至Linux侧进行播放,使得在使用Linux统一管理安卓音频的情况下,不仅可以实现对安卓应用输出音量的独立控制,还可以保证应用之前单独控制的音量大小在系统或应用重启后仍然有效。
如图1、2所示,本实施例Linux系统中安卓应用的音量独立调节控制方法的详细步骤包括:
步骤S1:在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时启动。
由于Java编写的安卓应用进程可以读写/sdcard目录,但没有权限读写data分区下的公共目录,而Audioflinger中MixThread线程处于C++层,可以读写data分区而无法读写/sdcard目录。本实施例通过创建一个安卓的系统级服务,在容器里运行的安卓应用触发音量大小调节操作,使得每当应用音量更新时,该服务会将XML文件同步更新到data分区,保证应用设置的音量值与C++层最终设定的音量值同步。
在一个可选的实施例中,步骤S1包括如下具体步骤:
步骤S101.在安卓环境中创建rc配置文件,以用于根据系统属性的变化进行后台服务的启动和停止操作;
步骤S102:创建系统服务,并配置为以音量值的改变作为触发条件,当应用调用AudioManager中接口以获取或者修改音量值时启动该系统服务,以将当前最新音量值的XML文件拷贝指定区域。
在一个可选的实施例中,如图3所示,先创建系统服务用于同步音量值,在AudioManager框架层保存音量值到/sdcard目录XML文件中,调用AudioManager中接口以获取或者修改音量值时启动该系统服务时,将保存当前最新音量值的XML文件从/sdcard目录拷贝到/data分区,后续再由AudioFlinger从data目录下的XML文件中解析出最新音量值,可以解决传统混音线程MixThread无法获取应用最新音量值的问题。
步骤S2:调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中。
本实施例中,预先修改安卓框架层AudioManager类中的接口,以截断安卓原有的设置和获取音量流程,将应用包名和音量值进行绑定,以键值对的形式保存到XML文件中。当需要进行音量设置或调节时,由安卓框架层AudioManager类中的接口设置和获取音量,即可由AudioManager将应用包名和音量值进行绑定,以键值对的形式保存到XML文件中。
在一个可选的实施例中,步骤S2包括如下具体步骤:
步骤S201:创建一个数据处理类PkgVolumeUtils和应用音量基类PackageVolume,其中PkgVolumeUtils类用于处理音量数据的操作(增、删、改、查等操作),PackageVolume类用于定义应用包名及对应音量值;
步骤S202:当需要调节安卓应用的音量大小时,安卓应用首先调用AudioManager中获取音量的getStreamVolume接口以根据当前调用的应用包名通过PkgVolumeUtils类查找对应包名所保存的音量值;获取到当前所调节应用的音量值大小后,安卓应用调用AudioManager中的setStreamVolume和adjustStreamVolume设置接口,以截断安卓原有的获取和设置音量流程,将包名和音量值绑定,通过PkgVolumeUtils类以键值对的形式保存在指定的XML文件中(例如sdcard目录下的XML文件中)。
在一个可选的实施例中,步骤S202中根据当前调用的应用包名通过PkgVolumeUtils类查找对应包名所保存的音量值时,如果对应的XML文件不存在或文件存在但没有对应应用的包名的值,则使用安卓原有的获取音量流程获取音量,否则从XML文件中读取音量值,使得对于各类应用都能有效实现音量调节,确保控制调节的可靠性。
步骤S3:调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,并根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值。
本实施例采用修改安卓的AudioFlinger服务中MixThread混音线程中获取音量值的方式,通过进程号获取当前播放线程所属的应用包名,根据应用包名从步骤S2保存的XML文件中获取对应应用的音量值,进而该应用对应的AudioTrack重新赋值音量大小。
在一个可选的实施例中,由AudioFlinger中Mixerthread线程中prepareTracks_l函数对每个活跃的Track进行处理,通过获取当前Track的应用包名和解析本地保存音量数据的XML文件,查找该应用包名对应设置的音量值,进而由AudioFlinger将音量值设置到混音线程Mixerthread中,给对应应用的AudioTrack重新赋值音量大小。
在一个可选的实施例中,步骤S2包括如下具体步骤:
步骤S301:通过AudioFlinger中Track对应的进程号pid获取当前应用的包名;
步骤S302:根据应用包名从保存在XML文件(例如保存在data分区下)中解析出对应的音量值,其中如果XML文件中不存在当前应用包名,则使用安卓原有的流程获取音量大小;
步骤S303:过滤当前获得的音量值大小,如果音量值大小在安卓系统支持的音量大小范围内,则将新获得的音量值赋值给当前Track,其中Track与创建AudioTrack一一对应。
步骤S4:对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
由于安卓上层传下来的音频采样率和底层音频驱动设定的采样率可能是不同的,且在AudioFlinger混音线程中需要混合多个Track音频数据,因而需要AudioFlinger对音频数据进行重采样,生成新的音频数据,由于安卓运行环境处于Docker容器中,无法直接使用音频设备,因而需要将生成的新音频数据发送至Linux侧进行播放。
在一个可选的实施例中,通过AudioFlinger对音频数据进行重采样,生成新的音频数据后由安卓HAL层的音频库通过IPC通信模块将音频数据发送至Linux侧进行播放,包括如下具体步骤:
步骤S401:通过AudioFlinger对安卓音频数据进行重新采样;
步骤S402:安卓HAL层拦截原有PCM相关操作,使用本地Socket读写音频流数据;
步骤S403:通过安卓HAL层的音频库(例如audio.primary.kmre.so)将重新采样后的PCM音频流数据通过IPC通信模块将音频数据发送至Linux侧的音频服务程序;
步骤S404:Linux 侧的音频服务程序通过监听线程读取到PCM音频流后进行动作匹配,如果动作匹配为音频播放,通过snd_pcm_write将数据写入PCM设备,完成音频播放。
本发明通过修改安卓框架层AudioManager类中的接口,截断安卓原有的设置和获取音量流程,将应用包名和音量值进行绑定,以键值对的形式保存到XML文件中,使得在使用Linux统一管理安卓音频的情况下,不仅可以实现对安卓应用输出音量的独立控制调节,满足用户对音量单独控制的需求,同时由于音量值会记录在本地XML文件中,AudioFlinger获取XML文件中记录的音量值后再实现混音,可以保证应用之前单独控制的音量大小在系统或应用重启后仍然有效,且由于会对每个活跃的Track解析音量和设置音量,单个应用调节音量不会影响其他应用的音量大小,通过记录用户对某个应用的调节音量行为,可以有效提升用户体验。
本发明通过修改安卓框架层AudioManager类中的接口获取/设置新的音量值,不区分是否为前台应用,还可以实现包括桌面最上层应用、对后台运行的音频播放软件等各类应用都能实现音量单独调节功能,更加精细的实现了应用单独调节音量功能,同时进一步提升了兼容环境上安卓应用的用户体验,给用户带来极大的方便和更好的体验。
本发明中Linux包括各个Linux发行版,Android包括Android OS、AOSP和各种基于AOSP的衍生系统。
本实施例还提供Linux系统中安卓应用的音量独立调节控制装置,应用于Linux兼容安卓系统运行的环境中,其中安卓系统以容器方式运行在Linux系统中,该装置包括:
系统服务创建模块,用于在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时启动;
音量保存模块,用于调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中;
音量获取模块,用于调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,并根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值;
混音合成模块,用于对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
本实施例Linux系统中安卓应用的音量独立调节控制装置与上述Linux系统中安卓应用的音量独立调节控制方法一一对应,在此不再一一赘述。
本实施例进一步提供计算机装置,包括处理器以及存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序以执行如上述方法。
本实施例进一步提供存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现如上述方法。
本领域内的技术人员应明白,本申请的上述实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

Claims (10)

1.一种Linux系统中安卓应用的音量独立调节控制方法,应用于Linux兼容安卓系统运行的环境中,其中安卓系统以容器方式运行在Linux系统中,其特征在于,该方法的步骤包括:
步骤S1:在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时触发启动;
步骤S2:调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中;
步骤S3:调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值;
步骤S4:对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
2.根据权利要求1所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S1包括:
步骤S101.在安卓环境中创建配置文件,以用于根据系统属性的变化进行后台服务的启动和停止操作;
步骤S102:创建系统服务,并配置为以音量值的改变作为触发条件,当应用调用AudioManager中接口以获取或者修改音量值时启动该系统服务,以将当前最新音量值的XML文件拷贝指定区域。
3.根据权利要求1所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S2包括:
步骤S201:创建一个数据处理类PkgVolumeUtils和应用音量基类PackageVolume,其中PkgVolumeUtils类用于处理音量数据的操作,PackageVolume类用于定义应用包名及对应音量值;
步骤S202:当需要调节安卓应用的音量大小时,首先调用AudioManager中获取音量的getStreamVolume接口以根据当前调用的应用包名通过所述PkgVolumeUtils类查找对应包名所保存的音量值;获取到当前所调节应用的音量值大小后,调用AudioManager中的setStreamVolume和adjustStreamVolume设置接口,以截断安卓原有的获取和设置音量流程,将包名和音量值绑定,通过所述PkgVolumeUtils类以键值对的形式保存在指定的XML文件中。
4.根据权利要求3所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S202中根据当前调用的应用包名通过所述PkgVolumeUtils类查找对应包名所保存的音量值时,如果对应的XML文件不存在或文件存在但没有对应应用的包名的值,则使用安卓原有的获取音量流程获取音量,否则从XML文件中读取音量值。
5.根据权利要求1所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S3包括:
步骤S301:通过AudioFlinger中Track对应的进程号pid获取当前应用的包名;
步骤S302:根据应用包名从保存在XML文件中解析出对应的音量值,其中如果XML文件中不存在当前应用包名,则使用安卓原有的流程获取音量大小;
步骤S303:过滤当前获得的音量值大小,如果音量值大小在安卓系统支持的音量大小范围内,则将新获得的音量值赋值给当前Track,其中Track与创建AudioTrack一一对应。
6.根据权利要求1~5中任意一项所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S4中,通过AudioFlinger对音频数据进行重采样,生成新的音频数据后由安卓HAL层的音频库通过IPC通信模块将音频数据发送至Linux侧进行播放。
7.根据权利要求6所述的Linux系统中安卓应用的音量独立调节控制方法,其特征在于,所述步骤S4的步骤包括:
步骤S401:通过AudioFlinger对安卓音频数据进行重新采样;
步骤S402:安卓HAL层拦截原有PCM相关操作,使用本地Socket读写音频流数据;
步骤S403:通过安卓HAL层的音频库将重新采样后的PCM音频流数据通过IPC通信模块将音频数据发送至Linux侧的音频服务程序;
步骤S404:Linux 侧的音频服务程序通过监听线程读取到PCM音频流后进行动作匹配,如果动作匹配为音频播放,将数据写入PCM设备,完成音频播放。
8.一种Linux系统中安卓应用的音量独立调节控制装置,应用于Linux兼容安卓系统运行的环境中,其中安卓系统以容器方式运行在Linux系统中,其特征在于,该装置包括:
系统服务创建模块,用于在安卓环境中创建音量同步更新系统服务以用于实时同步最新音量值,并配置为当调用AudioManager中接口获取或者修改音量值时启动;
音量保存模块,用于调用修改后安卓框架层AudioManager类中设置/获取音量接口,以截断安卓系统原有的设置和获取音量流程,将应用包名和音量值进行绑定后以键值对的形式保存到指定文件中;
音量获取模块,用于调用修改后安卓系统的AudioFlinger服务中MixThread混音线程,通过进程号获取当前播放线程所属的应用,并根据应用包名从保存的文件中获取对应应用的音量值,并为对应应用的AudioTrack重新赋音量值;
混音合成模块,用于对音频数据进行重采样生成新的音频数据后,将音频数据发送至Linux侧进行播放,以实现按照应用的音量独立调节控制。
9.一种计算机设备,包括处理器以及存储器,所述存储器用于存储计算机程序,其特征在于,所述处理器用于执行所述计算机程序以执行如权利要求1~7中任意一项所述方法。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现如权利要求1~7中任意一项所述的方法。
CN202311135440.3A 2023-09-05 2023-09-05 Linux系统中安卓应用的音量独立调节控制方法及装置 Active CN116860201B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311135440.3A CN116860201B (zh) 2023-09-05 2023-09-05 Linux系统中安卓应用的音量独立调节控制方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311135440.3A CN116860201B (zh) 2023-09-05 2023-09-05 Linux系统中安卓应用的音量独立调节控制方法及装置

Publications (2)

Publication Number Publication Date
CN116860201A CN116860201A (zh) 2023-10-10
CN116860201B true CN116860201B (zh) 2023-11-28

Family

ID=88236355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311135440.3A Active CN116860201B (zh) 2023-09-05 2023-09-05 Linux系统中安卓应用的音量独立调节控制方法及装置

Country Status (1)

Country Link
CN (1) CN116860201B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117271270B (zh) * 2023-11-21 2024-04-05 麒麟软件有限公司 在Web操作系统上监控Android音乐播放的方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105468380A (zh) * 2015-12-29 2016-04-06 山东大学 一种安卓系统上管理音频焦点的优化方法
CN108132771A (zh) * 2017-12-22 2018-06-08 福州瑞芯微电子股份有限公司 一种Android系统双屏异显的两路音频实现方法
CN110730406A (zh) * 2019-09-27 2020-01-24 深圳智者行天下科技有限公司 一种基于Android系统两路独立音源输出的方法
CN111930340A (zh) * 2020-09-21 2020-11-13 北京技德系统技术有限公司 一种基于Linux与Android兼容技术的虚拟音频装置与方法
CN113282271A (zh) * 2021-07-22 2021-08-20 北京麟卓信息科技有限公司 一种Linux平台上安卓应用的音频处理方法及装置
CN113835672A (zh) * 2021-11-23 2021-12-24 北京鲸鲮信息系统技术有限公司 Linux兼容Android的音频控制方法、系统及装置
CN114879930A (zh) * 2022-07-07 2022-08-09 北京麟卓信息科技有限公司 一种安卓兼容环境的音频输出优化方法
CN114968168A (zh) * 2022-08-02 2022-08-30 北京麟卓信息科技有限公司 一种安卓应用输出音量的独立控制方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105468380A (zh) * 2015-12-29 2016-04-06 山东大学 一种安卓系统上管理音频焦点的优化方法
CN108132771A (zh) * 2017-12-22 2018-06-08 福州瑞芯微电子股份有限公司 一种Android系统双屏异显的两路音频实现方法
CN110730406A (zh) * 2019-09-27 2020-01-24 深圳智者行天下科技有限公司 一种基于Android系统两路独立音源输出的方法
CN111930340A (zh) * 2020-09-21 2020-11-13 北京技德系统技术有限公司 一种基于Linux与Android兼容技术的虚拟音频装置与方法
CN113282271A (zh) * 2021-07-22 2021-08-20 北京麟卓信息科技有限公司 一种Linux平台上安卓应用的音频处理方法及装置
CN113835672A (zh) * 2021-11-23 2021-12-24 北京鲸鲮信息系统技术有限公司 Linux兼容Android的音频控制方法、系统及装置
WO2023093699A1 (zh) * 2021-11-23 2023-06-01 北京字节跳动网络技术有限公司 Linux兼容Android的音频控制方法、系统及装置
CN114879930A (zh) * 2022-07-07 2022-08-09 北京麟卓信息科技有限公司 一种安卓兼容环境的音频输出优化方法
CN114968168A (zh) * 2022-08-02 2022-08-30 北京麟卓信息科技有限公司 一种安卓应用输出音量的独立控制方法

Also Published As

Publication number Publication date
CN116860201A (zh) 2023-10-10

Similar Documents

Publication Publication Date Title
CN116860201B (zh) Linux系统中安卓应用的音量独立调节控制方法及装置
CN110427248B (zh) 一种基于容器的轻量级用户环境构建方法、系统及介质
CN111625214B (zh) 音频控制方法、装置、设备及存储介质
ES2798184T3 (es) Procedimiento, sistema y fragmento de código ejecutable para la virtualización de un recurso de soporte físico asociado a un sistema informático
US20180336079A1 (en) Managing inter-process communications in a containerized application environment
KR101751936B1 (ko) 호스트 기반 단말 가상화 환경에서 공유 메모리를 이용한 입출력 디바이스 가상화 장치 및 방법
CN111061540B (zh) 一种基于容器技术的应用虚拟化方法及系统
US8453136B1 (en) Change tracking and incremental synchronization of EDA design and technology data
JP2003114806A (ja) Os更新方法及びセキュリティ制御方法並びにその実施装置
KR20140065837A (ko) 소프트웨어 가상화를 이용하여 소프트웨어 서비스를 제공하기 위한 장치, 시스템 및 그 방법
WO2021135537A1 (zh) 一种直播内容引入方法、装置、存储介质及设备
TW201434300A (zh) 跨越叢集邊界的服務遷移
WO2017167126A1 (zh) 一种窗口显示方法、信息交互方法及系统
CA2798138A1 (en) Sharing and synchronization of objects
CN104050216A (zh) 用于定制化资源分配的文件系统管理器
JP2013247591A (ja) 上映管理装置および上映管理方法
CN102768846B (zh) 一种音频播放方法、装置及终端
US20230336624A1 (en) Persistent storage overlay
CN103294444A (zh) 计算机共享平台中音频数据的提供方法及装置
CN113282271A (zh) 一种Linux平台上安卓应用的音频处理方法及装置
CN102056022B (zh) 一种操作系统在机顶盒中的应用方法、装置及机顶盒
CN104717249B (zh) 远程操作应用发布的方法、代理服务器和系统
Song Seamless mobility in ubiquitous computing environments
CN116627577A (zh) 一种第三方应用界面显示方法
JP2005293417A (ja) コンピュータ機器、コンピュータネットワークシステム、プログラム転送方法およびプログラム転送用プログラム

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant