短信网关发送手机铃声和图片详解

        手机铃声与图片的详细制作过程 手机铃声和图片的详细设计说明 这篇文档将前些日子自己测试的过程写下来供大家参考,可能现在这些东西许多人已经不再做了,但为了那些还在为这些东西摸索的朋友提供方便我还是写出来,但因为时间和资料的原因,所涉及到的还不是很全,希望知道更多细节的朋友们能与我分享你们在这方面的经验与知识。我将尽可能详细地写出它们制作的过程,包括测试用的手机型号,使用的工具,相关的算法,SP发送参数的设置等。

一. MOTOROLA普通铃声

1) 测试环境:手机型号--A388、T191;工具--NOK2PHONE;网关--亚信

2) 制作过程:以”999朵玫瑰”为例,首先用NOK2PHONE打开相应的MIDI文件,在NOK2PHONE的输出框中产生MOTOROLA普通铃声所需的字串,如” 2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”,根据算法计算出真正所需发送的铃声,内容是” L35&2 2F2E2C2D4R2A-1G-1F-2G-2C2A-6A-4C2A-2G-6D1D1C2D2E2&&27”,通过SP程序将该字串做为普通的文本消息发送至手机,手机上显示收到铃声。

3) 算法:MOTOROLA的铃声格式如下:
----------------------------------------------------------------------------------------- Header:L35& Tempo Value:由1或2或3或4加空格构成,缺省为2,如”2 “ Musical Data:将NOK2PHONE中产生的字串去掉空格即可 Delimiter:&& Checksum:对Musical Data进行的校验和,两个字节。方法为对Musical Data中的数据从前往后对每个字符进行异或运算,运算的结果假设其十六进制的表示为XY,那Checksum的第一个字节的十六进制形式为3Y,第二个字节的十六进制形式为3X。

部分算法:

BYTE a = 0, check1, check2; CString sRead(_T(“2 F2 E2 C2 D4 R2 A-1 G-1 F-2 G-2 C2 A-6 A-4 C2 A-2 G-6 D1 D1 C2 D2 E2”)), sRing; sRead.Replace(" ","" arrayMessage.SetSize(sRead.GetLength() + 1); strcpy((char *)arrayMessage.GetData(), sRead); for(int i=0;i>4 & 0xf) ; sRing.Format("L35&2 %s&&%c%c",(char *)arrayMessage.GetData(),check2,check1);

4) 发送参数设置:该消息是以普通文本方式的消息下发,ftm=0,udhi=0,pid=0,如果Checksum不对,则该消息以文本方式显示在手机上,否则显示为铃声。

二. SIEMENS图片(适用于其支持的各种大小的图片)

1) 测试环境:手机型号--3118;网关--亚信

2) 制作过程:首先选择一张101X29的单色BMP图做为源文件,文件名为1.BMP。通过程序的处理源文件被拆成4条连续的消息以二进制的形式存放在文件1.PIC中,发送时依次取出来发送即可。第一条和第四条消息的十六进制内容如下:

第一条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 01 00 04 00 8E 01 00 00 03 62 6D 70 05 31 2E 62 6D 70 42 4D 8E 01 00 00 00 00 00 00 3E 00 00 00 28 00 00 00 48 00 00 00 1C 00 00 00 01 00 01 00 00 00 00 00 50 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 FF FF FF 00 00 00 00 00 C0 3F 00 00 00 10 EB 00 00 00 00 00 E0 3F 00 FC 00 21 DB 00 00 00 00 00 E0 3E 03 03 00 71 F3 00 00 00 00 00 E0 3E 04 00 80 0D FE 00 00 00 00 00 …….

第四条:2F 2F 53 45 4F 01 6E 00 DD 05 00 00 04 00 04 00 8E 01 00 00 03 62 6D 70 05 31 2E 62 6D 70 0E 18 00 DB E0 00 00 00 0F E7 FF FC 1C 10 00 71 C0 00 00 00 07 FF BE 00 3C 70 00 00 00 00 00 00 07 EF FC 00 DF E0 00 00 00 00 00 00 05 EC FF 00 FB C0 00 00 00 00 00 00 02 66 DF 00 BF 30 00 00 00 00 00 00 3)

算法:其图片格式如下: ----------------------------------------------------------------------------- Identifier:标识。5字节。设为”//SEO”(注意大小写) Version:版本号。1字节。设为1 DataSize:数据大小。2字节。每个包里可图片数据的大小,对于同一图片的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足 ReferenceID:序列号。4字节。可自行设定,对同一图片的不同包的该值相同 ActPacketNumber:当前包是第几包。2字节。从1开始计数 NumberOfPackets:总包数。2字节。 ObjectSize:图片的大小。4字节。 ObjectType:类型为图片。4字节。第一字节为长度,因为类型为”bmp”所以第一字节为3,第二至第四字节为”bmp” ObjectName:图片的名称,包括扩展名。长度不定。第一个字节为长度。如图片为1.bmp,则ObjectName的长度为6,第一个字节为5。第二至六个字节为”1.bmp” Data:图片数据。从图片文件中拆分出来的数据。

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。

5) 其它说明:在对DataSize说明时,作者提到了当最后一包中实际数据内容不足时要补”0”,这种做法已经网友实验过是可行的,但在我的算法中,我并没有补0,实际发送也成功收到,这点有兴趣的朋友可以两种都试试。另外,对于图片文件名不要取得过长,否则会占用消息的长度,拆出更多的包。

三. SIEMENS铃声

1) 测试环境:手机型号--3118;网关--亚信

2) 制作过程:首先选一首”甜蜜蜜.mid”做为源文件。通过程序的处理源文件被拆成8条连续的消息以二进制的形式存放在文件1.rng中,发送时依次取出来发送即可。第一条和第八条消息的十六进制内容如下:

第一条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 01 00 08 00 F8 02 00 00 03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 4D 54 68 64 00 00 00 06 00 01 00 02 00 78 4D 54 72 6B 00 00 00 19 00 FF 58 04 04 02 18 08 00 FF 59 02 00 00 00 FF 51 03 09 27 C0 00 FF 2F 00 4D 54 72 6B 00 00 02 41 00 FF 21 01 00 00 FF 03 0E C5 4B AE B1 B5 4C BC C4 AD B7 B6 A1 A4 AF 00 90 4C 64 78 4C 00 00 4F 64 3C 4F 00 00 51 64 3C 51 00 00 4C 64 81 34 4C 00 00
…….

第八条:2F 2F 53 45 4F 01 69 00 E8 03 00 00 08 00 08 00 F8 02 00 00 03 6D 69 64 0A CC F0 C3 DB C3 DB 2E 6D 69 64 3C 80 4F 64 00 90 51 64 3C 80 51 64 00 90 4F 64 81 34 80 4F 64 00 FF 2F 00

3) 铃声格式如下:(同图片格式) <Identifier><Version><DataSize><ReferenceID><ActPacketNumber><NumberOfPackets><ObjectSize> <ObjectType><ObjectName><Data> ------------------------------------------------------------------------------
Identifier:标识。5字节。设为”//SEO”(注意大小写)
Version:版本号。1字节。设为1
DataSize:数据大小。2字节。每个包里可mid数据的大小,对于同一mid的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
ReferenceID:序列号。4字节。可自行设定,对同一首mid的不同包的该值相同
ActPacketNumber:当前包是第几包。2字节。从1开始计数
NumberOfPackets:总包数。2字节。
ObjectSize:mid的大小。4字节。
ObjectType:类型为mid。4字节。第一字节为长度,因为类型为”mid”所以第一字节为3,第二至第四字节为”mid”
ObjectName:mid的名称,包括扩展名。长度不定。第一个字节为长度。如歌曲为”甜蜜蜜.mid”,则ObjectName的长度为10,第一个字节为10。第二至十个字节为” 甜蜜蜜.mid”
Data:mid数据。从mid文件中拆分出来的数据。 部分算法同图片的处理,将其中sToFile(_T("甜蜜蜜.mid"), sFile(_T(".//1.rng”)); char objecttype[4] = {0x3,'m','i','d'};做相应修改即可。

4) 发送参数设置:ftm=0xf5,udhi=0,pid=0。

5) 其它说明:所使用的mid文件要是单音轨的,文件长度可长可短,但最好用工具处理到450至700字节之间,否则造成数据拆包过多,对消息的可靠传送及计费带来不便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值