今回はGodotにおけるオーディオ再生の基本について書きます。
オーディオ再生までの流れ
まずはGodot Engineにおけるオーディオ再生までの流れについて確認しておきます。
DAWなどのサウンド作成ツールでオーディオデータを作成します。そしてそれをGodotでインポートして AudioStream というリソースで各種設定を行います。そのリソースを AudioStreamPlayerで読み込んで再生や停止を行う、というのが基本的な流れです。
Godot4.3では、インタラクティブミュージックの機能が採用されて特殊なリソースを作ることができるようになりましたが、それは別の記事で紹介したいと思います。
読み込み可能なサウンドフォーマット
Godot Engineでは、WAV, MP3, OGG の3つのフォーマットを扱うことができます。 それぞれのフォーマットごとの概要は以下のとおりです。
フォーマット | 概要 |
---|---|
WAV | 汎用性が高くインポート設定が豊富。 SE (効果音) 向き。 非圧縮なのでファイルサイズが大きい |
MP3, OGG | BGM用のインポート設定がある。 BGM向きでファイルサイズが小さい |
個人的にはBGM, SE含めて "MP3" が良いかなと思います。理由としてはファイルサイズが小さく、macOSのみですが Finder上でSPACEキーでプレビューができます。 また昔は MP3には著作権料の問題があり OGGが推奨されていましたが、今ではその権利も失効しています。
ただ MP3は古いフォーマットであり、同ビットレートではOGGのほうが音質が良いため、OGGが好まれることもあります。
インポート設定
オーディオデータをプロジェクトに追加するとファイルシステムに表示されますが、インポート設定は「シーン」タブの隣にある「インポート」タブをクリックします。
なお MP3とOGGはリソースをダブルクリックで別ウィンドウで高度な設定が表示されます。
高度な設定画面はここからも表示できます。
どちらで設定を行うにしても設定を反映するには「再インポート」ボタンをクリックする必要があります。
WAVのインポート設定
WAVはインポート設定が豊富に用意されています。
カテゴリ | 項目 | 説明 |
---|---|---|
Force (強制変換設定) |
8ビット化 | 音質を落としてファイルサイズを削減 |
モノラル化 | 左右チャネルを合成してモノラル化 | |
最大レート適用 | 指定レートに抑える (不要な高周波をカットして軽量化) |
|
編集 (エディット処理) |
前後のトリム | 無音部分の削除 |
ノーマライズ | 音量を一定値に調整 | |
ループモード | ・Detect From WAV(埋め込みループ情報を使用) ・Disabled(無効) ・Forward(順再生ループ) ・Ping-Pong(往復ループ) ・Backward(逆再生ループ) |
|
ループ開始/終了 | 数値で位置を指定可能 | |
圧縮 | ・PCM (Uncompressed):非圧縮、高音質、大容量 ・IMA ADPCM:軽量、やや劣化 ・Quite OK Audio (QOA):比較的新しい圧縮方式、品質とサイズのバランス |
MP3, OGGのインポート設定
MP3, OGGは BGM用のインポート設定が用意されています。
カテゴリ | 項目 | 説明 |
---|---|---|
ループ | ON/OFF | ループの有効化。 ONにするとオーディオの終端で先頭に戻ります |
ループオフセット | ループ開始位置を秒単位で指定 | |
再生設定 | BPM | ビート情報に必要なテンポを設定 |
ビート数 | ループ再生に必要なビート数を設定。 "0" を指定するとオーディオの長さから自動で計算 |
|
1小節あたりの拍数 | ループ再生やインタラクティブミュージックで使われます |
基本的にBGMのループに関する設定です。ループがうまくつながらない場合は、ここの設定を正しく行う必要があります。 2dgames.jp なおループオフセットを例えばイントロの終わりに設定することで、区間リピートが可能です。 詳しくは以下の記事に書いています。 2dgames.jp
AudioStreamPlayerについて
AudioStreamPlayerには2Dと3Dが存在するので、ゲームジャンルに合わせて適切に選びます。
3Dゲームでの3D空間で発生するサウンドは AudioStreamPlayer3D を使用して、それ以外は基本的に AudioStreamPlayer2D で良いと思います。例えば3DゲームであってもUI操作のSEは2Dを使うなどですね。
使い方としては、まずはシーンに配置します。
そしてインスペクターから Streamの <空> をクリックして「クイックロード」を選択。
インポートしたオーディオデータを選択。
後は "Autoplay" を ONにすると、シーン開始時に自動で再生されます。
任意のタイミングで再生したい場合は GDScriptで play() を呼び出します。
func _ready() -> void: # サウンドを再生. $AudioStreamPlayer2D.play()
なおSEなど多数のオーディオデータがある場合は、あらかじめ確保した AudioStreamPlayer のインスタンスを使いまわして再生すると良いです。 動的にサウンドをロードする方法は以下のページにまとめています。 2dgames.jp