扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 134|回复: 0

[转载发布] BGM含前奏后无限循环系统(补丁教程已发布)

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10622
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13391

    灌水之王

    发表于 2024-4-19 17:29:50 | 显示全部楼层 |阅读模式
    BUG已经更正,补丁教程已发布
    http://rpg.blue/viewthread.php?tid=130527
    前言:
    虽然没比紫苏发的  扩展音频模块  来的强悍....


    但至少此种前奏+后循环思路
    可以解决OGG播放播放位置的指针的问题
    很久以前有人在RMVX里提出RMXP是否也能达到该效果
    BGM前奏+无限循环主旋律播放
    http://rpg.blue/thread-97749-1-1.html

    现在RMXP也能90%模拟无DLL即可实现,
    若哪裡仍有BUG我没发现请告知(至少现在我还没找到)。

    使用本系统时,在Audio资料夹下建立专门放前奏的资料夹PRELUDE

    如果要剪辑音频,这裡提供一个简易又容易上手的软件。

    Audacity音频编辑软件:(无法编辑MIDI)
    可以利用此编辑软件把前奏跟主循环剪辑分開......
    http://rpg.blue/thread-106349-1-1.html

    # 使用注意事项:
    (1) 音频格式就是RM默认的那些 :mid  ogg  wav  mp3  wma
    (2) 前奏命名与主循环的音频命名相同
    (3) 前奏可有可无,本系统会自动判定
    (4) 前奏和后循环音频格式也可以互相搭配无限制
    (5) 前奏命名相同但格式不同时,优先级是:mid → ogg → wav → mp3 → wma
    (6) 此系统利用ME来播放前奏,所以当淡出BGM时会影响ME

    # 本系统缺点:(无法100%完美模拟 BGM前奏+无限循环主旋律播放)
      一般原声素材音频剪辑完(含剪辑掉头跟尾的空白期)后,
      头跟尾仍会有一小段空白期,每次循环时容易会顿一下,
      OGG格式则没有这个问题,所以主循环的音频推荐用OGG格式,
      但这也不是完全完美....第一次读入播放OGG档时,
      如果主循环太长,播放前,RM读入会耗时(播放前会有空白期)。
      目前标题画面无法使用有前奏的BGM,前奏沒播完就播放主循环,
      原因不明......= =
    1. #==============================================================================# ■ BGM含前奏后无限循环系统# §§  (无DLL即可实现,90%模拟)#------------------------------------------------------------------------------# 作者:TERENCE (龙皇)#==============================================================================class Game_System  #--------------------------------------------------------------------------  # ● 前奏布林代数控制初始化  #--------------------------------------------------------------------------  alias new_initialize initialize  def initialize    @bgm_boolean = false    new_initialize  end  #--------------------------------------------------------------------------  # ● BGM 前奏 副档名 判断  #--------------------------------------------------------------------------  def music_extname(bgm)    return ".mid" if FileTest.exist?("Audio/PRELUDE/" + bgm.name + ".mid")    return ".ogg" if FileTest.exist?("Audio/PRELUDE/" + bgm.name + ".ogg")    return ".wav" if FileTest.exist?("Audio/PRELUDE/" + bgm.name + ".wav")    return ".mp3" if FileTest.exist?("Audio/PRELUDE/" + bgm.name + ".mp3")    return ".wma" if FileTest.exist?("Audio/PRELUDE/" + bgm.name + ".wma")    return nil  end    #--------------------------------------------------------------------------  # ● 演奏 BGM  #     bgm : 演奏的 BGM  #--------------------------------------------------------------------------  def bgm_play(bgm)    @playing_bgm = bgm    if bgm != nil and bgm.name != ""      # 提取前奏命名      if @prelude_me == nil        prelude_name = nil      else        prelude_name = @prelude_me.name       end      # 播放前奏前判定是否同首BGM      if @playing_bgm.name != prelude_name         @bgm_boolean = false        Audio.me_stop      end      # 前奏判定播放      if music_extname(bgm) != nil and @bgm_boolean == false        prelude_play(bgm)        @bgm_boolean = true      end      Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)    else      Audio.bgm_stop      Audio.me_stop    end    Graphics.frame_reset  end  #--------------------------------------------------------------------------  # ● BGM 的淡出  (NOTE:此时也会影响到ME)  #     time : 淡出时间 (秒)  #--------------------------------------------------------------------------  def bgm_fade(time)    @playing_bgm = nil    Audio.bgm_fade(time * 1000)    Audio.me_fade(time * 1000)    @bgm_boolean = false  end  #--------------------------------------------------------------------------  # ● 还原 BGM  #--------------------------------------------------------------------------  def bgm_restore    bgm_play(@memorized_bgm)    @bgm_boolean = false  end  #--------------------------------------------------------------------------  # ● PRELUDE 的演奏  #     me : 演奏的 ME  #--------------------------------------------------------------------------  def prelude_play(me)    @prelude_me = me    if me != nil and me.name != ""      Audio.me_play("Audio/PRELUDE/" + me.name, me.volume, me.pitch)    else      Audio.me_stop    end    Graphics.frame_reset  endend复制代码
    复制代码
    工程范例:
    http://rpg.blue/upload_prog ... E_BGM_120789438.rar



    后知后觉:合并主题的内容

    原帖:
    http://rpg.blue/viewthread.php?tid=123326

    ◎前言
    首先我必须感谢君迁子大大,
    他是第一个发现有这个问题的人,
    发了这麼久到现在才有人发现我的漏洞= =
    无论怎样我也谢谢他对我脚本如此的支持...


    ◎此系统思路的本意(这个部份你可以跳过)
    在解释BUG发生的原因前,先了解ME的特性跟我的思路。
    ME的特性:
    当一首BGM播放时,突然播放ME,BGM会暂停,
    而ME播放完毕时,BGM会从暂停的地方淡入继续播放(有所谓记忆)


    我的思路:
    利用这样的特性,(从无音乐)一开始....
    如果我们在几短时间内播放BGM和ME会发生什麼事呢??
    而且又是先放ME再播放BGM(这之间不放等待),在脚本语句中相当於....
    Audio.me_play(...
    Audio.bgm_play(...

    这时RM就发生了很有趣的现象,如下图

    这时就產生了只有当ME播放完毕时,BGM才会自动被播放,
    这就是BGM含前奏后无限循环的製作思路


    ◎BUG发生的原因
    BUG现象就是战斗胜利ME根本没有播放直接就播放地图BGM,
    而且这种现象只会出现在含有前奏的地图BGM。
    这是為什麼呢?让我们看看下面的图

    一般来说,RM中所有战斗系统的胜利几乎都有个弊病...
    就是在战斗胜利时,播完胜利ME时,会出现地图的BGM(感觉很怪)

    又因為利用ME播放做出前奏后无限循环系统,
    所以导致当含有前奏的地图BGM,会遮蔽胜利的ME播放,而直接播放地图BGM


    ◎补丁修改
    為了解决这个问题,我们必须把新的BGM播放系统挪到后面,
    也就是在切换地图画面时,再播放BGM,如下图

    我们又知道
    $game_system.bgm_play($game_temp.map_bgm)
    长拿来还原為战斗开始前的(地图)BGM,所以....

    以下是以默认的战斗系统所做的补丁修改教程,如果使用其他的战斗脚本,请找到相对应的位置,如果在新的战斗脚本裡找不到对应的位置,那大概是某个部份还是採用了默认战斗系统的方法函式,这时候往前一个有关战斗脚本里找就对了

    (1)先找到 处理战斗画面的类别 class Scene_Battle

    (2)再找开始结束战斗回合的地方,也就是获得经验金钱宝物的地方

    (3)然后你就会看到附近有一句$game_system.bgm_play($game_temp.map_bgm)

    把该句删掉....

    (4)同样是class Scene_Battle下,找到战斗结束的地方
    def battle_end(result)一般新的战斗系统还是採用默认的函式,
    不会重新撰写,使用其他战斗系统的同学,可以直接找默认的地方直接修改=w=

    然后根据上图,在切换到地图画面$scene = Scene_Map.new上面做添加

    (5)如此一来就挪到后面了><


    § 如果还有什麼问题,请回帖告知=w= §
                 本帖来自P1论坛作者TERENCE,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=123326  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:00 , Processed in 0.085812 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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