手机铃声介绍
转载自: 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);
}