【Godot】GodotのAudioBusエフェクトでサウンドデザイン【リバーブ・コンプレッサー・EQ】

作成: 2026-02-08

AudioBusにリバーブ、コンプレッサー、EQ、コーラスなどのエフェクトを適用し、ゲームの音響空間を作り込む方法を解説します。

概要

動作確認環境: Godot 4.3+

AudioBusにエフェクトを追加すると、そのバスを通る全ての音に一括で効果を適用できます。洞窟の残響、水中のこもった音、ラジオ風の加工など、エフェクトの組み合わせ次第でゲームの音響空間を自在に作り込めます。

本記事では、AudioBusのレイアウト設計からリバーブ・コンプレッサー・EQなど主要エフェクトの設定方法、GDScriptによる動的制御までを解説します。

AudioBusレイアウトの設計

エフェクトを適用する前に、まずはバスの整理から始めましょう。ここを雑に済ませると、後から「BGMだけにリバーブをかけたいのにSEにもかかってしまう」といった問題に悩まされます。

Godotのオーディオシステムでは、複数のバスを用途別に分けることで、後から一括でエフェクトをかけたり音量調整したりできるようになります。

推奨バス構成

Master(マスター出力)
├── BGM     … 音楽全般
├── SFX     … 効果音
├── Voice   … ボイス・ダイアログ
└── Ambient … 環境音

バスの作成手順

  1. エディタ下部の 「オーディオ」 タブを開く
  2. 「バスを追加」 をクリック
  3. バス名を設定(例: SFX
  4. SendMaster に設定(デフォルト)
  5. audio_bus_layout.tresとして保存

AudioServer APIの基本

バスのレイアウトが決まったら、GDScriptから制御する方法も押さえておきましょう。オプション画面での音量スライダーなど、プログラムから操作したい場面は多いです。

# バスインデックスの取得
var sfx_idx = AudioServer.get_bus_index("SFX")

# 音量の設定(デシベル単位)
AudioServer.set_bus_volume_db(sfx_idx, -6.0)

# ミュートの切り替え
AudioServer.set_bus_mute(sfx_idx, true)

# ソロ再生(デバッグ用)
AudioServer.set_bus_solo(sfx_idx, true)

音源をバスに割り当てる

バスレイアウトを設計しても、実際に音がそのバスを通らなければ意味がありません。AudioStreamPlayer(2D/3D含む)のbusプロパティで出力先バスを指定します。

# スクリプトからバスを指定
$AudioStreamPlayer.bus = "SFX"
$BGMPlayer.bus = "BGM"
$FootstepPlayer.bus = "SFX"

インスペクタの「Bus」プロパティからも設定できます。指定しない場合はMasterバスに出力されます。

主要エフェクトと設定

バスレイアウトが整ったところで、いよいよエフェクトの設定に進みましょう。Godotには音響空間を演出するためのエフェクトが複数用意されています。ここでは特に使用頻度の高いリバーブ、コンプレッサー、EQについて解説します。

AudioEffectReverb(リバーブ)

洞窟のエコーや大聖堂の荘厳な残響など、空間の広さや材質を音で表現したいときの定番エフェクトです。

プロパティ説明推奨範囲
room_size部屋の大きさ0.2(小部屋)〜 0.9(大聖堂)
damping高周波の減衰0.3〜0.8
wetエフェクトの混合比0.1〜0.5
dry原音の混合比0.5〜1.0
spreadステレオの広がり0.5〜1.0

AudioEffectCompressor(コンプレッサー)

「爆発音は大きいのに足音が小さすぎる」と感じたことはありませんか? コンプレッサーは音量の大小差を均一化してくれます。SEの音量を揃えたり、マスターバスの音圧を上げたりする際に使います。

プロパティ説明推奨値
threshold圧縮が始まる音量-20〜-10 dB
ratio圧縮比率2:1〜4:1
attack_us圧縮開始までの時間5000〜20000 μs
release_ms圧縮解除までの時間100〜300 ms
gain出力ゲイン0〜6 dB

AudioEffectEQ(イコライザー)

周波数帯域ごとの音量を調整するエフェクトです。低音を強調して迫力を出したり、高音をカットして水中の音を再現したりと、用途は幅広いです。6バンド、10バンド、21バンドから選択できます。

# EQ10のバンド構成
# 0: 31Hz, 1: 62Hz, 2: 125Hz, 3: 250Hz, 4: 500Hz
# 5: 1kHz, 6: 2kHz, 7: 4kHz, 8: 8kHz, 9: 16kHz

# 低音を強調
var eq = AudioEffectEQ10.new()
eq.set_band_gain_db(0, 6.0)   # 31Hz +6dB
eq.set_band_gain_db(1, 4.0)   # 62Hz +4dB
eq.set_band_gain_db(2, 2.0)   # 125Hz +2dB

その他のエフェクト

エフェクト用途主なプロパティ
AudioEffectDelayエコー・やまびこtap1_delay_ms, tap1_level_db, feedback_level_db
AudioEffectChorus音に厚みを追加voice_count, voice_rate_hz, voice_depth_ms
AudioEffectLimiter音割れ防止ceiling_db, threshold_db
AudioEffectDistortion歪み・ラジオ風mode, drive, pre_gain

エフェクトの推奨チェーン

個々のエフェクトがわかったところで、次はそれらをどの順番で組み合わせるかが重要になります。バス内のエフェクトは 上から順に処理 されるため、順序を間違えると意図しない音になりがちです。ここでは用途別の推奨構成を紹介します。

マスターバスの推奨構成

Master Bus
├── 1. AudioEffectEQ10      … 全体の周波数バランス調整
├── 2. AudioEffectCompressor … 音量の均一化
└── 3. AudioEffectLimiter    … 音割れ防止(ceiling: -0.5dB)

SFXバスの推奨構成

SFX Bus
├── 1. AudioEffectEQ6        … 不要な低音をカット
└── 2. AudioEffectCompressor  … SE同士の音量差を抑制

環境音バスの推奨構成

Ambient Bus
├── 1. AudioEffectReverb     … 空間の残響を付与
└── 2. AudioEffectChorus     … 自然な広がりを追加

tips: エフェクトを追加しすぎるとCPU負荷が増加します。必要最小限のエフェクトに留めましょう。

GDScriptによる動的制御

エディタでの静的な設定だけでなく、ゲームプレイ中にエフェクトを動的に変化させることもできます。洞窟に入ったらリバーブをかける、水中に潜ったら高音をカットする――こうした演出をスクリプトで実現してみましょう。

エフェクトの動的追加

以下の例では、プレイヤーが洞窟エリアに入ったときにSFXバスへリバーブを追加し、出たときに削除しています。

# SFXバスにリバーブを追加
func enter_cave():
    var sfx_idx = AudioServer.get_bus_index("SFX")
    var reverb = AudioEffectReverb.new()
    reverb.room_size = 0.8
    reverb.wet = 0.3
    reverb.damping = 0.5
    AudioServer.add_bus_effect(sfx_idx, reverb)

# リバーブを削除(型で検索して安全に削除)
func exit_cave():
    var sfx_idx = AudioServer.get_bus_index("SFX")
    remove_effect_by_type(sfx_idx, AudioEffectReverb)

# 指定した型のエフェクトをバスから検索して削除
func remove_effect_by_type(bus_idx: int, effect_type) -> void:
    for i in range(AudioServer.get_bus_effect_count(bus_idx) - 1, -1, -1):
        if AudioServer.get_bus_effect(bus_idx, i) is effect_type:
            AudioServer.remove_bus_effect(bus_idx, i)
            return

インデックスを直接指定して削除する方法(remove_bus_effect(idx, count - 1))は、他のエフェクトが後から追加された場合に意図しないエフェクトを削除するリスクがあります。上記のように型で検索して削除する方が安全です。

エフェクトパラメータのリアルタイム変更

エフェクトを追加/削除するだけでなく、パラメータを滑らかに変化させることもできます。Tweenと組み合わせると、屋外から洞窟に入るときの音響変化を自然に演出できます。

# リバーブのwet値をTweenで滑らかに変化
func transition_reverb(target_wet: float, duration: float = 1.0):
    var sfx_idx = AudioServer.get_bus_index("SFX")
    var reverb = find_effect_by_type(sfx_idx, AudioEffectReverb)
    if reverb:
        var tween = create_tween()
        tween.tween_property(reverb, "wet", target_wet, duration)

# 指定した型のエフェクトをバスから検索して取得
func find_effect_by_type(bus_idx: int, effect_type) -> AudioEffect:
    for i in range(AudioServer.get_bus_effect_count(bus_idx)):
        var effect = AudioServer.get_bus_effect(bus_idx, i)
        if effect is effect_type:
            return effect
    return null

バス音量のフェード制御

シーン遷移時のBGMフェードアウトや、ポーズ画面でのSFXミュートなど、バス単位での音量フェードも頻繁に使うテクニックです。

# バス音量をフェードイン/アウト
func fade_bus(bus_name: String, target_db: float, duration: float = 0.5):
    var idx = AudioServer.get_bus_index(bus_name)
    if idx == -1:
        return
    var current_db = AudioServer.get_bus_volume_db(idx)
    var tween = create_tween()
    tween.tween_method(
        func(db): AudioServer.set_bus_volume_db(idx, db),
        current_db, target_db, duration
    )

ユースケース別エフェクト設定

最後に、実際のゲーム制作でよく使われるシチュエーション別のエフェクト設定例をまとめました。「このシーンにはどんなエフェクトが合う?」と迷ったときのリファレンスとして活用してください。

シチュエーション使用エフェクト設定のポイント
洞窟・地下Reverbroom_size: 0.8, wet: 0.3, damping: 0.4
水中EQ + Reverb高音域をカット(4kHz以上を-12dB)、リバーブを強め
屋外・草原Reverb(軽め)room_size: 0.3, wet: 0.1
ラジオ・通信機Distortion + EQmode: OVERDRIVE, 中音域のみ残す
ボス戦Compressorマスターバスで音圧を上げる
メニュー画面EQ + LimiterBGMを控えめにし、UI音を際立たせる

まとめ

  • AudioBusにエフェクトを追加すると、そのバスを通る全ての音に一括で効果を適用できる
  • リバーブは空間表現、コンプレッサーは音量均一化、EQは周波数バランス調整に使う
  • エフェクトの処理順序はEQ → コンプレッサー → リバーブ → リミッターが基本
  • AudioServer.add_bus_effect()動的にエフェクトを追加・削除でき、シーンに応じた音響切り替えが可能
  • エフェクトの追加はCPU負荷に影響するため、必要最小限に留める

さらに学ぶために