13.サウンド
1.Audio モジュール
音楽や音の演奏は、Audio モジュールで行われています。
次の4種類が演奏可能で、種類によってメソッドを使い分けます。
演奏開始のメソッドは、どれも同じ引数のようですね。
xx_play(filename[, volume = 100[, pitch = 100]])
filename は、フォルダ名から指定します。
volume は、0〜100
pitch は、50〜150
第2引数も 80 で指定します。
次の4種類が演奏可能で、種類によってメソッドを使い分けます。
BGM (背景音楽) | 背景で流す音楽です。ループします。 |
BGS (背景音) | 雨や鳥の鳴き声などです。ループします。 |
ME (効果音楽) | 戦闘勝利など派手な演出音楽。BGMが一時停止します。 |
SE (効果音) | ちょっとした音。 |
演奏開始のメソッドは、どれも同じ引数のようですね。
xx_play(filename[, volume = 100[, pitch = 100]])
filename は、フォルダ名から指定します。
volume は、0〜100
pitch は、50〜150
Audio.se_play("Audio/SE/Cancel", 80)BGS、SEの音量は、デフォルトで 80 のようですので、効果音を鳴らす場合は、
第2引数も 80 で指定します。
2.RPG::AudioFile データ構造
RPG::BGM, RPG::BGS, RPG::ME, RPG::SEを使用する場合は、
ファイル名にフォルダ名を含めずに指定できます。
データベースで設定した音楽は、この機能を使用しています。
演奏自体は、Audio モジュールを使用して行っていますが、
その演奏に必要な情報を一まとめにして、管理しやすくしたものです。
また、最後(現在)に演奏した音楽を取得するとこも可能です。
ファイル名にフォルダ名を含めずに指定できます。
データベースで設定した音楽は、この機能を使用しています。
演奏自体は、Audio モジュールを使用して行っていますが、
その演奏に必要な情報を一まとめにして、管理しやすくしたものです。
また、最後(現在)に演奏した音楽を取得するとこも可能です。
# 現在のBGMを記憶 last_bgm = RPG::BGM.last # 新しいBGMを演奏 bgm = RPG::BGM.new("Scene1") bgm.play # 古いBGMに戻す last_bgm.play
3.Sound モジュール
こちらでは、データベースで設定された音を簡単に鳴らすためのメソッドが定義されています。
データベースで設定されたものは、配列で管理されているので、
そのまま使おうとすると、番号で指定する必要があり、わかりにくいためです。
$data_system.sounds[0].playとするよりSound.play_cursorとした方が、
カーソルの音を鳴らしているんだと、わかりますよね?
データベースで設定されたものは、配列で管理されているので、
そのまま使おうとすると、番号で指定する必要があり、わかりにくいためです。
$data_system.sounds[0].playとするよりSound.play_cursorとした方が、
カーソルの音を鳴らしているんだと、わかりますよね?
4.効果音を追加しよう
Sound モジュールに効果音を追加してみましょう。
効果音(SE)に関しては、Audioモジュールをそのまま使用しても問題ないと思います。
効果音(SE)に関しては、Audioモジュールをそのまま使用しても問題ないと思います。
# Sound モジュールへの追加定義 module Sound # 効果音 def self.play_se Audio.se_play("Audio/SE/SoundEffect", 80) end end # 効果音の演奏 Sound.play_seデフォルトと同じようにするには、次のような感じでしょうか?
# Sound モジュールへの追加定義 module Sound @@se = RPG::SE.new("SoundEffect", 80) def self.play_se @@se.play end end # 効果音の演奏 Sound.play_se
5.音楽を追加しよう
音楽を演奏するモジュールは用意されていないので、自分で作成しちゃいましょう。
BGSは、効果音に分類される気もしますが、こっちに入れてあげることにします。
シーン移動でBGMを変更する例です。
マップからの呼び出しなら、callメソッドを定義するでしょうか?
直接呼び出すタイプなら、次のようにするでしょうか?
サウンドの操作をする場合は、Audioモジュールを直接使用せずに、
RPG::AudioFile データ構造で作成されているデータクラスを使用するようにしましょう。
BGSは、効果音に分類される気もしますが、こっちに入れてあげることにします。
module Music # 音楽の内容を作成 @@bgm_scene8 = RPG::BGM.new("Scene8") # ほのぼの @@me_discovery = RPG::ME.new("Discovery") # 新発見! @@bgs_warning = RPG::BGS.new("Warning", 80) # 警報 # BGMを演奏 def self.play_scene8 @@bgm_scene8.play end # MEを演奏 def self.play_discovery @@me_discovery.play end # BGSを演奏 def self.play_warning @@bgs_warning.play end
シーン移動でBGMを変更する例です。
マップからの呼び出しなら、callメソッドを定義するでしょうか?
class Scene_Map < Scene_Base def call_newscene # マップで演奏していた BGM, BGS を記憶 $game_temp.map_bgm = RPG::BGM.last $game_temp.map_bgs = RPG::BGS.last # 演奏中の BGM, BGS を停止 RPG::BGM.stop RPG::BGS.stop # 新しいBGMを演奏 Music.play_scene8 # 予約を消す $game_temp.next_scene = nil # シーンを変更 $scene = Scene_New.new end endマップへ戻る時などシーン変更の際に、次のスクリプトを実行すると記憶した音楽の演奏を開始します。
$game_temp.map_bgm.play $game_temp.map_bgs.play他にも、$game_map.autoplayでマップに設定されている音楽の演奏を開始することもできます。
直接呼び出すタイプなら、次のようにするでしょうか?
class Scene_New < Scene_Base def initialize # 演奏中の BGM, BGS を記憶 @last_bgm = RPG::BGM.last @last_bgs = RPG::BGS.last # 演奏中の BGM, BGS を停止 RPG::BGM.stop RPG::BGS.stop # 新しいBGMを演奏 Music.play_scene8 end def return_scene # 演奏中の BGM を停止 RPG::BGM.stop # BGM, BGS を元に戻す @last_bgm.play @last_bgs.play # シーンを変更 $scene = Scene_Map.new end endこれらは、単なる一例にすぎませんので、どのようにされてもいいのですが、
サウンドの操作をする場合は、Audioモジュールを直接使用せずに、
RPG::AudioFile データ構造で作成されているデータクラスを使用するようにしましょう。