AHK演奏——Music库

调用的是Winapi的midi模块

  1. ; Author: Mono
  2. ; Time: 2022.08.17
  3. ; Class Music
  4. File2KeyArr(Filename, Flags := "r", Encoding := "utf-8")
  5. {
  6. Res := []
  7. FileObj := FileOpen(Filename, Flags, Encoding)
  8. Flag := (FileObj.ReadLine() == "Key::") ? 1 : 0
  9. if Flag
  10. {
  11. While !FileObj.AtEOF
  12. {
  13. NewLine := StrSplit(FileObj.ReadLine())
  14. Lst_Flag := 0
  15. Tmp := []
  16. For i in NewLine
  17. {
  18. if i == " "
  19. Res.Push(_)
  20. else if i == "+"
  21. Res.Push("*0.5")
  22. else if i == "-"
  23. Res.Push("*2")
  24. else if i == "("
  25. {
  26. Lst_Flag := 1
  27. Continue
  28. }
  29. else if i == ")"
  30. {
  31. Lst_Flag := 0
  32. Res.Push(Tmp.Clone())
  33. Tmp := []
  34. Continue
  35. }
  36. else if Lst_Flag
  37. Tmp.Push(i)
  38. else if i == "|"
  39. Continue
  40. else
  41. Res.Push(i)
  42. }
  43. }
  44. }
  45. Return Res
  46. }
  47. LoadMidi()
  48. {
  49. hModule := DllCall("LoadLibrary", "Str", "winmm.dll")
  50. Return hModule
  51. }
  52. MidiOutClose(handle)
  53. {
  54. result := DllCall("winmm.dll\midiOutClose", "UInt", handle)
  55. if result
  56. {
  57. Msgbox "There was an error closing the midi output port. There may still be midi events being processed through it."
  58. Return -1
  59. }
  60. Return
  61. }
  62. MidiOutOpen(DeviceID := 0)
  63. {
  64. dwFlags := 0
  65. result := DllCall("winmm.dll\midiOutOpen"
  66. , "UInt*", &handle := 0
  67. , "UInt", DeviceID
  68. , "UInt", 0
  69. , "UInt", 0
  70. , "UInt", dwFlags)
  71. if result
  72. {
  73. Msgbox "There was an error opening the midi port. The port may be in use. Try closing and reopening all midi-enabled applications."
  74. Return -1
  75. }
  76. Return handle
  77. }
  78. MidiOutShortMsg(handle, voice)
  79. {
  80. result := DllCall("winmm.dll\midiOutShortMsg"
  81. , "UInt", handle
  82. , "UInt", voice)
  83. if result
  84. {
  85. Msgbox "There was an error sending the midi event."
  86. Return -1
  87. }
  88. Return
  89. }
  90. Class Music
  91. {
  92. Static KeyPlay(Arr, DeviceID := 0, QuitKey := "Esc", Speed := 300, Wait := 0.5)
  93. {
  94. handle := MidiOutOpen(DeviceID)
  95. volume := 0x7f
  96. voice := 0x0
  97. SleepTime := Speed
  98. Lst_Voice := []
  99. v := Map('Z',C3,'X',D3,'C',E3,'V',F3,'B',G3,'N',A3,'M',B3,
  100. 'A',C4,'S',D4,'D',E4,'F',F4,'G',G4,'H',A4,'J',B4,
  101. 'Q',C5,'W',D5,'E',E5,'R',F5,'T',G5,'Y',A5,'U',B5)
  102. Print("请按" QuitKey "键退出演奏")
  103. For i in Arr
  104. {
  105. tmp := []
  106. Lst_i := Type(i) == "Array" ? i : [i]
  107. if GetKeyState(QuitKey)
  108. {
  109. MidiOutClose(handle)
  110. WinClose("Sinet Print")
  111. Return
  112. }
  113. For j in Lst_i
  114. {
  115. if (j == LOW_SPEED || j == HIGH_SPEED || j == MIDDLE_SPEED)
  116. {
  117. SleepTime := j
  118. Continue 2
  119. }
  120. if InStr(j, "*")
  121. {
  122. SleepTime *= StrReplace(j, "*")
  123. Continue 2
  124. }
  125. if (j == _)
  126. {
  127. Sleep(SleepTime * Wait)
  128. Continue 2
  129. }
  130. voice := (volume << 16) + (v[j] << 8) + 0x94
  131. tmp.Push(voice)
  132. }
  133. For j in tmp
  134. MidiOutShortMsg(handle, j)
  135. Lst_Voice.Push(tmp)
  136. Sleep(SleepTime)
  137. }
  138. MidiOutClose(handle)
  139. WinClose("Sinet Print")
  140. Return Lst_Voice
  141. }
  142. Static Piano(DeviceID := 0, QuitKey := "Esc")
  143. {
  144. handle := MidiOutOpen(DeviceID)
  145. v := Map('Z',C3,'X',D3,'C',E3,'V',F3,'B',G3,'N',A3,'M',B3,
  146. 'A',C4,'S',D4,'D',E4,'F',F4,'G',G4,'H',A4,'J',B4,
  147. 'Q',C5,'W',D5,'E',E5,'R',F5,'T',G5,'Y',A5,'U',B5)
  148. Print("钢琴已开启,敲击键盘Q-U,A-J,Z-M")
  149. Print("请按" QuitKey "键退出`n")
  150. While True
  151. {
  152. if GetKeyState(QuitKey)
  153. {
  154. MidiOutClose(handle)
  155. WinClose("Sinet Print")
  156. Return
  157. }
  158. For i in Range(Ord('A'), Ord('Z') + 1)
  159. {
  160. if GetKeyState(Chr(i))
  161. {
  162. MidiOutShortMsg(handle, (0x007f << 16) + (v[Chr(i)] << 8) + 0x90)
  163. Print("已按下" Chr(i) "键")
  164. While GetKeyState(Chr(i))
  165. Sleep(100)
  166. }
  167. }
  168. }
  169. }
  170. Static Play(Arr, DeviceID := 0, QuitKey := "Esc", Speed := 300)
  171. {
  172. handle := MidiOutOpen(DeviceID)
  173. volume := 0x7f
  174. voice := 0x0
  175. SleepTime := Speed
  176. Lst_Voice := []
  177. Print("请按" QuitKey "键退出演奏")
  178. For i in Arr
  179. {
  180. tmp := []
  181. Lst_i := Type(i) == "Array" ? i : [i]
  182. For j in Lst_i
  183. {
  184. if GetKeyState(QuitKey)
  185. {
  186. MidiOutClose(handle)
  187. WinClose("Sinet Print")
  188. Return
  189. }
  190. if (j == LOW_SPEED || j == HIGH_SPEED || j == MIDDLE_SPEED)
  191. {
  192. SleepTime := j
  193. Continue 2
  194. }
  195. if InStr(j, "*")
  196. {
  197. SleepTime *= StrReplace(j, "*")
  198. Continue 2
  199. }
  200. if (j == _)
  201. {
  202. Sleep(SleepTime / 2)
  203. Continue 2
  204. }
  205. voice := (volume << 16) + (j << 8) + 0x94
  206. tmp.Push(voice)
  207. }
  208. For j in tmp
  209. MidiOutShortMsg(handle, j)
  210. Lst_Voice.Push(tmp)
  211. Sleep(SleepTime)
  212. }
  213. MidiOutClose(handle)
  214. WinClose("Sinet Print")
  215. Return Lst_Voice
  216. }
  217. }
  218. Print(Text*)
  219. {
  220. Global Print_Gui
  221. Global Print_Edit
  222. Print_Text := ""
  223. Loop Text.Length
  224. {
  225. String_Text := ToStringPrint(Text[A_Index])
  226. if SubStr(String_Text, -1) == "," && (Type(Text[A_Index]) == "Array" || Type(Text[A_Index]) == "ComObjArray" || Type(Text[A_Index]) == "Map" || Type(Text[A_Index]) == "Object")
  227. String_Text := SubStr(String_Text, 1, StrLen(String_Text) - 1)
  228. Print_Text .= String_Text "`n"
  229. }
  230. Print_Text := SubStr(Print_Text, 1, StrLen(Print_Text) - 1)
  231. if WinExist("Sinet Print")
  232. {
  233. WinActivate("Sinet Print")
  234. Print_Edit.Value .= "`n" Print_Text
  235. Return
  236. }
  237. Print_Gui := Gui()
  238. Print_Gui.Title := "Sinet Print"
  239. Print_Gui.BackColor := "87CEFA"
  240. Print_Edit := Print_Gui.Add("Edit", "R30 W800 ReadOnly")
  241. Print_Edit.SetFont("S12", "Arial")
  242. Print_Edit.Value := Print_Text
  243. Print_Gui.Show()
  244. }
  245. Range(start, stop)
  246. {
  247. tmp := []
  248. Loop stop - start
  249. tmp.Push(start + A_Index - 1)
  250. Return tmp
  251. }
  252. ToStringPrint(Text)
  253. {
  254. if Type(Text) == "Array"
  255. {
  256. if Text.Length < 1
  257. Text.InsertAt(1, "")
  258. String_Plus := ""
  259. String_Text := "[" . ToStringPrint(Text[1])
  260. Loop Text.Length - 1
  261. String_Plus .= "," . ToStringPrint(Text[A_Index + 1])
  262. String_Text .= String_Plus
  263. String_Text .= "]"
  264. Return String_Text
  265. }
  266. else if Type(Text) == "ComObjArray"
  267. {
  268. if Text.MaxIndex() < 0
  269. {
  270. Text := ComObjArray(VT_VARIANT:=12, 1)
  271. Text[0] := ""
  272. }
  273. String_Plus := ""
  274. String_Text := "[" . ToStringPrint(Text[0])
  275. Loop Text.MaxIndex()
  276. String_Plus .= "," . ToStringPrint(Text[A_Index])
  277. String_Text .= String_Plus
  278. String_Text .= "]"
  279. Return String_Text
  280. }
  281. else if Type(Text) == "Map"
  282. {
  283. String_Text := "{"
  284. For i, Value in Text
  285. String_Text .= ToStringPrint(i) . ":" . ToStringPrint(Value) . ","
  286. if SubStr(String_Text, -1) !== "{"
  287. String_Text := SubStr(String_Text, 1, StrLen(String_Text) - 1)
  288. String_Text .= "}"
  289. Return String_Text
  290. }
  291. else if Type(Text) == "Integer" || Type(Text) == "Float" || Type(Text) == "String"
  292. Return Text
  293. else if Type(Text) == "Object"
  294. {
  295. String_Text := "{"
  296. For i, Value in Text.OwnProps()
  297. String_Text .= ToStringPrint(i) . ":" . ToStringPrint(Value) . ","
  298. if SubStr(String_Text, -1) !== "{"
  299. String_Text := SubStr(String_Text, 1, StrLen(String_Text) - 1)
  300. String_Text .= "},"
  301. Return String_Text
  302. }
  303. else
  304. Return "#Type: " Type(Text) "#"
  305. }
  306. ; Scale音阶参数
  307. Rest := 0, C8 := 108, B7 := 107, A7s := 106, A7 := 105, G7s := 104, G7 := 103, F7s := 102, F7 := 101, E7 := 100,
  308. D7s := 99, D7 := 98, C7s := 97, C7 := 96, B6 := 95, A6s := 94, A6 := 93, G6s := 92, G6 := 91, F6s := 90, F6 := 89,
  309. E6 := 88, D6s := 87, D6 := 86, C6s := 85, C6 := 84, B5 := 83, A5s := 82, A5 := 81, G5s := 80, G5 := 79, F5s := 78,
  310. F5 := 77, E5 := 76, D5s := 75, D5 := 74, C5s := 73, C5 := 72, B4 := 71, A4s := 70, A4 := 69, G4s := 68, G4 := 67,
  311. F4s := 66, F4 := 65, E4 := 64, D4s := 63, D4 := 62, C4s := 61, C4 := 60, B3 := 59, A3s := 58, A3 := 57, G3s := 56,
  312. G3 := 55, F3s := 54, F3 := 53, E3 := 52, D3s := 51, D3 := 50, C3s := 49, C3 := 48, B2 := 47, A2s := 46, A2 := 45,
  313. G2s := 44, G2 := 43, F2s := 42, F2 := 41, E2 := 40, D2s := 39, D2 := 38, C2s := 37, C2 := 36, B1 := 35, A1s := 34,
  314. A1 := 33, G1s := 32, G1 := 31, F1s := 30, F1 := 29, E1 := 28, D1s := 27, D1 := 26, C1s := 25, C1 := 24, B0 := 23,
  315. A0s := 22, A0 := 21
  316. ; Voice
  317. L1 := C3, L2 := D3, L3 := E3, L4 := F3, L5 := G3, L6 := A3, L7 := B3,
  318. M1 := C4, M2 := D4, M3 := E4, M4 := F4, M5 := G4, M6 := A4, M7 := B4,
  319. H1 := C5, H2 := D5, H3 := E5, H4 := F5, H5 := G5, H6 := A5, H7 := B5,
  320. LOW_SPEED := 600, MIDDLE_SPEED := 300, HIGH_SPEED := 150,
  321. _ := 0XFF
  1. ; 8.15新使用方法——键盘演奏
  2. ; 初始化winmm.dll
  3. LoadMidi()
  4. ; 转换演奏曲谱为库支持类型
  5. Arr := File2KeyArr("Ultramarine.txt")
  6. ; 开始演奏
  7. ; 最后一个参数表示演奏速率(默认为中速300,数值越小速率越快)
  8. Music.KeyPlay(Arr, , , 150)

来一首群青

Set danmaku color
Set danmaku type
0:00 / 0:00
Speed
Loop
Show danmaku
Unlimited danmaku
Opacity for danmaku
0.5
0.75
Normal
1.25
1.5
2
[x]
Player version
Player FPS
Video type
Video url
Video resolution
Video duration

Ultramarine.txt

提取码:mono复制
解压码:无

来一首卡农

Cannon.txt

提取码:mono复制
解压码:无
  1. ; 使用方法——键盘钢琴
  2. ; 初始化winmm.dll
  3. LoadMidi()
  4. ; 打开钢琴
  5. Music.Piano()
Set danmaku color
Set danmaku type
0:00 / 0:00
Speed
Loop
Show danmaku
Unlimited danmaku
Opacity for danmaku
0.5
0.75
Normal
1.25
1.5
2
[x]
Player version
Player FPS
Video type
Video url
Video resolution
Video duration
  1. ; 使用方法——演奏曲谱
  2. ; 初始化winmm.dll
  3. LoadMidi()
  4. ; 编写曲谱(需要一定乐理基础)
  5. ; 列表里嵌套的列表表示多音符
  6. Musical :=
  7. [[H1,M5,M1],_,M5,M1,[H1,M5,M1],H2,M3,_,H5,_,[H1,M5,M1],H2,_,H3,_,[H1,M5,M1],H2,_,H3,_,
  8. [H1,M5,M1],_,M5,M1,[H1,M5,M1],H2,M3,_,H5,_,H2,H2,_,H3,_,H2,H3,_,H3,_,
  9. H3,H2,[H1,M5,M1],_,[H1,M5,M1],M5,M6,M3,M5,_,H3,H2,[H1,M5,M1],_,[H1,M5,M1],M5,M6,M3,M5,_,
  10. H3,H2,H2,_,H2,[H1,M5,M1],M7,_,M6,M7,M5,M6,_,_,
  11. M6,M5,M6,_,
  12. M5,[H1,M5,M1],H2,H5,M5,[H1,M5,M1],H2,M5,H5,_,
  13. M5,[H1,M5,M1],H2,M5,H5,M5,[H1,M5,M1],M5,H2,M5,H5,_,
  14. M5,[H1,M5,M1],H2,H5,M5,[H1,M5,M1],H2,M5,H5,_,
  15. M5,[H1,M5,M1],H2,H5,M5,[H1,M5,M1],M5,H2,M5,H5,_,
  16. [H1,M5,M1],_,M5,M1,[H1,M5,M1],H2,M5,H3,_,H5,M5,H2,H2,_,H3,_,[H1,M5,M1],H2,_,H3,_,
  17. [H1,M5,M1],_,M5,M1,[H1,M5,M1],H2,M5,H3,_,H5,_,H2,H2,_,H3,_,H2,M3,_,H3,_,
  18. H3,H2,M3,[H1,M5,M1],_,[H1,M5,M1],M5,M6,M3,M5,_,H3,H2,M3,[H1,M5,M1],_,[H1,M5,M1],M5,M6,M3,M5,_,
  19. H3,H2,H2,_,H2,[H1,M5,M1],M7,_,M6,M7,M5,M6,_,_,_]
  20. Music.Play(Musical)
Set danmaku color
Set danmaku type
0:00 / 0:00
Speed
Loop
Show danmaku
Unlimited danmaku
Opacity for danmaku
0.5
0.75
Normal
1.25
1.5
2
[x]
Player version
Player FPS
Video type
Video url
Video resolution
Video duration
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
其他

朴实无华且枯燥的ahk模板生成工具

2022-8-11 20:55:36

其他

影子输入法功能添加之万能键(一键三用)以及万能防卡工具

2022-8-12 20:45:07

4 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
  1. 陌诺Mono

    小星星曲谱 [[C5,C4],G4,[C5,E4],G4, [G5,C4],F4,[G5,G4],F4, [A5,C4],A4,[A5,F4],A4, [G5,C4],G4,[C5,E5],_, [F5,C4],E4,[F5,A4],E4, [E5,B4],E4,[E5,G4],E4, [D5,B4],G4,[D5,D4],HIGH_SPEED,F4,G4,LOW_SPEED, [C5,E4,G4],HIGH_SPEED,C4,_,MIDDLE_SPEED, [G5,C4],D4,[G5,E4],G4, [F5,C5],A4,[F5,F4],D4, [E5,B4],E4,[E5,G4],E4, [D5,B4],G4,D4,HIGH_SPEED,F4,G4,MIDDLE_SPEED, [G5,C4],D4,[G5,E4],G4, [F5,C5],A4,[F5,F4],D4, [E5,B4],E4,[E5,G4],E4, [D5,B4],G4,D4,HIGH_SPEED,F4,G4,MIDDLE_SPEED, [C5,C4],[E4,G4],[C5,E4,G4],[E4,G4], [G5,C4],[F4,G4],[G5,F4,G4],[F4,G4], [A5,C4],[F4,A4],[A5,F4,A4],[F4,A4], [G5,C4],G4,HIGH_SPEED,[C5,E5],MIDDLE_SPEED,_, [F5,C4],[E4,A4],[F5,E4,A4],[E4,A4], [E5,B4],[E4,G4],[E5,E4,G4],[E4,G4], [D5,B4],[D4,F4,G4],[D5,B4],[D4,F4,G4], [C5,C4],HIGH_SPEED,C5,A4,G4,F4,E4,D4,LOW_SPEED,[C5,C4],_]

  2. hexuren

    多来点曲谱,很感兴趣

  3. hexuren
    1河许人给您打赏了¥2
  4. 陌诺Mono

    卡农曲谱 Key:: (ZBD) |(XBM) |(CNA) |(CBM)| (ZVN) |(ZBA) |(ZVN) |(XBM) | (ZBQE) |(BSJW) |(NDHQ) |(CMGJ)| (VAFH) |(ZBDG) |(VAFH) |(BSGJ) | (ZBQE) |(BSJW) F|(NDHQ) |(CMGJ) S| (VAFH) |(ZBDG) D|(VAFH) |(BSGJ) F| (ZDQ) B A |(BGJ) X (MF)| (NDQ) C (AHE)|(CET) M (DWY)| (VHR) Z (NQ) |(ZGE) B (AD) | (VSF) Z (NHQ)|(BGQ) X (MFQ) J| (ZQ)(BJ)(AQ)(BD)|(BG) X (MGJ) X| (NDQ) C (AHE) C|(CT)(ME)(DT)(MY)| (VHR)(ZGE)(NFW)(ZHR)|(ZE)(BW)(AQ)(BJ)| (VFH)(ZSF)(NHQ) Z|(BGQ)(XF)(MDQ)(XSJ)| (ZQ)(BJ)(AQ)(BF)|(BG) X (MGJ) X| (NDQ) C (AHE) C|(CT)(ME)(DT)(MY)| (VHR)(ZGE)(NFW)(ZHR)|(ZE)(BW)(AQ)(BJ)| (VFH)(ZDG)(NSF)(ZHQ)|(BGQ) XS(MJ) (XW)G| (ZQE) BG(AE) (BQ)W|B XE(MR)E(XW)| (NW) CQA (CJ)Q|(CJ) (BG)DMG (BM)A| (VFH) Z(GJ) N (ZHQ)|(ZDG) B A (BA)A| (VH)AZA (NF)H(ZQ)W|(BQ) XJMQ(XW)G| (ZQE) BG(AE) (BQ)W|B XE(MR)E(XW)| (NW) CQA (CJ)Q|(CJ) (BG)DMG (BM)A| (VFH) Z(HQ)NH(ZR)|(ZE) (BW)QA (BA)A| (VH)AZA (NF)H(ZQ)W|(BJ) XQM (XW)Q| (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZE) (BQ)W(AE) (BW)Q|(BW)J(XQ)W(ME)W(XQ)J| (NQ) (CH)J(AQ) (CA)S|(CD)F(BD)S(MD)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)Q(XH)J| (ZQ) B A D | B X M S| N C N A| C B M D| V Z N A | Z C B A | V Z N A | B X M S | (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZT) (BE)R(AT) (BE)R|(BT)G(XH)J(MQ)W(XE)R| (NE) (CQ)W(AE) (CD)F|(CG)H(BG)F(MG)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)E(XR)T| (ZE) (BQ)W(AE) (BW)Q|(BW)J(XQ)W(ME)W(XQ)J| (NQ) (CH)J(AQ) (CA)S|(CD)F(BD)S(MD)Q(BJ)Q| (VH) (ZQ)J(NH) (ZG)F|(ZG)F(BD)F(AG)H(BJ)Q| (VH) (ZQ)J(NQ) (ZJ)Q|(BJ)H(XJ)Q(MW)Q(XH)J| (ZQ) B A D | B X M S| N C N A| C B M D| V Z N A | Z C B A | V Z N A | B X M S |

个人中心
购物车
优惠劵
私信列表
搜索