Project1

标题: VX的音量问题 [打印本页]

作者: 白魔导师宝儿    时间: 2013-11-16 18:36
标题: VX的音量问题
Audio.se_play("Audio/SE/damage",50+n*10,100)
以上是播放SE脚本
可是音量最大只能是100,有没有办法修改最大值?
作者: Password    时间: 2013-11-17 09:24
用音频编辑软件吧音效的本身音量调大(←简直像是没说啊魂淡 = =
作者: R-零    时间: 2013-11-17 11:31
本帖最后由 R-零 于 2013-11-17 11:47 编辑

难得来提问区看下
对于这个问题用api函数来解决修改系统当前的音量
前段是获取窗口句柄、后段是sendmessage函数
使用方法代码使用vup,提升2%音量
使用vdown,降低2%音量
以上代码可以连续使用达到效果

范例 Project1.7z (233.93 KB, 下载次数: 70)

RUBY 代码复制
  1. WM_APPCOMMAND = 0x319;
  2. APPCOMMAND_VOLUME_UP = 0x0a;
  3. APPCOMMAND_VOLUME_DOWN = 0x09;
  4. APPCOMMAND_VOLUME_MUTE = 0x08;
  5. #==============================================================================
  6. # ■ Kernel
  7. #------------------------------------------------------------------------------
  8. #  该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。
  9. #==============================================================================
  10. module Kernel
  11.   #--------------------------------------------------------------------------
  12.   # ● 需要的 Windows API 函数
  13.   #--------------------------------------------------------------------------
  14.   GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
  15.   GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
  16.   GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
  17.   GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
  18.   GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
  19.   #--------------------------------------------------------------------------
  20.   # ● 获取窗口句柄
  21.   #--------------------------------------------------------------------------
  22.   def get_hWnd
  23.     # 获取调用线程(RM 的主线程)的进程标识
  24.     threadID = GetCurrentThreadId.call
  25.     # 获取 Z 次序中最靠前的窗口
  26.     hWnd = GetWindow.call(GetForegroundWindow.call, 0)
  27.     # 枚举所有窗口
  28.     while hWnd != 0
  29.       # 如果创建该窗口的线程标识匹配本线程标识
  30.       if threadID == GetWindowThreadProcessId.call(hWnd, 0)
  31.         # 分配一个 11 个字节的缓冲区
  32.         className = " " * 11
  33.         # 获取该窗口的类名
  34.         GetClassName.call(hWnd, className, 12)
  35.         # 如果匹配 RGSS Player 则跳出循环
  36.         break if className == "RGSS Player"
  37.       end
  38.       # 获取下一个窗口
  39.       hWnd = GetWindow.call(hWnd, 2)
  40.     end
  41.     return hWnd
  42.   end
  43. end
  44.  
  45. VAPI = Win32API.new('user32','SendMessage','lllp','l')
  46. def vup
  47.   VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_UP * 0x10000)
  48. end
  49. def vdown
  50.   VAPI.call(get_hWnd,WM_APPCOMMAND,0x30292,APPCOMMAND_VOLUME_DOWN * 0x10000)
  51. end

作者: 白魔导师宝儿    时间: 2013-11-18 08:11
R-零 发表于 2013-11-17 11:31
难得来提问区看下
对于这个问题用api函数来解决修改系统当前的音量
前段是获取窗口句柄、后段是sendmessage ...

请问这脚本功能要怎么代入上面的脚本语句?
Audio.se_play("Audio/SE/damage",50+n*10,100)
作者: R-零    时间: 2013-11-29 17:02
白魔导师宝儿 发表于 2013-11-18 08:11
请问这脚本功能要怎么代入上面的脚本语句?
Audio.se_play("Audio/SE/damage",50+n*10,100) ...

不一样,这个是修改全局。在你播放音乐时可以修改操作系统的音量。所以要和你的脚本分开使用
作者: 白魔导师宝儿    时间: 2013-11-29 19:45
R-零 发表于 2013-11-29 17:02
不一样,这个是修改全局。在你播放音乐时可以修改操作系统的音量。所以要和你的脚本分开使用 ...

明白了
多谢解释




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1