当前位置: 首页 > news >正文

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播放

相关文章:

  • 基于SWOOLE的高可用分布式SOKET服务器系统搭建V2.0
  • 美化MTK的拨号窗口
  • javascript 18位身份证校验程序
  • MTK的DM应用实例
  • 优酷KUX格式转码
  • 推荐一款全面的系统性能监控工具 -- glances
  • 再转载一篇---引用 MTK的高亮机制
  • 解决加密的HLS(m3u8)视频转换问题
  • 再谈MTK的History机制
  • 在屏幕外的窗口,鼠标移动到屏幕边缘时自动把屏幕外部分拉回屏幕内怎么设置?
  • MTK的图片资源的修改与替换
  • [转]节省 3/4 的设计时间:14个设计神器
  • 转载一篇 EMI整改经验
  • Linux TIME_WAIT 太多 优化 解决
  • Sql Server 性能分析1 –查看数据库的相关信息
  • ES6指北【2】—— 箭头函数
  • 3.7、@ResponseBody 和 @RestController
  • go append函数以及写入
  • js如何打印object对象
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • 初探 Vue 生命周期和钩子函数
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 后端_MYSQL
  • 今年的LC3大会没了?
  • 力扣(LeetCode)21
  • 力扣(LeetCode)22
  • 前端工程化(Gulp、Webpack)-webpack
  • 用mpvue开发微信小程序
  • 如何正确理解,内页权重高于首页?
  • # 透过事物看本质的能力怎么培养?
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #知识分享#笔记#学习方法
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二十四)Flask之flask-session组件
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)负载均衡,回话保持,cookie
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 依赖注入的基本用发
  • .net反编译的九款神器
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net中调用windows performance记录性能信息
  • /var/spool/postfix/maildrop 下有大量文件
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [ C++ ] STL---string类的模拟实现
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [\u4e00-\u9fa5] //匹配中文字符
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [001-03-007].第07节:Redis中的事务