android 情景模式来电铃声分析(一)
手机铃声介绍
转载自: http://blog.csdn.net/feosun/article/details/5655929
手机铃声主要包括来电、短信,开关机,以及拍照等情况下播放的音频。其中又以情景模式中包含的铃声占大多数。
1、情景模式中的铃声
情景模式中包含的铃声有来电、来短信、闹钟、开关机、按键几类。手机系统中内置默认约有25~35首铃声,供上述几类使用。
其中铃声10首,用作来电、闹钟铃声;
和弦铃声5~15首,用作来电、闹钟铃声;
音调10首,用作开关机,短信,以及翻盖、滑盖机的开合盖铃声。
情景模式中的铃声,都以音频数据数组的形式存在于代码文件Resource_audio.c和Custpack_audio.c中。
具体对应关系为:
Resource_audio.c中
cs01_mid[]~cs10_mid[]:对应了上文中提到的十首铃声(铃声1~铃声10)。(mid为该音频数据的格式,部分项目中可能为mp3等其他格式)
s1imy01_imy[]~s1imy10_imy[]:对应了上文中的10首音调(音调1~音调10)。
该文件中定义的其他铃声,还包括有dtmf音,拨号、通话提示音,EMS、MMS铃声。还有真人发声的按键音等我们项目中很少用的音频文件。
Custpack_audio.c中
Aclassical04_mid[],Aclassical09_mid[]……全部铃声对应了情景模式中的和弦铃声。
对于铃声的修改,很大一部分即是针对上述两文件中的修改。
下面介绍几个常见的铃声修改例子:
(1) 替换铃声
例如需要替换SIM卡1来电铃声。首先我们需要找到替换的目标,
例如SIM卡1来电铃声对应的是和弦铃声1,即代码文件Custpack_audio.c中的Aclassical04_mid[]。
其次,我们要将用来替换的铃声转换为音频数据。用来替换的铃声多半是mp3或者midi文件,我们一般用工具AudioConverter.exe来转换。
具体使用方法为命令行输入如下命令:AudioConverter.exe xxx.mp3 > xxx.txt(xxx.mp3为需要转换的音频文件,xxx.txt为转换成的音频数据存放的文件)。将生成的音频数据替换Aclassical04_mid[]中原有的数据即可。
如果新替换的铃声是mp3的,不同于原始的midi格式,一般将数组名Aclassical04_mid[]改为Aclassical04_mp3[]。同时修改custpack_audio,如下。其中15为和弦铃声的个数。Aclassical04_mp3为音频数据数组名字,注意与上面保持一致。5代表的是格式mp3。(常用的格式为:5—mp3,17—mid, 18—imy, 13—wav, 3—amr)
constcustpack_audio_header custpack_audio=
{
15,
{{ Aclassical04_mp3, sizeof(Aclassical04_mp3), 5},
……
}
};
(2) 修改铃声
例如默认SIM卡1、SIM卡2来电铃声都为和弦铃声1。现在需要将SIM卡2来电铃声改为和弦铃声2。
情景模式中的来电等铃声与系统内置的和弦铃声等铃声对应关系由情景模式的NV项NVRAM_PROFILES_DEFAULT里设置的。
NVRAM_PROFILES_DEFAULT中定义了7种情景模式的设置参数:标准模式、会议模式、户外模式、室内模式、耳机模式、超长待机模式(静音模式)、蓝牙模式。
要知道如何修改问题,需把改数据结构了解清楚。
例如SIM卡1、SIM卡2来电铃声即是结构体TONE_SETUP中的ringtone和card2_ringtone。上面提到的问题,修改这两个参数即可。
static PROFILE const NVRAM_PROFILES_DEFAULT[MAX_ELEMENTS] =
{
{
LEVEL7,LEVEL2, LEVEL7, MMI_RING,
{COLOR_PATTERN1,1, 15}, REPEAT,
{151,152,202, 201, 203, 204, 225,KEYPAD_TONE,153,151,225},
{1, 0, 1}, THEME_DEFAULT, {0}, {1, 0, 1, 1}
},
……
}
如上,红色字体即是SIM1来电铃声、SIM2来电铃声的索引号,它指向了上文中提到的Custpack_audio.c中的Aclassic04_mid[]、Aclassic09_mid[]。
那索引号151与音频数组Aclassic04_mid[]是如何联系起来的?
2、情景模式外部分铃声
手机中有部分铃声,是在情景模式之外的。例如camera拍照的声音。拍照声音的在代码中的存在形式仍是音频数据数组,定义与Resource_camera_skins.c中,分别为camera_sound_shutter_1[ ],camera_sound_shutter_2[ ],camera_sound_shutter_3[ ]。修改这三个对应的数组即可完成对拍照声音的修改。
其他类似于拍照这样的声音,通过跟踪代码我们都可以找到他们定义位置。
斯凯特效声音、以及G-sensor换壁纸的声音,不同于上面的介绍。这些铃声以类似于图片资源的形式,在编译资源的时候生成。
具体添加方式为:
1、 定义一audio ID。 例如GlobalDefs.h中ADO_GLOBAL_LIST枚举中添加ID:ADO_TEST_ID。
2、在Res_XXX.h中加载铃声资源。 ADD_APPLICATION_AUDIO3(ADO_TEST_ID,
"....CustomerAudioshift.mp3","....CustomerAudioshift.mp3");
3、 完成上述,即可在代码中使用该audio ID播放加载的shift.mp3。对audio ID的常用方法为:
void mmi_test_audio_play(int id)
{
U8 *data;
U8 format;
U32 filelen;
data =get_audio(id, &format, &filelen);
if(data) mdi_audio_play_string_with_vol_path_non_block((void*)data,(U32)filelen,
format,DEVICE_AUDIO_PLAY_ONCE,NULL,NULL,4,MDI_DEVICE_SPEAKER_BOTH);
}
android 情景模式来电铃声分析(一)相关推荐
- Android代码[获取情景模式和铃声,实现震动/铃声提醒]
获取情景模式和铃声,实现震动/铃声提醒 本文摘录于:https://blog.csdn.net/lantingshuxu/article/details/53327716只是做学习备份之用,绝无抄袭之 ...
- android 情景模式设置
大家仔细看下面我这个方法,它是用来设置这些情景模式的. 但是系统返回的状态只有三个,分别为: 1.public static final int RINGER_MODE_SILENT = 0;//静音 ...
- 浅析Android情景模式流程
此篇是基于MTK平台Android6.0的.情景模式分析,情景模式就是通常手机里面的"标准""静音""会议""户外"这几 ...
- Android 情景模式的设置
情景模式的设置大家应当相当熟悉了,但是在Android中如何通过自己的程序进行情景模式的设置呢,情景模式分为多种,即可以使用系统自带的,也可以使用自定义的,但是在开发某些程序时,可能需要在程序中更改情 ...
- android 情景模式之响铃+震动获取方法
最近在写一个需求中,遇到了一个坑的地方,需要判断当前手机的情景模式,我们都知道常见的情景模式共有四种:静音,震动.响铃.响铃+震动. 但坑爹的系统方法中,只有三种返回,相关代码如下: int ring ...
- Android 情景模式的切换
Android中系统的声音以及振动是通过AudioManager来管理的.切换情景模式只需要两句代码: AudioManager am=(AudioManager)getSystemService(C ...
- ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 来电铃声的设置.手机闹钟.手势识别来电铃声的设置 MediaStore简介 Media ...
- 我的Android进阶之旅------Android系统设置默认来电铃声、闹钟铃声、通知铃声
首先了解Android系统本身提供的默认铃声文件,这些文件都放在 /system/media/audio 目录下. /system/media/audio/ringtones 系统来电铃声 / ...
- android doze模式源码分析,Android Doze模式启用和恢复详解
从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...
- Android Doze模式源码分析
科技的仿生学无处不在,给予我们启发.为了延长电池是使用寿命,google从蛇的冬眠中得到体会,那就是在某种情况下也让手机进入类冬眠的情况,从而引入了今天的主题,Doze模式,Doze中文是打盹儿,打盹 ...
最新文章
- python爬虫进阶案例_Python爬虫进阶必备 | MD5 hash 案例解析讲解
- JAVA中是传值还是传引用?回答KEZHANG问题
- 分分钟搭建Oracle环境
- 新年新征程——写在“微软中国研发集团”更名之际
- 重构机房VB.NET机房收费系统个人重构版你都学会了什么(之一)
- 在IIS中部署SPA应用,多么痛的领悟!
- 反引号包裹反引号_五个金色反引号
- mysql用户和权限备份_备份MySQL用户和权限
- java8收集器,Java 8中的收集器collectionAndThen()方法
- Flink:Container is running beyond virtual memory limits
- 用python生成多个txt文件
- 可视化数据展示工具ChatSQL
- python包管理多个版本,python多版本以及各种包管理
- 单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
- 深入浅出WPF(一)
- CityEngine 2014安装教程
- Linux环境安装之Ant
- 如何关闭方正软件保护卡
- linux删文件,捋一捋
- gitlab 配https_gitlab容器--带https配置