Class: Miyako::Audio::BGM
Overview
BGM管理クラス
再生できるBGMは1曲だけ。2つ以上のBGMの同時演奏は不可
Constant Summary collapse
- @@playing_bgm =
nil
Class Method Summary collapse
-
.update ⇒ Object
BGMの再生情報を更新する.
Instance Method Summary collapse
-
#allow_loop_count_up ⇒ Object
:nodoc:.
-
#allow_loop_count_up? ⇒ Boolean
:nodoc:.
-
#dispose ⇒ Object
演奏情報を解放する レシーバをdup/deep_dupなどのメソッドで複製したことがある場合、 内部データを共有しているため、呼び出すときには注意すること.
-
#fade_in(msec = 5000, vol = nil, loops = nil) ⇒ Object
(also: #fadeIn)
フェードインしながら演奏する msec:: フェードインの時間。ミリ秒単位。デフォルトは5000ミリ秒(5秒) vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。 返却値:: 演奏に成功したときはtrue、失敗した問いはfalseを返す.
-
#fade_in? ⇒ Boolean
フェードイン中を示すフラグ 返却値:: フェードイン中はtrue、そのほかの時はfalseを返す.
-
#fade_out(msec = 5000, wmode = false) ⇒ Object
(also: #fadeOut)
演奏をフェードアウトする msec:: フェードアウトする時間。ミリ秒単位。デフォルトは5000ミリ秒 wmode:: フェードアウトする間、処理を停止するかどうかを示すフラグ。デフォルトはfalse(すぐに次の処理を開始) 返却値:: 自分自身を返す.
-
#fade_out? ⇒ Boolean
フェードアウト中を示すフラグ 返却値:: フェードアウト中はtrue、そのほかの時はfalseを返す.
-
#in_the_loop? ⇒ Boolean
現在、繰り返し演奏中かどうかを問い合わせる 現在、繰り返し回数が指定の回数の範囲内かどうかをtrue・falseで返す。 無限に繰り返しているときは常にtrue 返却値:: 現在繰り返し演奏中のときはtrue.
-
#initialize(fname, loops = -1)) ⇒ BGM
constructor
インスタンスを生成する fname:: 演奏するBGMファイル名。対応ファイルはwav,mp3,ogg,mid等。 loops:: 演奏の繰り返し回数を指定する。-1を渡すと無限に繰り返す。省略時は-1を渡す。 返却値:: 生成したインスタンス.
-
#initialize_copy(obj) ⇒ Object
インスタンスの複写 複写すると不都合が多いため、MiyakoCopyException例外が発生する.
-
#loop_count ⇒ Object
現在の繰り返し回数を取得する 繰り返し回数を限定して演奏しているとき、何回目の演奏家を示す。 無限に繰り返しているときは常に-1を返す 返却値:: ループ回数.
-
#loop_count_up ⇒ Object
:nodoc:.
- #offset ⇒ Object
- #offset=(val) ⇒ Object
-
#pause ⇒ Object
演奏を一時停止する resumeメソッドで一時停止を解除する 返却値:: 自分自身を返す.
-
#pausing? ⇒ Boolean
演奏停止中を示すフラグ 返却値:: 演奏停止中はtrue、演奏中はfalseを返す.
-
#play(vol = nil, loops = nil) ⇒ Object
BGMを演奏する。ブロックが渡されている場合、ブロックの評価中のみ演奏する。 音の大きさ・繰り返し回数を指定可能 vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。 返却値:: 演奏に成功したときはtrue、失敗した問いはfalseを返す.
-
#playing? ⇒ Boolean
演奏中を示すフラグ 返却値:: 演奏中はtrue、停止(一時停止)中はfalseを返す.
-
#playing_without_loop? ⇒ Boolean
:nodoc:.
- #pos ⇒ Object
- #reset_ticks ⇒ Object
-
#resume ⇒ Object
一時停止を解除する 返却値:: 自分自身を返す.
- #rewind ⇒ Object
-
#set_volume(v) ⇒ Object
(also: #setVolume)
音の大きさを設定する v:: 音の大きさ。0〜255までの整数。255で最大。 返却値:: 自分自身を返す.
- #setup_ticks ⇒ Object
-
#start(vol = nil, loops = nil) ⇒ Object
BGMを演奏する。ブロックが渡されている場合、ブロックの評価中のみ演奏する。 音の大きさ・繰り返し回数・演奏時間を指定可能 vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。 返却値:: 演奏に成功したときはtrue、失敗した問いはfalseを返す.
-
#stop ⇒ Object
演奏を停止する pauseメソッドとは違い、完全に停止するため、resumeメソッドは使えない 返却値:: 自分自身を返す.
Constructor Details
#initialize(fname, loops = -1)) ⇒ BGM
インスタンスを生成する
- fname
-
演奏するBGMファイル名。対応ファイルはwav,mp3,ogg,mid等。
- loops
-
演奏の繰り返し回数を指定する。-1を渡すと無限に繰り返す。省略時は-1を渡す。
- 返却値
-
生成したインスタンス
104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/Miyako/API/audio.rb', line 104 def initialize(fname, loops = -1) return if $not_use_audio raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 raise MiyakoIOError.no_file(fname) unless File.exist?(fname) @bgm = SDL::Mixer::Music.load(fname) @loops = loops @now_loops = loops @loop_cnt = 1 @cnt_up_flag = false @offset_ticks = 0 reset_ticks end |
Class Method Details
.update ⇒ Object
BGMの再生情報を更新する
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/Miyako/API/audio.rb', line 58 def BGM.update return if $not_use_audio return unless @@playing_bgm if !@@playing_bgm. && @@playing_bgm.in_the_loop? @@playing_bgm.loop_count_up @@playing_bgm = nil if !@@playing_bgm.in_the_loop? elsif !@@playing_bgm. && !@@playing_bgm.fade_out? @@playing_bgm = nil elsif !@@playing_bgm.allow_loop_count_up? @@playing_bgm.allow_loop_count_up end end |
Instance Method Details
#allow_loop_count_up ⇒ Object
:nodoc:
92 93 94 |
# File 'lib/Miyako/API/audio.rb', line 92 def allow_loop_count_up #:nodoc: @cnt_up_flag = true end |
#allow_loop_count_up? ⇒ Boolean
:nodoc:
96 97 98 |
# File 'lib/Miyako/API/audio.rb', line 96 def allow_loop_count_up? #:nodoc: @cnt_up_flag end |
#dispose ⇒ Object
演奏情報を解放する
レシーバをdup/deep_dupなどのメソッドで複製したことがある場合、 内部データを共有しているため、呼び出すときには注意すること
296 297 298 299 300 |
# File 'lib/Miyako/API/audio.rb', line 296 def dispose @@playing_bgm = nil if @@playing_bgm == self @bgm.destroy @bgm = nil end |
#fade_in(msec = 5000, vol = nil, loops = nil) ⇒ Object Also known as: fadeIn
フェードインしながら演奏する
- msec
-
フェードインの時間。ミリ秒単位。デフォルトは5000ミリ秒(5秒)
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。
- 返却値
-
演奏に成功したときはtrue、失敗した問いはfalseを返す
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/Miyako/API/audio.rb', line 182 def fade_in(msec=5000, vol = nil, loops = nil) return false if $not_use_audio return false if @@playing_bgm && @@playing_bgm != self raise MiyakoValueError.over_range(msec, 1, nil) unless msec > 0 if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) set_volume(vol) end if loops raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 end @now_loops = loops ? loops : @loops SDL::Mixer.fade_in_music(@bgm, @now_loops) setup_ticks @@playing_bgm = self @loop_cnt = 1 return true end |
#fade_in? ⇒ Boolean
フェードイン中を示すフラグ
- 返却値
-
フェードイン中はtrue、そのほかの時はfalseを返す
236 237 238 239 240 241 242 |
# File 'lib/Miyako/API/audio.rb', line 236 def fade_in? return false if $not_use_audio # return SDL::Mixer.fading_music == SDL::Mixer::FADING_IN # なぜかSDL::Mixer::FADING_INが見つからないため、即値で # from SDL_Mixer.h return SDL::Mixer.fading_music == 2 end |
#fade_out(msec = 5000, wmode = false) ⇒ Object Also known as: fadeOut
演奏をフェードアウトする
- msec
-
フェードアウトする時間。ミリ秒単位。デフォルトは5000ミリ秒
- wmode
-
フェードアウトする間、処理を停止するかどうかを示すフラグ。デフォルトはfalse(すぐに次の処理を開始)
- 返却値
-
自分自身を返す
283 284 285 286 287 288 289 290 291 |
# File 'lib/Miyako/API/audio.rb', line 283 def fade_out(msec = 5000, wmode = false) return self if $not_use_audio raise MiyakoValueError.over_range(msec, 1, nil) unless msec > 0 if SDL::Mixer.play_music? SDL::Mixer.fade_out_music(msec) SDL::delay(msec) if wmode end return self end |
#fade_out? ⇒ Boolean
フェードアウト中を示すフラグ
- 返却値
-
フェードアウト中はtrue、そのほかの時はfalseを返す
246 247 248 249 250 251 252 |
# File 'lib/Miyako/API/audio.rb', line 246 def fade_out? return false if $not_use_audio # return SDL::Mixer.fading_music == SDL::Mixer::FADING_OUT # なぜかSDL::Mixer::FADING_OUTが見つからないため、即値で # from SDL_Mixer.h return SDL::Mixer.fading_music == 1 end |
#in_the_loop? ⇒ Boolean
現在、繰り返し演奏中かどうかを問い合わせる
現在、繰り返し回数が指定の回数の範囲内かどうかをtrue・falseで返す。 無限に繰り返しているときは常にtrue
- 返却値
-
現在繰り返し演奏中のときはtrue
83 84 85 |
# File 'lib/Miyako/API/audio.rb', line 83 def in_the_loop? @now_loops == -1 ? true : @loop_cnt <= @now_loops end |
#initialize_copy(obj) ⇒ Object
インスタンスの複写
複写すると不都合が多いため、MiyakoCopyException例外が発生する
119 120 121 |
# File 'lib/Miyako/API/audio.rb', line 119 def initialize_copy(obj) raise MiyakoCopyError.not_copy("BGM") end |
#loop_count ⇒ Object
現在の繰り返し回数を取得する
繰り返し回数を限定して演奏しているとき、何回目の演奏家を示す。 無限に繰り返しているときは常に-1を返す
- 返却値
-
ループ回数
75 76 77 |
# File 'lib/Miyako/API/audio.rb', line 75 def loop_count @loop_cnt end |
#loop_count_up ⇒ Object
:nodoc:
87 88 89 90 |
# File 'lib/Miyako/API/audio.rb', line 87 def loop_count_up #:nodoc: @loop_cnt = @loop_cnt + 1 if (@now_loops != -1 && @cnt_up_flag) @cnt_up_flag = false end |
#offset ⇒ Object
307 308 309 |
# File 'lib/Miyako/API/audio.rb', line 307 def offset @offset_ticks end |
#offset=(val) ⇒ Object
315 316 317 |
# File 'lib/Miyako/API/audio.rb', line 315 def offset=(val) @offset_ticks = val end |
#pause ⇒ Object
演奏を一時停止する
resumeメソッドで一時停止を解除する
- 返却値
-
自分自身を返す
225 226 227 228 229 230 231 232 |
# File 'lib/Miyako/API/audio.rb', line 225 def pause return self if $not_use_audio if SDL::Mixer.play_music? SDL::Mixer.pause_music @pos_ticks += SDL.get_ticks-@start_tick end return self end |
#pausing? ⇒ Boolean
演奏停止中を示すフラグ
- 返却値
-
演奏停止中はtrue、演奏中はfalseを返す
217 218 219 220 |
# File 'lib/Miyako/API/audio.rb', line 217 def pausing? return false if $not_use_audio return SDL::Mixer.pause_music? end |
#play(vol = nil, loops = nil) ⇒ Object
BGMを演奏する。ブロックが渡されている場合、ブロックの評価中のみ演奏する。
音の大きさ・繰り返し回数を指定可能
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。
- 返却値
-
演奏に成功したときはtrue、失敗した問いはfalseを返す
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/Miyako/API/audio.rb', line 155 def play(vol = nil, loops = nil) return false if $not_use_audio return false if @@playing_bgm && @@playing_bgm != self if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) set_volume(vol) end if loops raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 end @now_loops = loops ? loops : @loops SDL::Mixer.play_music(@bgm, @now_loops) setup_ticks @loop_cnt = 1 if block_given? yield self SDL::Mixer.halt_music end @@playing_bgm = self return true end |
#playing? ⇒ Boolean
演奏中を示すフラグ
- 返却値
-
演奏中はtrue、停止(一時停止)中はfalseを返す
205 206 207 208 |
# File 'lib/Miyako/API/audio.rb', line 205 def return false if $not_use_audio return (SDL::Mixer.play_music? && self.in_the_loop?) || self.fade_out? end |
#playing_without_loop? ⇒ Boolean
:nodoc:
210 211 212 213 |
# File 'lib/Miyako/API/audio.rb', line 210 def #:nodoc: return false if $not_use_audio return SDL::Mixer.play_music? end |
#pos ⇒ Object
302 303 304 305 |
# File 'lib/Miyako/API/audio.rb', line 302 def pos return 0 unless @start_tick SDL.get_ticks - @start_tick + @offset_ticks + @pos_ticks end |
#reset_ticks ⇒ Object
325 326 327 328 329 |
# File 'lib/Miyako/API/audio.rb', line 325 def reset_ticks @start_tick = nil @pos_ticks = 0 self.offset = @offset_ticks end |
#resume ⇒ Object
一時停止を解除する
- 返却値
-
自分自身を返す
256 257 258 259 260 261 262 263 |
# File 'lib/Miyako/API/audio.rb', line 256 def resume return self if $not_use_audio if SDL::Mixer.pause_music? SDL::Mixer.resume_music @start_tick = SDL.get_ticks end return self end |
#rewind ⇒ Object
331 332 333 334 335 336 |
# File 'lib/Miyako/API/audio.rb', line 331 def rewind if SDL::Mixer.play_music? SDL::Mixer.rewind_music setup_ticks end end |
#set_volume(v) ⇒ Object Also known as: setVolume
音の大きさを設定する
- v
-
音の大きさ。0〜255までの整数。255で最大。
- 返却値
-
自分自身を返す
126 127 128 129 130 131 |
# File 'lib/Miyako/API/audio.rb', line 126 def set_volume(v) return self if $not_use_audio raise MiyakoValueError.over_range(v, 0, 255) unless (0..255).cover?(v) SDL::Mixer.set_volume_music(v) return self end |
#setup_ticks ⇒ Object
319 320 321 322 323 |
# File 'lib/Miyako/API/audio.rb', line 319 def setup_ticks @start_tick = SDL.get_ticks @pos_ticks = 0 self.offset = @offset_ticks end |
#start(vol = nil, loops = nil) ⇒ Object
BGMを演奏する。ブロックが渡されている場合、ブロックの評価中のみ演奏する。
音の大きさ・繰り返し回数・演奏時間を指定可能
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。nilを渡すと元の設定を使う。省略時はnilを渡す。
- 返却値
-
演奏に成功したときはtrue、失敗した問いはfalseを返す
140 141 142 143 144 145 146 147 148 |
# File 'lib/Miyako/API/audio.rb', line 140 def start(vol = nil, loops = nil) if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) end if loops raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 end return self.play(vol, loops) end |
#stop ⇒ Object
演奏を停止する
pauseメソッドとは違い、完全に停止するため、resumeメソッドは使えない
- 返却値
-
自分自身を返す
268 269 270 271 272 273 274 275 276 277 |
# File 'lib/Miyako/API/audio.rb', line 268 def stop return self if $not_use_audio if SDL::Mixer.play_music? SDL::Mixer.halt_music reset_ticks end @loop_cnt = @now_loops + 1 @@playing_bgm = nil if @@playing_bgm == self return self end |