设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6409|回复: 11
打印 上一主题 下一主题

[原创发布] 超华丽视觉 频谱!音频增强模块 Bass For RMXP!支持音频ogg wma!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
跳转到指定楼层
1
发表于 2010-12-14 09:33:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 kula1900 于 2010-12-15 17:29 编辑

下了 没一个顶的 ! 我晕



  1. #==============================================================================
  2. # ■ Graphics
  3. #------------------------------------------------------------------------------
  4. #   重新定义Graphics 防止当机! 重要!
  5. #==============================================================================
  6. class << Graphics
  7.   alias main_update update
  8.   def update
  9.     main_update
  10.     $game_bass.update
  11.   end
  12. end
  13. #==============================================================================
  14. # ■ Bass
  15. #    强大的流媒体播放 Lib For Win32 封装成RGSS脚本!会的人 或许很多吧!献丑了!
  16. #    支持格式 WMA MP3 OGG 等...加上 Bass_DShow 可以播放视频文件
  17. #    加上 ffdshow插件 可以播放 现在大部分主流视频!
  18. #    Bass_DShow.dll   基于 DirectShow 开发!好了废话就说那么多吧!
  19. #------------------------------------------------------------------------------
  20. #   处理流媒体的类 其实处理这个类 应该加入线程中 这样是最好的!
  21. #    转载时 请保留  此 & 以下 信息!谢谢!
  22. #    由于时间关系 本人不得不 离开 RMXP 几天  只能发个这个尝鲜版了!
  23. #    最后祝大家身体健康 万事如意
  24. #    ------------------------------------- My嬡凊丶莈孒汸姠♀誰帶蕗
  25. #  QQ:370052078
  26. #    哪逺咕畱芐哋傷畩舊彯蕶!
  27. #    落埖巳莋猦湔橆,蓅渁畩舊呮崬厾!
  28. #    ①咟姩後哋'落葭'仍嘫浍洧洮埖嬤?
  29. #==============================================================================
  30. class Game_Bass
  31.   attr_accessor :stream
  32.   attr_accessor :fft_p  
  33.   attr_accessor :title
  34.   attr_accessor :singer
  35.   #  定义常量
  36.   BASS_DATA_FFT256    = 2147483648
  37.   BASS_DATA_FFT512    = 2147483649
  38.   BASS_DATA_FFT1024   = 2147483650
  39.   BASS_DATA_FFT2048   = 2147483651
  40.   BASS_DATA_FFT4096   = 2147483652
  41.   BASS_DATA_FFT8192   = 2147483653
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化
  44.   #--------------------------------------------------------------------------
  45.   def initialize
  46.     $peacks = []
  47.     @title=""
  48.     @singer=""
  49.     @pluginid=0
  50.     @stream = 0
  51.     @fft_data = []
  52.     for i in 0...255
  53.       @fft_data[i] = 0
  54.     end
  55.     @fft_p = @fft_data.pack("d255")
  56.     init = Win32API.new("bass.dll","BASS_Init",'iiiii','i')
  57.     # 设备号 采样率 标志 窗口句柄 为0 则 当前句柄
  58.     init.call(-1,44100,0,0,0)
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 更新
  62.   #--------------------------------------------------------------------------
  63.   def update
  64.     updateapi = Win32API.new("bass.dll","BASS_Update",'i','i')
  65.     updateapi.call(15000)    # 15000毫秒挂入 Graphics 足够了! 这句只能加毫秒
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 加载插件Decoder
  69.   #--------------------------------------------------------------------------
  70.   def loadplugin(pluginfile="")
  71.     plugin = Win32API.new("bass.dll","BASS_PluginLoad",'pi','i')
  72.     plugin.call(pluginfile,@pluginid)
  73.     @pluginid=@pluginid+1
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 自动加载插件 枚举 \Decoder 文件下所有插件 进行 load
  77.   #--------------------------------------------------------------------------
  78.   def autoloadplugin
  79.     plugin =  Win32API.new("AuxiliaryLib.dll","LoadDecoder",'v','v')
  80.     plugin.call()
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 打开文件 文件名 UTF-8 转 ANSI
  84.   #--------------------------------------------------------------------------
  85.   def openfile(filename)
  86.     if @stream != 0 and @stream !=-1
  87.       free=Win32API.new("bass.dll","BASS_StreamFree",'i','i')
  88.       free.call(@stream)
  89.     end
  90.     open = Win32API.new("bass.dll","BASS_StreamCreateFile",'ipiii','i')
  91.     play = Win32API.new("bass.dll","BASS_ChannelPlay",'ii','i')
  92.     getinfo =  Win32API.new("AuxiliaryLib.dll","GetTitle","p","p")
  93.     @title= getinfo.call(filename)
  94.     getinfo =  Win32API.new("AuxiliaryLib.dll","GetSinger","p","p")
  95.     @singer=getinfo.call(filename)
  96.     play.call(@stream = open.call(0,filename.to_ansi,0,0,0),0)
  97.     setvol(60)
  98.     return @stream
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 获取文件流长度 秒模式
  102.   #--------------------------------------------------------------------------
  103.   def getlength
  104.     getlengthpos = Win32API.new("AuxiliaryLib.dll","GetLength",'i','i')
  105.     return getlengthpos.call(@stream)
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 获取当前位置
  109.   #--------------------------------------------------------------------------
  110.   def getpos
  111.     pos = Win32API.new("AuxiliaryLib.dll","GetPos",'i','i')
  112.     return pos.call(@stream)
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 获取流FFT - 频谱 功能
  116.   #--------------------------------------------------------------------------
  117.   # 以下纯 苦力呀 多亏了 林格斯翻译 咯 (*^__^*) 嘻嘻…… 翻译好像不咋滴
  118.   # ~~o(>_<)o ~~ 英语学得不好就是 吃亏
  119.   def getfftdata(fftval=256)
  120. #     BASS_DATA_FFT256 256 样本的FFT(256返回浮点值) 下面不翻译了 能看懂了
  121. #     BASS_DATA_FFT512 512 sample FFT (returns 512 floating-point values)  
  122. #     BASS_DATA_FFT1024 1024 sample FFT (returns 1024 floating-point values)  
  123. #     BASS_DATA_FFT2048 2048 sample FFT (returns 2048 floating-point values)  
  124. #     BASS_DATA_FFT4096 4096 sample FFT (returns 4096 floating-point values)
  125. #     BASS_DATA_FFT8192 8192 sample FFT (returns 8192 floating-point values)
  126. #     BASS_DATA_FFT_INDIVIDUAL 执行FFT的每个通道单独的,
  127. #                              而不是一个单一的联合的FFT。
  128. #                              返回的数据大小(如上述)乘以通道数。
  129. #     BASS_DATA_FFT_NOWINDOW 防止翰窗口被应用到的样本数据时执行的FFT。
  130. #     BASS_DATA_FFT_REMOVEDC 从样本中删除任何数据时进行直流偏置的FFT。
  131. #     BASS_DATA_AVAILABLE 查询的数据量的通道缓冲播放,或从录音。
  132. #                         这标志不能用于解码频道,他们没有播放缓冲区。
  133. #                         缓冲区被忽略时,使用此标志。
  134. #     以上是数据说明部分--------------------------------------------------------
  135. #     不管它 演示中我只取了 256 个值 而且 只用几个!图方便...因为 我手已经酸了...
  136. #                                   %>_<%
  137. #     ruby pack 这里参数特殊 所以 使用pack吧
  138. #     [1.0].pack("d") => "\000\000\000\000\000\000\360?"
  139. #     sparc (IEEE754 双精度 大Endian):
  140. #
  141. #     [1.0].pack("d") => "?\360\000\000\000\000\000\000"
  142.     if fftval=256
  143.       fftval = BASS_DATA_FFT256
  144.     elsif fftval=512
  145.       fftval = BASS_DATA_FFT512
  146.     elsif fftval=1024 # 眼睛开始花了!
  147.       fftval = BASS_DATA_FFT1024
  148.     elsif fftval=2048
  149.       fftval = BASS_DATA_FFT2048
  150.     elsif fftval=4096
  151.       fftval = BASS_DATA_FFT4096
  152.     elsif fftval=8192
  153.       fftval = BASS_DATA_FFT8192
  154.     else
  155.       return nil
  156.     end
  157.     fft = Win32API.new("bass.dll","BASS_ChannelGetData",'ipi','i')
  158.     fft.call(@stream,@fft_p,fftval)
  159.     return @fft_p
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 解开包
  163.   #--------------------------------------------------------------------------
  164.   def getpack(no=4)
  165.     return getfftdata.unpack("d"+no.to_s)
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 暂停播放
  169.   #--------------------------------------------------------------------------
  170.   def pause
  171.     act=Win32API.new("bass.dll","BASS_ChannelPause",'i','i')
  172.     act.call(@stream)
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 恢复播放
  176.   #--------------------------------------------------------------------------
  177.   def recovery
  178.     play = Win32API.new("bass.dll","BASS_ChannelPlay",'ii','i')
  179.     play.call(@stream,0)
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 停止播放
  183.   #--------------------------------------------------------------------------
  184.   def stop
  185.     stop = Win32API.new("bass.dll","BASS_ChannelStop",'i','i')
  186.     stop.call(@stream)
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 取播放状态
  190.   #--------------------------------------------------------------------------
  191.   def getstatus
  192.     active = Win32API.new("bass.dll","BASS_ChannelIsActive",'i','i')
  193.     return active.call(@stream)
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 取播放状态文本
  197.   #--------------------------------------------------------------------------
  198.   def getstatusstr
  199.     active = Win32API.new("bass.dll","BASS_ChannelIsActive",'i','i')
  200.     string = "未知状态"
  201.     case active.call(@stream)
  202.     when 0
  203.       string ="停止播放"
  204.     when 1
  205.       string ="正在播放"
  206.     when 2
  207.       string ="等待播放"
  208.     when 3
  209.       string ="暂停播放"
  210.     end
  211.     return string
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 前进后退
  215.   #--------------------------------------------------------------------------
  216.   def seek(pos=0)
  217.     setpos = Win32API.new("AuxiliaryLib.dll","seek",'ii','v')
  218.     setpos.call(@stream,pos)
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 置音量
  222.   #--------------------------------------------------------------------------
  223.   def setvol(vol=100)
  224.     setvol = Win32API.new("AuxiliaryLib.dll","SetVol",'ii','v')
  225.     setvol.call(@stream,vol)
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 取音量
  229.   #--------------------------------------------------------------------------
  230.   def getvol
  231.     getvol = Win32API.new("AuxiliaryLib.dll","GetVol",'i','i')
  232.     return getvol.call(@stream)
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 置播放位置
  236.   #--------------------------------------------------------------------------
  237.   def seek_to(pos = 0)
  238.     to = Win32API.new("AuxiliaryLib.dll","To",'ii','v')
  239.     getvol.call(@stream,to)
  240.   end
  241. end
复制代码
附件下 由于 Music 都是 流行歌曲 而且 3种格式 mp3 wma ogg 所以包 比较大!
版务...附件上不上...上千脑了 ...
下载地址:http://down.qiannao.com/space/fi ... /Project1.rar/.page

点评

⊙_⊙不错啊!  发表于 2013-10-4 09:04
恩啊!肯定原创啦..6r 上 应该没有吧!  发表于 2010-12-15 07:39

评分

参与人数 1星屑 +1332 收起 理由
fux2 + 1332 如果不是原创会受到惩罚哦!

查看全部评分

丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
2
发表于 2010-12-14 16:18:53 | 只看该作者
嗯,是不难理解,不过我对音乐的概念是——不要太走音,沙就好了。所以耳朵直接听不出差别。不过这调用的api还真乱……(@@)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
194 小时
注册时间
2010-10-12
帖子
281
3
发表于 2010-12-14 20:08:29 | 只看该作者
24.#    ------------------------------------- My嬡凊丶莈孒汸姠♀誰帶蕗

25.#  QQ:370052078

26.#    哪逺咕畱芐哋傷畩舊彯蕶!

27.#    落埖巳莋猦湔橆,蓅渁畩舊呮崬厾!

28.#    ①咟姩後哋'落葭'仍嘫浍洧洮埖嬤?

这是......
乱码啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
4
 楼主| 发表于 2010-12-14 20:12:52 | 只看该作者
回复 新手小白 的帖子

这个是注释 无关紧要的呀?
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
194 小时
注册时间
2010-10-12
帖子
281
5
发表于 2010-12-14 20:17:52 | 只看该作者
本帖最后由 新手小白 于 2010-12-14 20:20 编辑

虽然我又不会转载,但是
很好奇......
乱码的东西
主要是下一句
或许太多心了......
21.#    转载时 请保留  此 & 以下 信息!谢谢!

22.#    由于时间关系 本人不得不 离开 RMXP 几天  只能发个这个尝鲜版了!

23.#    最后祝大家身体健康 万事如意

24.#    ------------------------------------- My嬡凊丶莈孒汸姠♀誰帶蕗

25.#  QQ:370052078

26.#    哪逺咕畱芐哋傷畩舊彯蕶!

27.#    落埖巳莋猦湔橆,蓅渁畩舊呮崬厾!

28.#    ①咟姩後哋'落葭'仍嘫浍洧洮埖嬤?
啊,电脑现在只能访问很少一些网站
连Google都打不开......

补充:115也是
再补充:最可疑的是千脑我没有缓存,可是却有图标啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
6
 楼主| 发表于 2010-12-15 09:37:42 | 只看该作者
回复 新手小白 的帖子

路由器么? 可能开的时间太长 重启下 清掉路由器的缓存吧!
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
帖子
573
7
发表于 2010-12-23 11:27:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
8
 楼主| 发表于 2010-12-25 20:33:20 | 只看该作者
本帖最后由 kula1900 于 2010-12-25 20:36 编辑

:) 有呀...你要?易语言的 要么?因为涉及 MeidaInfo.dll 所以...呵呵...
.版本 2
.支持库 krnlnex

.程序集 程序集1
.程序集变量 媒体信息, 媒体信息
.程序集变量 i, 整数型

.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码

媒体信息.载入库 ()
返回 (0)  ' 返回值被忽略。

.子程序 _临时子程序

' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

.子程序 GetLength, 整数型, 公开
.参数 流, 整数型

返回 (BASS_ChannelBytes2Seconds (流, BASS_ChannelGetLength (流, 0)))

.子程序 GetPos, 整数型, 公开
.参数 流, 整数型

返回 (BASS_ChannelBytes2Seconds (流, BASS_ChannelGetPosition (流, 0)))

.子程序 GetHwnd, 整数型, 公开

返回 (FindWindow (“RGSS Player”, 读配置项 (取运行目录 () + “\Game.ini”, “Game”, “Title”, “”)))

.子程序 GetTitle, 文本型, 公开
.参数 Path, 文本型
.局部变量 转路径, 文本型
.局部变量 歌手, 文本型
.局部变量 歌曲, 文本型

转路径 = UTF8转ANSI (到字节集 (Path))
转路径 = 转换路径 (转路径)
.如果真 (转路径 ≠ “不存在!”)
    歌曲 = 媒体信息.获取指定信息 (转路径, “Inform”, “General;%Title%”)
    .如果真 (歌曲 = “”)
        取信息 (转路径, 歌手, 歌曲)
    .如果真结束
    返回 (到文本 (ANSI转UTF8 (歌曲)))
.如果真结束
返回 (到文本 (ANSI转UTF8 (“文件不存在!”)))

.子程序 取信息
.参数 路径, 文本型
.参数 歌手, 文本型, 参考
.参数 歌曲, 文本型, 参考
.局部变量 ID3V1, MP3_ID3V1
.局部变量 转换类, 转换类

取信息II (路径, 歌手, 歌曲)
.如果真 (歌曲 = “”)
    取信息III (路径, 歌曲)
.如果真结束
.如果真 (歌手 = “”)
    取信息III (路径, , 歌手)
.如果真结束
.如果真 (歌曲 = “”)
    歌曲 = 转换类.路径取标题 (路径)
.如果真结束
.如果真 (歌手 = “”)
    歌手 = “未知”
.如果真结束
返回 ()

.子程序 转换路径, 文本型
.参数 路径, 文本型

.如果 (取反 (文件是否存在 (路径)) = 真)
    返回 (取运行目录 () + “\” + 路径)
    .如果真 (取反 (文件是否存在 (取运行目录 () + “\” + 路径)))
        返回 (“不存在!”)
    .如果真结束
    返回 (取运行目录 () + “\” + 路径)
.否则
    返回 (路径)
.如果结束


.子程序 GetSinger, 文本型, 公开
.参数 Path, 文本型
.局部变量 转路径, 文本型
.局部变量 歌手, 文本型
.局部变量 歌曲, 文本型

转路径 = UTF8转ANSI (到字节集 (Path))
转路径 = 转换路径 (转路径)
.如果真 (转路径 ≠ “不存在!”)
    歌手 = 媒体信息.获取指定信息 (转路径, “Inform”, “General;%Performer%”)
    .如果真 (歌手 = “”)
        取信息 (转路径, 歌手, 歌曲)
    .如果真结束
    返回 (到文本 (ANSI转UTF8 (歌手)))
.如果真结束
返回 (到文本 (ANSI转UTF8 (“未知”)))

.子程序 取信息II
.参数 路径, 文本型
.参数 歌手, 文本型, 参考
.参数 歌曲, 文本型, 参考
.局部变量 ID3V1, MP3_ID3V1

读ID3V1 (路径, ID3V1)
歌手 = ID3V1.歌手名
歌曲 = ID3V1.歌曲名
.如果真 (ID3V1.歌手名 ≠ “”)
    歌手 = ID3V1.歌手名
.如果真结束
.如果真 (ID3V1.歌曲名 ≠ “”)
    歌曲 = ID3V1.歌曲名
.如果真结束


.子程序 取信息III
.参数 路径, 文本型
.参数 歌手, 文本型, 参考 可空
.参数 歌曲, 文本型, 参考 可空
.局部变量 ID3V1, MP3_ID3V2

读ID3V2 (路径, ID3V1)
歌手 = ID3V1.歌手名
歌曲 = ID3V1.歌曲名
.如果真 (ID3V1.歌手名 ≠ “”)
    歌手 = ID3V1.歌手名
.如果真结束
.如果真 (ID3V1.歌曲名 ≠ “”)
    歌曲 = ID3V1.歌曲名
.如果真结束


.子程序 SetPos, , 公开
.参数 流, 整数型
.参数 小数, 整数型

BASS_ChannelSetPosition (流, BASS_ChannelSeconds2Bytes (流, 小数), 0)

.子程序 seek, , 公开
.参数 流, 整数型
.参数 位置, 整数型

BASS_ChannelSetPosition (流, BASS_ChannelSeconds2Bytes (流, BASS_ChannelBytes2Seconds (流, BASS_ChannelGetPosition (流, 0)) + 位置), 0)

.子程序 GetPath, 文本型, 公开

返回 (到文本 (ANSI转UTF8 (取运行目录 ())))

.子程序 SetVol, , 公开
.参数 流, 整数型
.参数 vol, 整数型

BASS_ChannelSetAttribute (流, #BASS_ATTRIB_VOL, vol ÷ 100)

.子程序 GetVol, 整数型, 公开
.参数 流, 整数型
.局部变量 vold, 小数型
.局部变量 vol, 整数型

BASS_ChannelGetAttribute (流, #BASS_ATTRIB_VOL, vold)
vol = vold × 100
返回 (vol)

.子程序 To, , 公开
.参数 流, 整数型
.参数 pos, 整数型

BASS_ChannelSetPosition (流, BASS_ChannelSeconds2Bytes (流, BASS_ChannelBytes2Seconds (流, pos)), 0)

.子程序 LoadDecoder, , 公开

枚举文件 (取运行目录 () + “\Decoder”, 真, 0, &load)

.子程序 load, 逻辑型, , '
.参数 路径, 文本型

BASS_PluginLoad (路径, i)
i = i + 1
返回 (真)

丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2010-10-10
帖子
40
9
发表于 2011-1-18 16:24:23 | 只看该作者
不错支持一下。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
28 小时
注册时间
2008-12-19
帖子
24
10
发表于 2011-1-21 00:16:24 | 只看该作者
不错呀真的很牛比,可以借用呀
没有什么事情可以一触而成,需要的勇气,特别是不懂就问的勇气!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-5 14:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表