◆未完成◆-对PlayTone的研究
一直想找到可以停的PlayTone,今天看了PlayTone的原码,发现这里有个按输入参数R12(声音号)选择的选项,再由PlaySMSTone找到短信的是35,最终自己参照写了个PlayTone2,改了一处值,可以停了。问题是:现在不知道哪个数字代表哪个铃声,试了下找不到规律(且有些无声)
已知:34、35:短信 36、37:小区广播。
代码如下:
$Segmented
$Mod167
;PTone2,我的音调播放函数
;Some Functions
pSendMessage EQU 0xB4724C
GetSoundsEnabled EQU 0xB5D2CE
;Some Address
PatchBeginEQU 0xBF86E0 ;从0xBF86A0开始
patch section code word AT PatchBegin
fun1 proc far
;R12:传入参数
mov [-r0], r8
mov r8, r12
calls seg(GetSoundsEnabled),sof(GetSoundsEnabled) ;是否开启声音
cmp r4, #0
jmpr cc_NZ,EXIT ;未开启,直接返回。
mov r12, #1 ; 将R12、R13作为参数以栈传入
mov [-r0], r12
mov r13, #2
mov [-r0], r13
mov r12, #34C0h ; 感觉是固定的。Yes!对应震动一样有。关键参数是谁?
mov r13, #0Eh
mov r14, #1 ;这个是关键?次数?因有些是0,有些是1, :改0循环,改1播一次,改2只响了0.5秒就停了。
mov r15, r8 ; 这里R8是铃声号了。
calls seg(pSendMessage), sof(pSendMessage) ;发送消息
add r0, #4 ;弹出栈
EXIT:
mov r8,
rets
fun1 endp
patch ends
End
另外看了任意铃声的源码,同样没有新发现。它产生的数字在这里用并不是要的铃声,难道任意铃声加了个什么值么?是多少?
请修改过任意铃声的朋友指教。
经测试失败。这个PlayTone只能称为是PlaySystemTone,我写了个小程序从01测试到50,结果只有被选用的如“两线路”“短信”“小区广播”“重要记事”才能播出来,
看到真正的PlayTone另有其地。
不是有个任意铃声对任意人吗,应该有启发的。
是不是首先要把铃声拷到内存呀。 我看过了,最后是计算得一个值,RX,但我追踪到后来就看不懂了。
我看得出那个值好像是铃声号吧,现在我也忘了。当时就没看下去。
我说把铃声拷到内存,似乎是从补丁返回后有这样的动作。
其实我也没看懂,不要误导了你。
本来这个PlayTone研究失败不免有些失落,但今天看到Jewes说到我的这个研究居然还有用,那继续把本问题的其它东西帖一下,说不定又对谁有用呢?
PlayTone的其它参数:(同样适用用PlayToneWhenOpen)
PlayTone EQU 0xB5D202
PlayToneWhenOpen EQU 0xB5D2A4
(也有写作PlayWarningToneWhenOpen的,实际上是对PlayTone的调用),但有WhenOpen可以根据当前的声音设置来决定发不发声(实际PlayTone也有此检测,但对一些参数又不检测……绕不清了,想知道的自己看源码吧).
注意是调用时的参数,不是1C/2C/3C那个,是Mov R12,??的参数!
(原来的)
1:“嘀嘀嘀”三声
2:“叮”
3:电池没电的“嘀嘀嘀嘀”声
4:是按键音“咔”声
5:是”嘟“
(以下是我测试的)
6:线路1
7:线路2
14:线路1
15: 线路2
18-25:音频按键音
26:嘟-嘟嘟(一长二短)
28:3636(咪哪咪哪)
2D:VIP
2E: VIP
2F:振动短震->居然是铃声中!
30:嘀--(低)开机声音
31:重要记事
32:重要记事
33:嘟
34/35短信
36/37小区广播
38:36(超短)
39:3666(超短)
3A:3-6 3-6 3-6(有点像警报,但不是铃声那种特效的警报)
3B:嘀-嘀-嘀-嘀(像呼机)
3C:嘟嘀嘀 嘀-嘀-
3D:嘀-(弱)(关机声音)
3E:嘀--
3F:嘀-嘀-
后面我测试了几个,没有声音了。
以上是我的测试,因为是乱猜,所以有些肯定没有测试出来。
附:我制作的PlayTone测试补丁 BeepTest
使用方法:在待机状态下,用 AT+CGSN*34,3E40,??
就可测试??数字代表的声音。
需求:先刷"未接提醒V1",不会出现强刷。
分两个部分:
;BeepTest
0x363800: DABF6084 DABFA086
0x1F86A0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DABF608488C08870D7503400F2F7423E
0x1F86B0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2FC403E2D09407C2D07F07CDAB5A4D2
0x1F86C0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7403400F6F7423E987098C0E6F9FFFF
0x1F86D0: FFFF DB00
;函数PlayTone2(就是那个播放长铃声会停的)
0x1F86E0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8880F08CDAB5CED248403D0CE01C88C0
0x1F86F0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E02D88D0E6FCC034E0EDE01EF0F8DAB4
0x1F8700: FFFFFFFFFFFFFFFF 4C7208049880DB00
[此贴子已经被作者于2004-2-28 22:48:31编辑过]
我主要是看到你写的这里:mov r14, #1 ;这个是关键?次数?因有些是0,有些是1, :改0循环,改1播一次,改2只响了0.5秒就停了。
我想系统也是通过和铃声相同的函数来实现振动的,所以我猜想这个对振动也有用,测试了一下,果然。
在此,感谢你的研究! 记得在国外哪里看到过类似的研究, 振动也属于铃声其中的一种,所以会有效。
我想这里的铃声函数应该非常有用的,具体的实现我也还在实验。 4757E0: mov r8, #18h
4757E4: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
4757E6: mov r8, #19h
4757EA: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
4757EC: mov r8, #1Ah
4757F0: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
4757F2: mov r8, #1Bh
4757F6: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
4757F8: mov r8, #1Ch
4757FC: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
4757FE: mov r8, #1Dh
475802: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
475804: mov r8, #1Eh
475808: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
47580A: mov r8, #1Fh
47580E: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
475810: mov r8, #20h
475814: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
475816: mov r8, #21h
47581A: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
47581C: mov r8, #23h
475820: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
475822: mov r8, #24h
475826: jmpr cc_UC, loc_47582C
;------------------------------------------------------------
475828: mov r8, #22h ;音频按键的音调(非数字键)
47582C: loc_47582C:
47582C: mov r12, #157Eh
475830: mov r13, #43h
475834: mov r14, #6
475836: mov r15, #35h
47583A: calls 0C5h, loc_C5EE76
47583E: mov r12, #157Eh
475842: mov r13, #43h
475846: mov r14, #6
475848: mov r15, #37h
47584C: calls 0C5h, loc_C5EE76
475850: cmp r8, #0
475852: jmpr cc_Z, loc_47585A
475854: mov r12, r8 ;这里改为r7每个按键的音调都不同,包括短信、来电等
475856: calls 0C7h, loc_C755BC;声音函数
47585A: loc_47585A:
47585A: calls 0C5h, loc_C5DBE6
47585E: mov r8,
475860: mov r9,
475862: rets
以上为X618音频按键音调函数,我星期五临下班时找到的,因为时间不多,只测试了音频声按键的音调,现家里无数据线,大家可看看有无可利用的价值。
http://www.36518.com/sjpd/bbs/dispbbs.asp?boardID=38&ID=17031
不懂,huajia的。
我用PlayTone测试中有一个是震动(2F)。
再看“任意铃声”,结果还是没收获。只知道计算出了铃声,却不知如何播放它的(看不懂了)。
国外的我从来没去看过(E文太差),说不定Riza已经研究出来了?不然为什么有“任意铃声”?
且觉得从“音调设置”->“短消息” 才能找到真正可以停止的PlayMusic。
此外,为什么说失败呢?因为“任意铃声”中计算的结果 古典1=05,但在这个PlayTone中05根本就不是“古典1”,所以我认为这个不是真正的PlayMusic(我觉得用这个名字是播任意音调的)
我也觉得PlayMusic是另外的函数,与PlayTone不同。
页:
[1]