Class: Miyako::Audio::SE
Overview
効果音管理クラス
Constant Summary collapse
- @@channels =
8
- @@playings =
[]
Instance Attribute Summary collapse
-
#priority ⇒ Object
Returns the value of attribute priority.
Class Method Summary collapse
-
.channels ⇒ Object
同時発音数を取得する 返却値:: 同時再生数.
-
.channels=(channels) ⇒ Object
同時発音数を変更する 同時発音数に0以下を指定するとMiyakoValueErrorが発生する 現在同時に発音している音が新しいせっていによりあぶれる場合、あぶれた分を優先度の低い順に停止する 起動時の同時発音数は8 channels:: 変更する同時発音数 返却値:: 変更に成功したときはtrue、失敗したときはfalseを返す.
-
.playing_any? ⇒ Boolean
何かしらの効果音が再生中かどうかを確認する 返却値:: 何かしらの効果音が再生中ならtrue、それ以外はfalse.
-
.stop(msec = nil) ⇒ Object
現在再生している効果音をすべて停止する msec:: 停止する時間をミリ秒で指定(msecミリ秒後に停止)。nilを渡すとすぐに停止する。省略時はnilを渡す。.
-
.update ⇒ Object
効果音の再生情報を更新する.
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, loops = 1, vol = nil, time = nil) ⇒ Object
フェードインしながら演奏する msec:: フェードインの時間。ミリ秒単位。デフォルトは5000ミリ秒(5秒) loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。 vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 time:: 演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。 返却値:: 演奏に成功したときはtrue、失敗した問いはfalseを返す.
-
#fade_in? ⇒ Boolean
フェードイン中を示すフラグ 返却値:: フェードイン中はtrue、そのほかの時はfalseを返す.
-
#fade_out(msec = 5000, wmode = false) ⇒ Object
演奏をフェードアウトする msec:: フェードアウトする時間。ミリ秒単位。デフォルトは5000ミリ秒 wmode:: フェードアウトする間、処理を停止するかどうかを示すフラグ。デフォルトはfalse(すぐに次の処理を開始) 返却値:: 自分自身を返す.
-
#fade_out? ⇒ Boolean
フェードアウト中を示すフラグ 返却値:: フェードアウト中はtrue、そのほかの時はfalseを返す.
-
#in_the_loop? ⇒ Boolean
現在、繰り返し演奏中かどうかを問い合わせる 現在、繰り返し回数が指定の回数の範囲内かどうかをtrue・falseで返す。 無限に繰り返しているときは常にtrue 返却値:: 現在繰り返し演奏中のときはtrue.
-
#initialize(fname, vol = nil, priority = 0) ⇒ SE
constructor
インスタンスを生成する fname:: 効果音ファイル名。wavファイルのみ対応 vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 vol:: 再生優先度(省略可能)。整数を設定する。省略したときは0を渡す。 返却値:: 生成したインスタンス.
-
#initialize_copy(obj) ⇒ Object
インスタンスの複写 複写すると不都合が多いため、MiyakoCopyException例外が発生する.
-
#loop_count ⇒ Object
現在の繰り返し回数を取得する 繰り返し回数を限定して演奏しているとき、何回目の演奏家を示す。 無限に繰り返しているときは常に-1を返す 返却値:: ループ回数.
-
#loop_count_up ⇒ Object
:nodoc:.
-
#play(vol = nil, loops = 1, time = nil) ⇒ Object
効果音を鳴らす 音の大きさ・繰り返し回数・演奏時間を指定可能 鳴らすとき、同時再生数を超えるときは鳴らさずにfalseを返す ただし、自分自身が鳴っているときは、前に鳴っていた音を止めて再び鳴らす vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。 time:: 演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。 返却値:: 再生に成功したときはtrue、失敗したときはfalseを返す.
-
#playing? ⇒ Boolean
効果音が鳴っているかを示すフラグ 返却値:: 効果音が鳴っているときはtrue、鳴っていないときはfalseを返す.
-
#playing_without_loop? ⇒ Boolean
:nodoc:.
-
#set_volume(v) ⇒ Object
(also: #setVolume)
効果音の大きさを設定する v:: 音の大きさ。0から255までの整数で示す。 返却値:: 自分自身を返す.
-
#start(vol = nil, loops = 1, time = nil) ⇒ Object
効果音を鳴らす 音の大きさ・繰り返し回数・演奏時間を指定可能 vol:: 音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。 loops:: 演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。 time:: 演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。 返却値:: 再生に成功したときはtrue、失敗したときはfalseを返す.
-
#stop(msec = nil) ⇒ Object
効果音を停止する msec:: 停止する時間をミリ秒で指定(msecミリ秒後に停止)。nilを渡すとすぐに停止する。省略時はnilを渡す。 返却値:: 自分自身を返す.
Constructor Details
#initialize(fname, vol = nil, priority = 0) ⇒ SE
インスタンスを生成する
- fname
-
効果音ファイル名。wavファイルのみ対応
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- vol
-
再生優先度(省略可能)。整数を設定する。省略したときは0を渡す。
- 返却値
-
生成したインスタンス
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
# File 'lib/Miyako/API/audio.rb', line 440 def initialize(fname, vol = nil, priority = 0) return nil if $not_use_audio raise MiyakoIOError.no_file(fname) unless File.exist?(fname) @wave = SDL::Mixer::Wave.load(fname) if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) @wave.set_volume(vol) end @channel = -1 @loops = -1 @now_loops = @loops @loop_cnt = 1 @cnt_up_flag = false @priority = priority end |
Instance Attribute Details
#priority ⇒ Object
Returns the value of attribute priority.
348 349 350 |
# File 'lib/Miyako/API/audio.rb', line 348 def priority @priority end |
Class Method Details
.channels ⇒ Object
同時発音数を取得する
- 返却値
-
同時再生数
373 374 375 |
# File 'lib/Miyako/API/audio.rb', line 373 def SE.channels @@channels end |
.channels=(channels) ⇒ Object
同時発音数を変更する
同時発音数に0以下を指定するとMiyakoValueErrorが発生する 現在同時に発音している音が新しいせっていによりあぶれる場合、あぶれた分を優先度の低い順に停止する 起動時の同時発音数は8
- channels
-
変更する同時発音数
- 返却値
-
変更に成功したときはtrue、失敗したときはfalseを返す
393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/Miyako/API/audio.rb', line 393 def SE.channels=(channels) return false if $not_use_audio raise MiyakoValueError, "Illegal Channels! : #{channels}" if channels <= 0 if @@playings.length > channels num = @@channels - channels sorted = @@playings.sort{|a,b| a.priority <=> b.priority} num.times{|n| sorted[n].stop} end SDL::Mixer.allocate_channels(channels) @@channels = channels return true end |
.playing_any? ⇒ Boolean
何かしらの効果音が再生中かどうかを確認する
- 返却値
-
何かしらの効果音が再生中ならtrue、それ以外はfalse
367 368 369 |
# File 'lib/Miyako/API/audio.rb', line 367 def SE. !@@playings.empty? end |
.stop(msec = nil) ⇒ Object
現在再生している効果音をすべて停止する
- msec
-
停止する時間をミリ秒で指定(msecミリ秒後に停止)。nilを渡すとすぐに停止する。省略時はnilを渡す。
379 380 381 382 383 384 385 |
# File 'lib/Miyako/API/audio.rb', line 379 def SE.stop(msec = nil) if msec raise MiyakoValueError.over_range(msec, 1, nil) unless msec > 0 end msec ? SDL::Mixer.expire(-1, msec) : SDL::Mixer.halt(-1) @@playings.clear end |
.update ⇒ Object
効果音の再生情報を更新する
351 352 353 354 355 356 357 358 359 360 361 362 363 |
# File 'lib/Miyako/API/audio.rb', line 351 def SE.update return if $not_use_audio @@playings.each{|| if !. && .in_the_loop? .loop_count_up @@playings.delete() if !.in_the_loop? elsif !. && !.fade_out? @@playings.delete() elsif !.allow_loop_count_up? .allow_loop_count_up end } end |
Instance Method Details
#allow_loop_count_up ⇒ Object
:nodoc:
427 428 429 |
# File 'lib/Miyako/API/audio.rb', line 427 def allow_loop_count_up #:nodoc: @cnt_up_flag = true end |
#allow_loop_count_up? ⇒ Boolean
:nodoc:
431 432 433 |
# File 'lib/Miyako/API/audio.rb', line 431 def allow_loop_count_up? #:nodoc: @cnt_up_flag end |
#dispose ⇒ Object
演奏情報を解放する
レシーバをdup/deep_dupなどのメソッドで複製したことがある場合、 内部データを共有しているため、呼び出すときには注意すること
632 633 634 635 |
# File 'lib/Miyako/API/audio.rb', line 632 def dispose @wave.destroy @wave = nil end |
#fade_in(msec = 5000, loops = 1, vol = nil, time = nil) ⇒ Object
フェードインしながら演奏する
- msec
-
フェードインの時間。ミリ秒単位。デフォルトは5000ミリ秒(5秒)
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- time
-
演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。
- 返却値
-
演奏に成功したときはtrue、失敗した問いはfalseを返す
552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 |
# File 'lib/Miyako/API/audio.rb', line 552 def fade_in(msec=5000, loops = 1, vol = nil, time = nil) return false if $not_use_audio if (@@playings.length == @@channels && !@@playings.include?(self)) sorted = @@playings.sort{|a,b| a.priority <=> b.priority} sorted[0].stop elsif @@playings.include?(self) self.stop end if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) set_volume(vol) end if time raise MiyakoValueError.over_range(time, 1, nil) unless time > 0 end raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 @now_loops = loops ? loops : @loops @loop_cnt = 1 lp = @now_loops == -1 ? -1 : @now_loops - 1 @channel = time ? SDL::Mixer.fade_in_channel_timed(-1, @wave, lp, msec, time) : SDL::Mixer.fade_in_channel(-1, @wave, lp, msec) @@playings << self @start_tick = SDL.get_ticks @pos_ticks = 0 SE.update return true end |
#fade_in? ⇒ Boolean
フェードイン中を示すフラグ
- 返却値
-
フェードイン中はtrue、そのほかの時はfalseを返す
598 599 600 601 602 603 604 605 |
# File 'lib/Miyako/API/audio.rb', line 598 def fade_in? return false if $not_use_audio return false if @channel == -1 # なぜかSDL::Mixer::FADING_INが見つからないため、即値で # from SDL_Mixer.h # return SDL::Mixer.fading(@channel) == SDL::Mixer::FADING_IN return SDL::Mixer.fading(@channel) == 2 end |
#fade_out(msec = 5000, wmode = false) ⇒ Object
演奏をフェードアウトする
- msec
-
フェードアウトする時間。ミリ秒単位。デフォルトは5000ミリ秒
- wmode
-
フェードアウトする間、処理を停止するかどうかを示すフラグ。デフォルトはfalse(すぐに次の処理を開始)
- 返却値
-
自分自身を返す
583 584 585 586 587 588 589 590 591 592 593 594 |
# File 'lib/Miyako/API/audio.rb', line 583 def fade_out(msec = 5000, wmode = false) return self if $not_use_audio return self if !@@playings.include?(self) if msec raise MiyakoValueError.over_range(msec, 1, nil) unless msec > 0 end if self. SDL::Mixer.fade_out(@channel, msec) SDL::delay(msec) if wmode end return self end |
#fade_out? ⇒ Boolean
フェードアウト中を示すフラグ
- 返却値
-
フェードアウト中はtrue、そのほかの時はfalseを返す
609 610 611 612 613 614 615 616 |
# File 'lib/Miyako/API/audio.rb', line 609 def fade_out? return false if $not_use_audio return false if @channel == -1 # なぜかSDL::Mixer::FADING_INが見つからないため、即値で # from SDL_Mixer.h # return SDL::Mixer.fading(@channel) == SDL::Mixer::FADING_OUT return SDL::Mixer.fading(@channel) == 1 end |
#in_the_loop? ⇒ Boolean
現在、繰り返し演奏中かどうかを問い合わせる
現在、繰り返し回数が指定の回数の範囲内かどうかをtrue・falseで返す。 無限に繰り返しているときは常にtrue
- 返却値
-
現在繰り返し演奏中のときはtrue
418 419 420 |
# File 'lib/Miyako/API/audio.rb', line 418 def in_the_loop? @now_loops == -1 ? true : @loop_cnt <= @now_loops end |
#initialize_copy(obj) ⇒ Object
インスタンスの複写
複写すると不都合が多いため、MiyakoCopyException例外が発生する
458 459 460 |
# File 'lib/Miyako/API/audio.rb', line 458 def initialize_copy(obj) raise MiyakoCopyError.not_copy("SE") end |
#loop_count ⇒ Object
現在の繰り返し回数を取得する
繰り返し回数を限定して演奏しているとき、何回目の演奏家を示す。 無限に繰り返しているときは常に-1を返す
- 返却値
-
ループ回数
410 411 412 |
# File 'lib/Miyako/API/audio.rb', line 410 def loop_count @loop_cnt end |
#loop_count_up ⇒ Object
:nodoc:
422 423 424 425 |
# File 'lib/Miyako/API/audio.rb', line 422 def loop_count_up #:nodoc: @loop_cnt = @loop_cnt + 1 if (@now_loops != -1 && @cnt_up_flag) @cnt_up_flag = false end |
#play(vol = nil, loops = 1, time = nil) ⇒ Object
効果音を鳴らす
音の大きさ・繰り返し回数・演奏時間を指定可能 鳴らすとき、同時再生数を超えるときは鳴らさずにfalseを返す ただし、自分自身が鳴っているときは、前に鳴っていた音を止めて再び鳴らす
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。
- time
-
演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。
- 返却値
-
再生に成功したときはtrue、失敗したときはfalseを返す
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 |
# File 'lib/Miyako/API/audio.rb', line 487 def play(vol = nil, loops = 1, time = nil) return false if $not_use_audio if (@@playings.length == @@channels && !@@playings.include?(self)) sorted = @@playings.sort{|a,b| a.priority <=> b.priority} sorted[0].stop elsif @@playings.include?(self) self.stop end if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) set_volume(vol) end if time raise MiyakoValueError.over_range(time, 1, nil) unless time > 0 end raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 @now_loops = loops ? loops : @loops @loop_cnt = 1 lp = @now_loops == -1 ? -1 : @now_loops - 1 @channel = time ? SDL::Mixer.play_channel_timed(-1, @wave, lp, time) : SDL::Mixer.play_channel(-1, @wave, lp) @@playings << self if block_given? yield self SDL::Mixer.halt(@channel) end SE.update return true end |
#playing? ⇒ Boolean
効果音が鳴っているかを示すフラグ
- 返却値
-
効果音が鳴っているときはtrue、鳴っていないときはfalseを返す
518 519 520 521 |
# File 'lib/Miyako/API/audio.rb', line 518 def return false if $not_use_audio return @channel != -1 ? (SDL::Mixer.play?(@channel) && self.in_the_loop?) || self.fade_out? : false end |
#playing_without_loop? ⇒ Boolean
:nodoc:
523 524 525 526 |
# File 'lib/Miyako/API/audio.rb', line 523 def #:nodoc: return false if $not_use_audio return @channel != -1 ? SDL::Mixer.play?(@channel) : false end |
#set_volume(v) ⇒ Object Also known as: setVolume
効果音の大きさを設定する
- v
-
音の大きさ。0から255までの整数で示す。
- 返却値
-
自分自身を返す
622 623 624 625 626 627 |
# File 'lib/Miyako/API/audio.rb', line 622 def set_volume(v) return self if $not_use_audio raise MiyakoValueError.over_range(v, 0, 255) unless (0..255).cover?(v) @wave.set_volume(v) return self end |
#start(vol = nil, loops = 1, time = nil) ⇒ Object
効果音を鳴らす
音の大きさ・繰り返し回数・演奏時間を指定可能
- vol
-
音の大きさ(省略可能)。0〜255の整数を設定する。nilを渡したときは音の大きさを変更しない。
- loops
-
演奏の繰り返し回数を指定する。-1のときは無限に繰り返す。省略時は1を渡す。
- time
-
演奏時間。ミリ秒を整数で指定する。省略時は最後まで演奏する。
- 返却値
-
再生に成功したときはtrue、失敗したときはfalseを返す
468 469 470 471 472 473 474 475 476 477 |
# File 'lib/Miyako/API/audio.rb', line 468 def start(vol = nil, loops = 1, time = nil) if vol raise MiyakoValueError.over_range(vol, 0, 255) unless (0..255).cover?(vol) end if time raise MiyakoValueError.over_range(time, 1, nil) unless time > 0 end raise MiyakoValueError.over_range(loops, -1, nil) unless loops >= -1 return self.play(vol, loops, time) end |
#stop(msec = nil) ⇒ Object
効果音を停止する
- msec
-
停止する時間をミリ秒で指定(msecミリ秒後に停止)。nilを渡すとすぐに停止する。省略時はnilを渡す。
- 返却値
-
自分自身を返す
531 532 533 534 535 536 537 538 539 540 541 542 543 544 |
# File 'lib/Miyako/API/audio.rb', line 531 def stop(msec = nil) return self if $not_use_audio return self if !@@playings.include?(self) if msec raise MiyakoValueError.over_range(msec, 1, nil) unless msec > 0 end return self if @channel == -1 return self unless SDL::Mixer.play?(@channel) msec ? SDL::Mixer.expire(@channel, msec) : SDL::Mixer.halt(@channel) @loop_cnt = @now_loops + 1 @@playings.delete(self) @channe = -1 return self end |