mieki256's diary



2014/12/22(月) [n年前の日記]

#1 [dxruby] DXRubyとAyameとループBGMとイントロ

昔の2DゲームのBGMは、えてしてイントロとループ部分があったりするのだけど。DXRuby + Ayame では、ループ開始位置の指定ができないので、イントロ+ループの構成のBGMを流すことができなくて。

ふと、イントロの再生が終わった途端にループBGMの再生を開始したらそれっぽく聞こえないものかなーと気になってきたので試してみたり。

結論から言うとビミョー。音の隙間がドーンと入る時とそれほど入らない時があって。気になる時もあるし、気にならない時もあるし。とにかく不安定。メインループで ―― 1/60秒毎にチェックしてるせいだろうけど…。16.667ms って結構大きいな…。

ちなみに、Ayame には、Ayame#playing? (再生中かチェック)、Ayame#finished? (再生終了をチェック)、があるのだけど、それらを使うと隙間がドコーンと入ってしまって。おそらく、再生中 or 終了中のチェックは即座にできるわけじゃなくて、時間がかかってしまう模様。

テストに使ったソースは以下。Ruby 1.9.3 + DXRuby 1.4.1 + ayameruby003-mswin32-ruby19 で動作確認。

_bgmloop.rb
require 'dxruby'
require_relative 'ayame'

bgm_intro = Ayame.new('test58intro.ogg')
bgm_loop = Ayame.new('test58loop.ogg')

# bgm_intro = Ayame.new('test58intro.wav')
# bgm_loop = Ayame.new('test58loop.wav')

bgm_intro_time = 6.888

bgm_intro.predecode
bgm_loop.predecode

fnt = Font.new(14)
bgm_step = 0
intro_time = 0
Window.loop do
  break if Input.keyPush?(K_ESCAPE)

  if bgm_step == 1
    # イントロ再生中
    ntm = Time.now.to_i + (Time.now.usec / 1000000.0)
    if ntm - intro_time > bgm_intro_time
      # イントロの曲の長さを超えた
      puts "loop  start : #{ntm}"

      # loop BGM 再生開始
      bgm_step = 2
      bgm_loop.play(0, 0)
    end
  end

  if Input.keyPush?(K_Z)
    if bgm_step == 0
      # BGMを再生していないので、イントロ再生開始
      bgm_step = 1
      bgm_intro.play(1, 0)

      # 再生時の時間を記録
      ntm = Time.now.to_i + (Time.now.usec / 1000000.0)
      intro_time = ntm
      puts "intro start : #{intro_time}"
    elsif bgm_step == 2
      # loop BGM 再生中なので停止する
      bgm_step = 0
      bgm_loop.stop
    end
  end

  msg = [
    "z : start intro",
    "    intro playing",
    "z : stop loop bgm"
  ]
  Window.drawFont(8, 8, msg[bgm_step], fnt)

  Ayame.update
end

bgm_intro.dispose
bgm_loop.dispose

ogg と wav 等も入れたzipを置いときます。bgmloop.rb を実行して zキーを押せば、イントロ→ループBGMと流れるはず。ループBGM再生中に zキーを押せば、また最初からやり直し。

_bgmloop_20141222.zip

以上、1 日分です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project