热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MTK的铃声修改与替换

MTK的资源一直深受研发人诟病,几乎成为初入手MTK人的挥之不去的痛楚,主要是因为缺乏相关的专业管理工具。虽然有一些公司自己开发一些图片了,

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

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

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

enum{
   MDI_FORMAT_NONE=-1,
   MDI_FORMAT_GSM_FR,               
   MDI_FORMAT_GSM_HR,              
   MDI_FORMAT_GSM_EFR,              
   MDI_FORMAT_AMR,                     
   MDI_FORMAT_AMR_WB,                 
   MDI_FORMAT_DAF,                    
   MDI_FORMAT_AAC,                    
   MDI_FORMAT_PCM_8K,                 
   MDI_FORMAT_PCM_16K,                
   MDI_FORMAT_G711_ALAW,           
   MDI_FORMAT_G711_ULAW,           
   MDI_FORMAT_DVI_ADPCM,           
   MDI_FORMAT_VR,                  
   MDI_FORMAT_WAV,                 
   MDI_FORMAT_WAV_ALAW,            
   MDI_FORMAT_WAV_ULAW,             
   MDI_FORMAT_WAV_DVI_ADPCM,      
   MDI_FORMAT_SMF,                  
   MDI_FORMAT_IMELODY,           
   MDI_FORMAT_SMF_SND,             
   MDI_FORMAT_MMF,                
   MDI_FORMAT_AU,                
   MDI_FORMAT_AIFF,                
   MDI_FORMAT_VRSI,                
   MDI_FORMAT_WMA,                   
   MDI_FORMAT_M4A,                  
   MDI_FORMAT_3GP,                    
   MDI_FORMAT_MP4,                         
   MDI_FORMAT_JPG,                            
   MDI_FORMAT_GIF,                            
   MDI_FORMAT_MJPG,                         
   MDI_FORMAT_PNG,                          
   MDI_NO_OF_FORMAT
};

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

#define FORMAT_IMY "18"  
#define FORMAT_MID "17"  
#define FORMAT_WAV "13"  
#define FORMAT_MMF "20"  
#define FORMAT_MP3 "5"  
#define FORMAT_PCM "7"  
#define FORMAT_DVI "11"  
#define FORMAT_AMR "3"  

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

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blogercn/archive/2009/08/26/4488292.aspx




推荐阅读
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文详细解释了为什么在成功执行移动赋值操作后,对象的析构函数会被调用,并提供了代码示例和详细的分析。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 本文探讨了在QT框架中如何有效遍历文件内容,并解决了一个常见的错误,即文件内容读取为空时弹窗无法正常显示的问题。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • Java实现文本到图片转换,支持自动换行、字体自定义及图像优化
    本文详细介绍了如何使用Java实现将文本转换为图片的功能,包括自动换行、自定义字体加载、抗锯齿优化以及图片压缩等技术细节。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
author-avatar
手机用户2502937497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有