查看: 3654|回复: 3

[RMVA发布] 单独停止播放某个SE

[复制链接]

老黄鸡

梦石
4
星屑
45692
在线时间
7947 小时
注册时间
2009-7-6
回帖
13335

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2014-9-8 23:13:11 | 显示全部楼层 |阅读模式

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

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

×
应某坛友需求而发,希望有人用得上。

使用Fux2.stop_se(文件名)即可停止播放同名文件的se。

简要分析,VA实际上最多只能同时播放32个se音频,播放时找到第一个未被使用或者已经播放完毕的se序号
参看下列代码各位也可以改成精确的按编号停止播放se,而不是按文件名。

(请不要与本人其他奇怪的脚本混合使用)
[pre lang="ruby" line="1"]module Fux2
  GM = Win32API.new('kernel32','GetModuleHandle','p','l')
  PSP = Win32API.new('kernel32','RtlMoveMemory','pll','v')
  PPSP = Win32API.new('kernel32','RtlMoveMemory','ppl','v')
  U2S = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  STOP_SE = Win32API.new('RGSS300','RGSSGetInt','v','v')

  BASE_ADDR = GM.call("RGSS300.dll")

  buf = "\0"*4
  PSP.call(buf,BASE_ADDR + 0x25EB04,4)
  SE_LIST_ADDR = buf.unpack("L")[0]+0x14

  SE_STOP_CALL_ADDR = 0x1171C3
  CODE_ADDR = BASE_ADDR+0x37A0

  CODE =  [0x55].pack("C*")
  CODE += [0x8B,0xEC].pack("C*")
  CODE += [0xB9,0,0,0,0].pack("C*")
  CODE += [0xE8].pack("C")+[SE_STOP_CALL_ADDR].pack("L")
  CODE += [0x33,0xC0,0x8B,0xE5,0x5D,0xC3].pack("C*")

  PPSP.call(CODE_ADDR,CODE,CODE.size)

  def self.set_addr(num)
    tn = [num].pack("L")
    PPSP.call(CODE_ADDR+4,tn,4)
  end

  def self.stop_se(filename=nil)
    unless filename
      Audio.se_stop
      return false
    end
    buf = "\0"*4
    (0...32).each do |i|
      PSP.call(buf,SE_LIST_ADDR+i*4,4)
      p_this_se = buf.unpack("L")[0]
      p_this_se_name = p_this_se+0x70
      namebuf = "\0"*0x220
      PSP.call(namebuf,p_this_se_name,0x220)
      p_this_se_name = "\0"*220
      if U2S.call(0,0,namebuf,-1,p_this_se_name,0x110,nil,nil)>0
        p_this_se_name = p_this_se_name.unpack("A*")[0]
        if p_this_se_name==filename
          set_addr(p_this_se)
          STOP_SE.call
        end
      end
    end
    return true
  end

end

#Audio.se_play("Audio/SE/ui_unique_get.wav")
#Fux2.stop_se("Audio/SE/ui_unique_get.wav")
[/pre]
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
梦石
0
星屑
8026
在线时间
1051 小时
注册时间
2012-4-3
回帖
1270

开拓者

发表于 2014-9-9 12:37:08 来自手机 | 显示全部楼层
移植控,希望Xp也有如此细腻的功能。
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-9-9 12:46:54 | 显示全部楼层
鸡触黑DLL已经成为一种日常任务了么

点评

=A=实在是想不到别的解决方法,一开始想利用一下bgm二次播放可以静音的方法来控制,但想想bgm不能同时播放多个。  发表于 2014-9-9 12:53
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-9-12 23:24:55 | 显示全部楼层
SE(Sound Effect 音效)这种东西的长度不会非常长吧=_=
播完简直秒秒钟的事情,暂停的意义是啥?

点评

游戏语音  发表于 2014-9-16 19:39
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部