MTK的铃声修改与替换

MTK的资源一直深受研发人诟病,几乎成为初入手MTK人的挥之不去的痛楚,主要是因为缺乏相关的专业管理工具。虽然有一些公司自己开发一些图片了,字串,菜单了管理工具,但都由于各种各样的条件限制,没有流通开来。比如菜单,明明已经加好了,就是显示不出来,明明个数已经算对了,仍然显示错乱,即使是一个训练有素的老鸟,拿到一份别的公司的代码,不仔细研究一下随便添加菜单,十分八九也会出错。所幸后来MTK添加了新的菜单函数,为我们许多人节省了数菜单个数的时间。再比如图片,既有放在压缩包里的,也有放在压缩包外的,还有直接在代码里使用数组存储的,为初学者造成的困惑着实不小。

这里只是简单介绍一下MTK的铃声。有关菜单,图片,字串,NV, 字库,主题了,有时间慢慢写。

MTK支持的铃声还是比较多的,常见的MP3,WAV,MID等等都支持。同时MTK既支持数组存储的铃声,也支持资源类型的铃声。不过习惯上我们一般都使用数组类型的铃声。所谓数组类型的铃声,就是把铃声数据按字节顺序存储在数组中,标明铃声的类型和长度,供播放函数使用。MTK主要支持的文件格式可以在项目中文件med_main.h中找到,大概包括以下几种:

enum{
MDI_FORMAT_NONE=-1,
MDI_FORMAT_GSM_FR, /* 0 */
MDI_FORMAT_GSM_HR, /* 1 */
MDI_FORMAT_GSM_EFR, /* 2 */
MDI_FORMAT_AMR, /* 3 */
MDI_FORMAT_AMR_WB, /* 4 */
MDI_FORMAT_DAF, /* 5 */
MDI_FORMAT_AAC, /* 6 */
MDI_FORMAT_PCM_8K, /* 7 */
MDI_FORMAT_PCM_16K, /* 8 */
MDI_FORMAT_G711_ALAW, /* 9 */
MDI_FORMAT_G711_ULAW, /* 10 */
MDI_FORMAT_DVI_ADPCM, /* 11 */
MDI_FORMAT_VR, /* 12 */
MDI_FORMAT_WAV, /* 13 */
MDI_FORMAT_WAV_ALAW, /* 14 */
MDI_FORMAT_WAV_ULAW, /* 15 */
MDI_FORMAT_WAV_DVI_ADPCM, /* 16 */
MDI_FORMAT_SMF, /* 17 */
MDI_FORMAT_IMELODY, /* 18 */
MDI_FORMAT_SMF_SND, /* 19 */
MDI_FORMAT_MMF, /* 20 */
MDI_FORMAT_AU, /* 21 */
MDI_FORMAT_AIFF, /* 22 */
MDI_FORMAT_VRSI, /* 23 */
MDI_FORMAT_WMA, /* 24 */
MDI_FORMAT_M4A, /* 25 */
MDI_FORMAT_3GP, /* 26 */
MDI_FORMAT_MP4, /* 27 */
MDI_FORMAT_JPG, /* 28 */
MDI_FORMAT_GIF, /* 29 */
MDI_FORMAT_MJPG, /* 30 */
MDI_FORMAT_PNG, /* 31 */
MDI_NO_OF_FORMAT
};

经常用作手机铃声的格式是以下几种(每一种都有对应的数值,主要用于播放函数的参数):

#define FORMAT_IMY "18" /* sync with med_main.h */
#define FORMAT_MID "17" /* sync with med_main.h */
#define FORMAT_WAV "13" /* sync with med_main.h */
#define FORMAT_MMF "20" /* sync with med_main.h */
#define FORMAT_MP3 "5" /* sync with med_main.h */
#define FORMAT_PCM "7" /* sync with med_main.h */
#define FORMAT_DVI "11" /* sync with med_main.h */
#define FORMAT_AMR "3" /* sync with med_main.h */

获取数组铃声的方式是十分简单的。可以从别的项目拷贝,也可以使用工具软件自己生成,如果实在不行,也可以自己写个读取文件的程序一个字节一个字节读出来并写到文本文件里。这里不做详述。

MTK主要的铃声一般放在文件resource_audio.c和文件custpack_audio.c两个文件,照相机的铃声是另外在resource_camera_skins.c文件中的。

首先对resource_camera_skins.c文件里的铃声做介绍:

该文件三个数组:

camera_sound_shutter_1

camera_sound_shutter_2

camera_sound_shutter_3

分别对应照相机拍照时的三种声音,这三个声音默认是WAV格式的,也可以改为MP3格式,但对MP3似乎对MP3格式有些挑剔,有些MP3会播不出来或者变音,需要试验才知道。调用的地方在mmi_camera_entry_burstshot_capture_state函数中,如果修改了铃声的格式,一定要在调用的地方对文件类型做修改。

camera_sound_countdown

对应连拍时的声音,默认文件类型同上。

介绍一下custpack_audio.c里的铃声:

该文件里有一个名字为custpack_audio类型为custpack_audio_header的结构,该结构体的描述了铃声的个数及铃声的类型,数据,大小等信息,默认的铃声是15个,这个结构的数据主要是修改情景模式里闹铃,电话的后十五首铃声。而闹铃,电话,而通话和闹铃的前10首(默认是10首)在文件resource_audio.c里修改;

介绍一下文件resource_audio.c,该文件里数据比较多,也比较复杂,主要包含了电话,短信,闹铃,搜网,开关机,开合盖等铃声。通话的前10首铃声包含在数组mtk_resource_imelodys中(数目是MTK默认,并不总是这样,开发人员可以修改铃声个数),闹铃一般会和通话使用相同的铃声,短信铃声包含在数组mtk_resource_message_sounds,开关机包含在数组mtk_resource_sounds中,开合盖也使用mtk_resource_sounds,mtk_resource_sounds和mtk_resource_message_sounds在MTK默认的情况下调用的音源是一样的,可以根据需要添加或者改为不一样的,如果修改了音源数组的文件类型,MTK默认的情况下一定要同步修改两个地方。搜网声一般使用开合盖的第三个铃声,不带盖的大概会使用mtk_resource_sounds的第三个铃声。如果要修改某类铃声个数,一定要同步修改resource_audio.h里默认的铃声个数。

如果你想使用资源铃声,只要像添加图片一样,在Customer里创一个文件夹,放入你的铃声,然后像添加图片一样添加一个ID,并在模块对应的RES文件里绑定把ID和路径绑定。可以使用mdi_audio_play_id播放,或者使用get_audio获得数据,然后调用mdi_audio_snd_play_string_with_vol_path播放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值