android音量调整流程+HDMI音量控制修改

android音量调整流程+HDMI音量控制修改
android音量调整流程+HDMI音量控制修改

当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volum e +/- 则直接由AudioManage r.jav a处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUS T_LOWER(- 键)、ADJUS T_RAISE(+ 键)、ADJUS T_SAM E(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。

adjustSuggestedStreamVolume方法内直接通过IAudioService获取framework层的AudioServic e服务,AudioServic e针对强制使用某种音频,通过AudioSystem的JNI从HAL 层获取状态,并进行切换,再执行adjustMasterVolum e / adjustSuggestedStreamVolume 方法,方法内部处理了STREA M_REMOT E_MUSIC和非REMOT E_MUSIC的音量调整,STREA M_REMOT E_MUSIC是在当后台播放音乐时,不在前台运行的情况。adjustSuggestedStreamVolume先对当前strea m获取在执行的streamtyp e类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtyp e,得到streamtyp e后如果是STREA M_REMOT E_MUSIC,将清楚flags中的标志FLA G_PLA Y_SOUND、FLA G_FIXED_VOLUM E 等。

STREA M_REMOT E_MUSIC类型继续执行adjustRemoteVolum e,否则执行adjustStreamVolum e,这里主要进入adjustStreamVolum e方法。在adjustStreamVolum e方法内检查SafeMedaiVolume在插耳机情况下需提示,如果streamtypealias为STREA M_MUSIC,且设备类型包括DEVIC E_OUT_AUX_DIGITAL,将添加flags标志位:flags |= AudioManage r.FLA G_FIXED_VOLUM E

固定不能调节音量的设备包括:

final int mFixedVolumeDevices =

AudioSystem.DEVIC E_OUT_AUX_DIGITAL |

AudioSystem.DEVIC E_OUT_DGT L_DOC K_HEADSET |

AudioSystem.DEVIC E_OUT_ANL G_DOC K_HEADSET |

AudioSystem.DEVIC E_OUT_ALL_USB;

DEVIC E_OUT_AUX_DIGITAL是针对HDM I类型。

最后,sendVolumeUpdat e直接调用mVolumePane l.postVolumeChanged(streamTyp e, flags) 设定并显示进度条,VolumePanel内部会根据flags标志是否包含FLA G_FIXED_VOLUM E,设定进度条s c.seekbarView.setEnable d(false /tru e),VolumePanel 内会有个dialo g显示。至此,上层的调用过程结束。

在HAL策略上只需修改一处,AudioPolicyManager的computeVolume方法,修改如下:修改前:

i f (strea m == AudioSystem::MUSIC &&

index != mStream s[strea m].mIndexMin &&

(devic e ==AUDIO_DEVIC E_OUT_AUX_DIGITAL ||

devic e == AUDIO_DEVIC E_OUT_DGT L_DOC K_HEADSET ||

devic e == AUDIO_DEVIC E_OUT_USB_ACCESSORY ||

devic e == AUDIO_DEVIC E_OUT_USB_DEVIC E)) {

retur n 1.0;

}

修改后:

i f (strea m == AudioSystem::MUSIC &&

index != mStream s[strea m].mIndexMin &&

(//devic e ==AUDIO_DEVIC E_OUT_AUX_DIGITAL ||

devic e == AUDIO_DEVIC E_OUT_DGT L_DOC K_HEADSET ||

devic e == AUDIO_DEVIC E_OUT_USB_ACCESSORY ||

devic e == AUDIO_DEVIC E_OUT_USB_DEVIC E)) {

retur n 1.0;

}

具体流程如何走到这里。

对输出策略的管理上,在插HDM I时于桌面调整音量,默认不使用HDM I输出,因为在输出设备判断上有操作:

i f ((devic e2 == AUDIO_DEVIC E_NON E) && (strateg y !=STRATEG Y_SONIFICATIO N))

{// n o sonificatio n o n aux digital(e.g. HDM I)

devic e2 = mAvailableOutputDevices &AUDIO_DEVIC E_OUT_AUX_DIGITAL;

}

STRATEG Y_SONIFICATIO N为在桌面时调整的声音所使用的类型,每当调整音量时,通过ToneGenerator初始化构造对应音频流的ToneGenerator桂香,借助AudioFlinge r建立AudioTrac k实例,在AudioFlinge r内部会对音频流类型设置AudioTrac k的参数。建立AudioTrac k后设置优先级为1并调度运行该线程(叫线程是因为AudioTrac k继承threa d 本分,可查看类继承)。一旦调度startTone时,AudioTrac k start,经过AudioFlinge r start 进行数据处理,最后通过AudioService调用AudioPolicyManager,从startoutput--> getNewDevic e -->setOutputDevice-->setOutputDevice-->checkAndSetVolume--> getNewDevic e --> getNewDevic e 等,具体可查看log:

ToneGenerator: ToneGenerator constructor: streamTyp e=2, volum e=0.011220

AudioTrac k:audiotrac k0x58b a9540 set Typ e 2, rat e 0, fmt 1, chn 1, fcn t 0, fla g 4 AudioFlinge r: createTrack() sessionId: 0

AudioFlinge r: createTrack() lSessionI d: 26

AudioFlinge r:AUDIO_OUTPU T_FLA G_FAS T denie d:isTimed=0sharedBuffe r=0x0 frameCoun t=0mFrameCount=2048forma t=1isLinea r=1channelMask=0x1sampleRat e=44100 mSampleRate=44100 hasFastMixe r=0 tid=2176 fastTrackAvailMas k=0xfe

dalvikv m: threadi d=81: inter p stack a t 0x566c5000

AudioTrac k: sched_setschedule r t o r t, priorit y: 1

AudioFlinge r: Track constructor nam e 4099, calling pid 519

AudioFlinge r: acquiring 26 fro m 519

AudioFlinge r: added new entry for 26

ToneGenerator: startTone

AudioTrac k: start0x58b a9540

AudioFlinge r: start(4099), calling pid 519 session 26

AudioFlinge r: ? => ACTIV E (4099) o n threa d 0x417afb70

AudioPolicyManager: startOutput() outpu t 2, strea m 2, session 26 AudioPolicyManager:getNewDevic e()STRATEG Y_SONIFICATIO N selecte d devic e 2outpu t= 2

AudioPolicyManager: getNewDevic e() selecte d devic e 2 outpu t= 2 AudioPolicyManager: setOutputDevice() outpu t 2 devic e 0002 delayMs 0 AudioPolicyManager: checkDeviceMuteStrategies outputDes c = 0x41630950 prevDevic e = 2 delayMs = 0

AudioPolicyManager: setOutputDevice() setting sam e devic e 0002 o r nul l devic e for outpu t 2

AudioPolicyManager: checkAndSetVolume strea m = 2 index = 7 outpu t = 2 devic e = 0x2 delayMs = 0 force = 0

AudioPolicyManager:getNewDevic e()STRATEG Y_SONIFICATIO N selecte d devic e 2outpu t= 2

AudioPolicyManager: getNewDevic e() selecte d devic e 2 outpu t= 2

AudioFlinge r: mWaitWorkCV.broadcast

AudioFlinge r: threa d 0x4179f050 typ e 0 TID 447 wakin g u p

这里会在getNewDevice时获取输出设备,会进入策略方法进行判断,需要去掉STRATEG Y_SONIFICATIO N部分限制,如下:

i f ((devic e2 == AUDIO_DEVIC E_NON E))// && (strateg y !=STRATEG Y_SONIFICATIO N))

{// n o sonificatio n o n aux digital(e.g. HDM I)

devic e2 = mAvailableOutputDevices &AUDIO_DEVIC E_OUT_AUX_DIGITAL;

}

以上从策略层进行修改,另一种方法是从framework进行修改,从V olumePanle中修改StreamResources中的值:

V oiceStream(AudioManager.STREAM_VOICE_CALL,

R.string.volume_icon_description_incall,

R.drawable.ic_audio_phone,

R.drawable.ic_audio_phone,

false)

为,

V oiceStream(AudioManager.STREAM_MEDIA,

R.string.volume_icon_description_incall,

R.drawable.ic_audio_phone,

R.drawable.ic_audio_phone,

false)

但第二种修改不适合带modem功能的设备,第二种修改也就是直接将通话改为多媒体类型。

语音芯片音量控制方法及各行业语音芯片选型方法 很多语音芯片有带音量控制,有些则不带音量控制。语音芯片的音量控制一般分为两种,一种是硬件音量控制,另外一种是软件音量控制。 一、硬件音量控制:语音芯片的音量控制一般分为8级音量控制和16级音量控制。但是语音芯片一般有两种音频输出方式,一种是PWM音频输出,一种是DAC音频输出,哪语音芯片的硬件音量控制是怎么控制两种音频输出的音量的呢?一般是采用调整电流的方式来控制音量的输出。控制PWM电流就可以控制输出到喇叭上的电流强度,从而控制喇叭振幅的大小,从而控制我们人感知的音量大小。DAC音频输出方式,同样也是控制电流形式,因为语音芯片大多数一般都是电流型DAC只要控制DAC的电流就可以控制外部三极管的基极电流,从而控制喇叭上的电流强度达到音量调节的目的。 二、软件音量控制:由于软件调节音量不能直接控制PWM和DAC上的电流,所以软件音量控制一般是直接调整输送到音频合成器的数值,达到音量控制的目的。所以只要通过一定的数学运算,就可以对输送到音频合成器的数值进行调制。理论上软件音量控制可以任意级数。但是由于受到CPU运算能力的影响和实际应用的需求一般也是做16级音量控制。如果运算能力有限也可以做2级或者4级音量控制。 各行业语音芯片如何选型? 目前各行用的最多的是8脚语音芯片,因为电路体积小、应用方便,而且价格比较低,一般为OTP类型的较为多,各行业均会优先考虑该类型。8脚语音芯片主要是指软封装为八个引脚,硬封装为DIP8或者SOP8的语音芯片,常见的八脚语音芯片有WTH040系列、WTH080系列、WTN3系列、WTN4系列、WTN5系列、WTH040系列、WTH080系列……,不同的芯片行业领域应用可选择不同的型号。一般的语音集成电路的封装形式大部分是双列直插式塑料封装集成电路(DIP),俗称硬封装电路,按引脚数分为8脚、14脚、16脚等,每个引脚的功能是不同的。通常引脚多,集成电路芯片的体积越大,电路功能强,价格较八脚的高,八脚语音芯片也是小体积语音IC,空间占用小。 常用的8脚语音ic用途很多,目前很多行业青睐8脚语音芯片,行业常用的语音芯片有哪些呢?分别用在什么用途,语音芯片的选型,除了考虑管脚外,也要考虑价格、语音长度等,以下为您详解WTN3。 WTN3语音芯片在芯片应用范围上,几乎可以涉及到所有需要低成本,但不更改语音的

Android 小项目之--使用【AudioManager】类控制音量 一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。 本篇基于 Android API 中的 AudioManager 作讲述,使看过本篇的读者可以迅速的掌握这个类的实现过程。下面是本篇大纲: ?1、认识 AudioManager ?2、AudioManager 主要方法介绍 ?3、程序逻辑实现过程 1、认识 AudioManager AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作。2、AudioManager 主要方法介绍 邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:?方法:adjustVolume(int direction, int flags) 解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。 ?方法:getMode() 解释:返回当前音频模式。 ?方法:getRingerMode() 解释:返回当前的铃声模式。 ?方法:getStreamVolume(int streamType) 解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。 ?方法:setRingerMode(int ringerMode) 解释:改变铃声模式 3、程序逻辑实现过程 界面上设置了一个图片,表示当前铃声状态,一个进度条表示当前音量大小,五个图片按钮,用来表示增加/减小音量、普通模式、静音模式和震动模式。下面是界面的 XML 布局代码:

Android声音管理AudioManager使用 手机都有声音模式,声音、静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能。在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。 以下分别是AudioManager设置声音模式和调整声音大小的方法。 如何获取声音管理器: AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE); 里面主要的方法: A、设置声音模式 //声音模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); //静音模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

//震动模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); B、调整声音大小 //减少声音音量 AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0); //调大声音音量 AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0); getMode()获取音频模式 getRingerMode()获取铃声震动模式 ---------------------------------------------------------------- 这里如果使用了和手机震动有关的模式,记得添加权限。 android.permission.VIBRATE哦! 参考:https://www.360docs.net/doc/e418146414.html,/blog/1125304

8-CHANNEL ELECTRONIC VOLUME WITH INPUT SELECTOR The NJW1298 is a 8-channel electronic volume with Input Selector. It includes 13-in 4-out stereo audio selector , REC Output and Multi-channel inputs. The NJW1298performs low noise and low distortion characteristics with resistance ladder circuit. All of functions are controlled via three-wired serial bus. Selectable 2-Chip address is available for using two chips on same serial bus line. The NJW1298 is suitable for multi-channel audio system, such as AV amplifier, DVD receiver, and others. Operating Voltage ±4.5 to ±7.5V 3-Wired Serial Control Chip Address Select Function 13-input 4-output stereo selector Multi-Channel input (8ch x 2) Input Selector Gain Control Gain : 0 to -21dB / 3dB step Volume +31.5 to –95dB / 0.5dB step, Mute SWch, Cch, LS/RSch output addition to L/R ch output LB/RBch output addition to LS/RS ch output Zero Cross Detection Bi-CMOS T echnology Package Outline QFP100-U1 NJW1298FU1 E C A E C C R E C A R E C C E C B R E C B

嵌入式系统综合设计说明书 题 目:基于Android 的音乐播放器设计与实现 姓 名: 学 院:信息工程学院 班 级: 指导教师: 2012 年9 月24 日

摘要 Android是一种以Linux为基础的开放源代码操作系统,本文就android平台下设计和实现音乐播放器,利用java语言和Eclipse编程工具实现。通过设计能够实现音乐的播放、暂停、上一曲、下一曲、音乐列表、声音控制、帮助菜单等功能,通过对基于android平台下的播放器的设计,了解音乐播放器的设计的原理和实现的相关技术,掌握了android编程思想以及基本的应用组件,对以后从事android开发有很大的帮助。 关键词:android;音乐播放器;嵌入式;java

Abstract Android is a Linux-based open-source operating system, this article on the android platform design and realization of the music player, the use of the Java language and the Eclipse programming tools. Can be achieved through the design of the music playback, pause, previous song, next song, music list, sound control, the Help menu and other functions through the principle player in android platform-based design, and to understand the design of the music player realization of the related technology, to master the android programming ideas, as well as basic application components, great help later in the android development. Keywords: android; music player; embedded; java

音量控制器配置方案 1.音量控制器:控制该区域的广播放音时的声压,一般通过电阻或变压器分压式来实现;一般音量控制器有三种。 一、背景音乐音量控制器,它是二线制的,不需要消防广播的地方使用; 二、带消防广播强切的音量控制器(而这种带强切的音量控制器按它的强切方式分三线制与四线制);何为强切,当区域使用都将此音量控制器的音量调节到很少,甚至在关闭,当有紧急通知或消防时,控制机房通过发出一个紧急控制信号送到音量控制器上,强迫音量控制器进入广播,不受音量控制器的状态影响,进入广播状态。 三、选台音量控制器,顾名思义该音量控制器在可以控制音量的同时也可以选择不同的音乐,它也分消防与不需要消防强切二种,而这种选台音量控制器只能使用四线制方式进行强切。 1)、二线制音量控制器:不需要消防广播的区域则可以使用二线制音量控制器。机房到音量控制器是二芯广播线,音量控制器到喇叭也是二芯广播线,连接示意图如下: 2)、三线制强切音量控制器:需要消防广播的区域则可以使用三线制音量控制器。机房到音量控制器是三芯广播线(一根是公共线COM,一根是背景广播信号线N,一根是紧急广播信号线R),音量控制器到喇叭也是二芯广播线,中讯的PA系列功放与PA-B系列

功放可以直接三线输出,而中讯智能分区矩阵器PAS-316也是三线输出的,连接示意图如下:(注,三线制强切音量控制器比四线制的音量控制器稳定性要好。且布线也少) 3)、四线制强切音量控制器:需要消防广播的区域则可以使用四线制音量控制器。机房到音量控制器是二芯广播线(一根是公共线COM,一根是背景广播信号线)和二芯控制信号线(紧急控制信号24V),音量控制器到喇叭也是二芯广播线,中讯的PA系列功放可以直接四线输出,连接示意图如下:

在听筒模式下 am.setSpeakerphoneOn(false); setV olumeControlStream(AudioManager.STREAM_VOICE_CALL); am.setMode(AudioManager.MODE_IN_CALL); 我用Mediaplayer AudioTrack调节音量总是失败 at.setStereoV olume(vol, vol); player.setV olume(vol,vol); 后来决定用AudioManager来调节音量 AudioManager可以修改系统Android系统的音量 下面介绍几个AudioManager的几个音量调整方面的方法. 首先是得到AudioManager实例: AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 调整音量方法有两种,一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值. 1、渐进式 public void adjustStreamV olume (int streamType, int direction, int flags) am.adjustStreamV olume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 解释一下三个参数 第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是: STREAM_ALARM 警报 STREAM_MUSIC 音乐回放即媒体音量 STREAM_NOTIFICA TION 窗口顶部状态栏Notification, STREAM_RING 铃声 STREAM_SYSTEM 系统 STREAM_VOICE_CALL 通话 STREAM_DTMF 双音多频,不是很明白什么东西 第二个direction,是调整的方向,增加或减少,可以是: ADJUST_LOWER 降低音量 ADJUST_RAISE 升高音量 ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量 第三个flags是一些附加参数,只介绍两个常用的 FLAG_PLAY_SOUND 调整音量时播放声音 FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个 2、直接设置音量值的方法: public void setStreamV olume (int streamType, int index, int flags) am.setStreamV olume(AudioManager.STREAM_MUSIC, am.getStreamMaxV olume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);

滨江学院《移动通信程序设计》 课程设计 题目基于Android系统的音乐播放器 院系滨江学院 专业计算机科学与技术 学生姓名王兵 学号 二O一四年六月十日

摘要 随着生活水平的提高,娱乐已成为非常主流的话题,人们不仅需要通过音乐陶冶情操,而且越来越多的人倾向于使用音乐、视频等娱乐和放松自己,这大大促进了媒体软件的发展.本文旨在介绍研究常用数字音频编码和解码的相关知识,并结合VS2008编写多功能音乐播放器,了解音乐播放器功能的实现,掌握开发音乐播放器所需的相关知识,采用了面向对象软件工程方法,其开发主要包括应用程序界面设计和后台代码运行两个方面,实现了多功能音乐播放器在计算机上的应用,可以在很大程度上满足用户的需求.该系统主要具备:音乐播放控制、音乐文件控制、音量控制、下载控制、歌词控制、进度控制、音乐剪辑等功能模块。 关键字:音乐播放器,音频编码格式,TechSmith Screen Capture Codec,FFmpeg ,C#,Visual Studio 2008 目录 1 前言........................................................... 选题的背景及意义................................................ 网络流行音乐播放器简介.......................................... 2系统相关技术及开发平台介绍 ..................................... 开发应用技术介绍................................................ 开发及运行坏境.................................................. 3 系统的分析..................................................... 可行性分析...................................................... 常见的几种音频格式及其特点...................................... 需求分析........................................................ 4系统设计....................................................... 系统概要设计.................................................... 系统功能设计及描述.............................................. 5系统功能实现................................................... 歌曲添加模块.................................................... 歌曲列表模块.................................................... 播放控制模块....................................................

1.在vc++ 6.0新建VolumeCtrl类 2.VolumeCtrl.h文件 // VolumeCtrl.h: interface for the CVolumeCtrl class. // ////////////////////////////////////////////////////////////////////// #include "windows.h" #include #if !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INC LUDED_) #define AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 classCVolumeCtrl { public: CVolumeCtrl(CWnd *pParent); virtual ~CVolumeCtrl(); public: BOOL GetVolume(DWORD &dwVol);//获取音量 BOOL SetVoleme(DWORD dwVol);//设置音量 BOOL amdGetVolumeControl();//得到音量控制设备句柄 BOOL amdInitialize();//初始化 BOOL amdUnInitialize(); private: CWnd * m_hParent; //父窗口指针 UINT m_nNumMixers; //混音设备个数 HMIXER m_hMixer; //混音设备句柄 MIXERCAPS m_mxcaps; CString m_strDsLineName,m_strVolumeControlName; DWORD m_dwMinimum,m_dwMaximum; DWORD m_dwVolumeControlID; //音量控制器ID }; #endif // !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDE D_) 3.VolumeCtrl.cpp文件

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 修改安卓系统默认音量 篇一:安卓系统开关机声音及动画设置 安卓手机开机关机动画与声音的修改 可以进入手机的声音文件夹/system/media/audio操作。可以加入mp3铃声,也可以移除里面的声音文件,以节省空间。 /media /audio /alarms 闹钟 /media /audio /notificati** 短信 /media /audio/ ringtones??来电 /media /audio/ ui??系统提示音 也可以更换或删除/system/media下的开关机动画、音乐。 bootanimation.zip??开机动画 Bootsound.mp3? ?? ?开机音乐 shutanimation.zip??关机动画 Shutsound.mp3? ?? ?关机音乐 篇二:三星安卓智能手机声音(音量)修改代码详解 打开拔号键盘输入 *#*#197328640#*#* 进入工程模式 [1] Debug Screen [2] Version Information [3] UMTS RF NV [4] GSM RF NV

[5] Audio [6] COMMON [7] QXDM LOGGING 选 5 1] HANDSET [1]HANDSET听筒 [2] HEADSET [2]HEADSET(耳机) [3] SPEAKER[3]SPEAKER(扬声器) [4] BT HEADSET[4]BT HEADSET:蓝芽耳机 [5] 3POLE HS[5]3POLE HS (不知道) [6] REBUILD ALL [6]REBUILD ALL:所有重建 [7]BTNSECOFF [7]BTNSECOFF不知道) [8] MAX8899 AMP [8]MAX8899 AMP/max8899放大器选 1 [1] TX value [2] RX value [3] NS mode l[4] EC mode [5] Diamond Solution [6] REBUILD Handset value [7] ASR/Not ASR Mode ** Handset Rx Vol 聽筒接收音量 选 2 [1] Rx Codec/Volume [2] RX AGC

本技术提供了一种智能播放方法,包括:对电视机的工作环境的音量进行检测,获取所述电视机的工作环境音量;根据所述工作环境音量,获取与所述工作环境音量对应的电视机播放音量;根据所述电视机播放音量对所述电视机的工作模式进行设置,以使所述电视机按照所述电视机播放音量进行播放。使用本技术,可以根据电视机的工作环境自适应地进行节目的播放,既减少了用户的手动操作,也能够更合理地利用电力资源。 技术要求 1.一种智能播放方法,其特征在于,包括: 对电视机的工作环境的音量进行检测,获取所述电视机的工作环境音量; 根据所述工作环境音量,获取与所述工作环境音量对应的电视机播放音量; 根据所述电视机播放音量对所述电视机的工作模式进行设置,以使所述电视机按照所述 电视机播放音量进行播放。 2.如权利要求1所述的方法,其特征在于,所述对对电视机的工作环境的音量进行检测,获取所述电视机的工作环境音量包括: 使用噪声传感器获取所述电视机的工作环境音量。

3.如权利要求1所述的方法,其特征在于,所述对对电视机的工作环境的音量进行检测,获取所述电视机的工作环境音量包括: 使用麦克风采集环境中的各种声音; 将所述麦克风采集的声音进行模数转换,获取电声音信号; 检测所述电声音信号的能量大小,通过所述能量大小来确定所述电视机的工作环境音量。 4.如权利要求3所述的方法,其特征在于,所述检测所述电声音信号的能量大小,通过所述能量大小来确定所述电视机的工作环境音量包括: 建立与云端服务器的通讯连接; 通过所述通讯连接将所述电声音信号发送给所述云端服务器,以使所述云端服务器检测所述电声音信号的能量大小并确定所述电视机的工作环境音量; 接收所述云端服务器发送的所述电视机的工作环境音量。 5.如权利要求1至4任一所述的方法,其特征在于,所述根据所述工作环境音量,获取与所述工作环境音量对应的电视机播放音量包括: 从本地存储的工作环境音量与电视机播放音量的对应表中查找所述工作环境的工作环境音量对应的电视机播放音量;或者 通过与云端服务器交互获得所述工作环境的工作环境音量对应的电视机播放音量;或者 从本地存储的工作环境音量与电视机播放音量的对应表中查找所述工作环境音量对应的电视机播放音量;若从所述对应表中没有查找到与所述工作环境音量对应的电视机播放音量,通过与云端服务器交互获得所述工作环境音量对应的电视机播放音量。 6.一种电视机,其特征在于,包括: 检测单元,用于对电视机的工作环境的音量进行检测,获取所述电视机的工作环境音量;

当按键按下时,底层上报事件给KeyguardUpdateMonitor,窗口管理器WindowManager,从KeyguardUpdateMonitor获取具体按键信息,如果是Volum e +/- 则直接由AudioManage r.jav a处理,调用方法adjustSuggestedStreamVolume,其参数direction包括ADJUS T_LOWER(- 键)、ADJUS T_RAISE(+ 键)、ADJUS T_SAM E(不调整),suggestedStreamType为音频流类型,flags为特殊标志位,下面会讲到。 adjustSuggestedStreamVolume方法内直接通过IAudioService获取framework层的AudioServic e服务,AudioServic e针对强制使用某种音频,通过AudioSystem的JNI从HAL 层获取状态,并进行切换,再执行adjustMasterVolum e / adjustSuggestedStreamVolume 方法,方法内部处理了STREA M_REMOT E_MUSIC和非REMOT E_MUSIC的音量调整,STREA M_REMOT E_MUSIC是在当后台播放音乐时,不在前台运行的情况。adjustSuggestedStreamVolume先对当前strea m获取在执行的streamtyp e类型,包括通话状态收音机播放,音乐播放等,此处需要hal层获取streamtyp e,得到streamtyp e后如果是STREA M_REMOT E_MUSIC,将清楚flags中的标志FLA G_PLA Y_SOUND、FLA G_FIXED_VOLUM E 等。 STREA M_REMOT E_MUSIC类型继续执行adjustRemoteVolum e,否则执行adjustStreamVolum e,这里主要进入adjustStreamVolum e方法。在adjustStreamVolum e方法内检查SafeMedaiVolume在插耳机情况下需提示,如果streamtypealias为STREA M_MUSIC,且设备类型包括DEVIC E_OUT_AUX_DIGITAL,将添加flags标志位:flags |= AudioManage r.FLA G_FIXED_VOLUM E 固定不能调节音量的设备包括: final int mFixedVolumeDevices = AudioSystem.DEVIC E_OUT_AUX_DIGITAL | AudioSystem.DEVIC E_OUT_DGT L_DOC K_HEADSET | AudioSystem.DEVIC E_OUT_ANL G_DOC K_HEADSET | AudioSystem.DEVIC E_OUT_ALL_USB; DEVIC E_OUT_AUX_DIGITAL是针对HDM I类型。 最后,sendVolumeUpdat e直接调用mVolumePane l.postVolumeChanged(streamTyp e, flags) 设定并显示进度条,VolumePanel内部会根据flags标志是否包含FLA G_FIXED_VOLUM E,设定进度条s c.seekbarView.setEnable d(false /tru e),VolumePanel 内会有个dialo g显示。至此,上层的调用过程结束。 在HAL策略上只需修改一处,AudioPolicyManager的computeVolume方法,修改如下:修改前: i f (strea m == AudioSystem::MUSIC && index != mStream s[strea m].mIndexMin && (devic e ==AUDIO_DEVIC E_OUT_AUX_DIGITAL || devic e == AUDIO_DEVIC E_OUT_DGT L_DOC K_HEADSET || devic e == AUDIO_DEVIC E_OUT_USB_ACCESSORY || devic e == AUDIO_DEVIC E_OUT_USB_DEVIC E)) { retur n 1.0; }

相关文档
最新文档