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

作成: 2026-02-08最終更新: 2026-07-08

GodotのAudioBusにリバーブ・コンプレッサー・EQなどのエフェクトを適用し、音響空間を作り込む方法を解説。3大エフェクトの役割、処理順序(チェーン)、洞窟に入ったら残響を動的にかける実装、ユースケース別設定まで、コードと図で学びます。

BGMや効果音を鳴らせるようになると、次はこんな欲が出てきます。「洞窟に入ったら音を反響させたい」「爆発音は大きいのに足音が小さすぎて聞こえない」「通信機ごしのラジオみたいな声にしたい」——こうした 音の"質感"づくり を担うのが、Audio Busにかける エフェクト です。

エフェクトはバスに追加すると、 そのバスを通る全ての音にまとめて 効果がかかります。この記事では、オーディオ管理の基礎 で作ったバス構成を土台に、リバーブ・コンプレッサー・EQといった主役エフェクトの使い方から、処理順序、そして「洞窟に入ったら残響を動的にかける」実装までを組み立てます。

音の質感を空間ごとに作り込むサウンドデザインのイメージ。すっきりした音波がエフェクトラックのツマミを通って厚みのある音波になる

この記事でわかること

  • エフェクトで 同じ音源が空間ごとに変わる 仕組み
  • 定番3エフェクト—— Reverb(残響)・Compressor(音量差を均す)・EQ(周波数調整)
  • エフェクトの 処理順序(チェーン) が結果を変えること
  • 洞窟に入ったら残響をかける 動的制御(add_bus_effectis_instance_of + Tween)
  • シチュエーション別の 設定リファレンス

Sponsored

エフェクトでできること

エフェクトの本質は、 「同じ音源を、置かれた空間にふさわしい聞こえ方に変える」 ことです。同じ足音のサンプル1つでも、洞窟なら反響し、水中ならこもり、屋外ならすっきり抜ける——その差を作るのがエフェクトです。

同じスピーカーの音が、洞窟(残響)・水中(こもる)・屋外(すっきり)の3つの空間で違って聞こえることを示した図

しかも、これを 音源1つ1つに設定するのではなく、バスにまとめてかける のがGodot流です。「SFXバスにリバーブを1つ」置けば、そのバスを通る全効果音が一斉に反響します。だからこそ、まず バスを用途別に分けておく(BGM / SFX / Voice / Ambient)ことが、エフェクト活用の前提になります。

定番の3エフェクト:Reverb・Compressor・EQ

数あるエフェクトのうち、まず押さえたいのはこの3つです。役割がはっきり違うので、順に見ていきます。

AudioEffectReverb(残響で空間を作る)

洞窟のエコー、大聖堂の荘厳な響き——空間の広さや材質を音で表す定番エフェクトです。要は「音がどれだけ長く反射して残るか」を作ります。

room_sizeが小さい小部屋では反射が短くすぐ収まり、大きい大空間では反射が長く尾を引く様子を対比したリバーブの図
プロパティ説明目安
room_size空間の広さ(残響の長さ)0.2(小部屋)〜 0.9(大聖堂)
damping高音の減衰(丸さ)0.3〜0.8
wetエフェクト音の混ざり具合0.1〜0.5
dry原音の混ざり具合0.5〜1.0

とくに wet が「効き具合」のつまみです。後述する動的制御では、この wet を動かして残響を出したり引っ込めたりします。

AudioEffectCompressor(音量差を均す)

「爆発音は爆音なのに、足音は小さすぎて聞こえない」——ゲームでよくある音量差の悩みを解決するのがコンプレッサーです。 大きい音を抑え、相対的に小さい音を持ち上げて 、粒をそろえます。

コンプレッサーをかける前は爆発と足音の音量差が大きく、かけた後は音量が揃う様子を対比した図
プロパティ説明目安
threshold圧縮が始まる音量-20〜-10 dB
ratio圧縮の強さ2:1〜4:1
attack_us反応の速さ5000〜20000 μs
gain圧縮後の底上げ0〜6 dB

SFXバスに軽くかけると効果音全体が聞き取りやすくなり、Masterバスにかけると全体の音圧を上げられます。

AudioEffectEQ(周波数バランスを整える)

低音・中音・高音といった 周波数帯域ごとに音量を調整 するエフェクトです。低音を足して迫力を出す、高音をカットして水中のこもった音にする、といった加工ができます。AudioEffectEQ6 / EQ10 / EQ21 があり、数字はバンド(つまみ)の数です。

低音・中音・高音の3つのフェーダーのうち高音だけを下げると水中のこもった音になることを示すEQの図
# EQ10で低音を強調する例(バンド0=31Hz … バンド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
# 水中風にするなら逆に、高音側のバンドをマイナスに下げる
Sponsored

その他のよく使うエフェクト

3大エフェクト以外にも、質感づくりに効くものが揃っています。

エフェクト用途主なプロパティ
AudioEffectDelayエコー・山びこtap1_delay_ms, feedback_level_db
AudioEffectChorus音に厚み・広がりvoice_count, voice_depth_ms
AudioEffectLimiter音割れ防止(天井を決める)ceiling_db
AudioEffectDistortion歪み・ラジオ風mode, drive, pre_gain

AudioEffectDistortionMODE_OVERDRIVE で軽くかけ、EQで中音域だけ残すと、通信機ごしの声が作れます。リミッターは「これ以上大きくしない天井」を決めるもので、Masterバスの最後に置いて音割れを防ぐのが定番です。

エフェクトの処理順序(チェーン)

エフェクトは1つだけでなく、バスに複数を重ねられます。このとき重要なのが 順序 です。バス内のエフェクトは 上から順に直列で処理 されるため、並べ方を変えると結果が変わります。

EQ→Compressor→Reverb→Limiterの順に音が直列で処理されるパイプライン図。上から順に処理され、順序で結果が変わる

とくに Masterバス の基本形は次の順です。

  1. EQ :まず全体の周波数バランスを整える
  2. Compressor :音量を均一化する
  3. Limiter :最後に天井を決めて音割れを防ぐ(ceiling_db-0.5 程度)

順序の勘どころは「 整えてから → 均して → 最後にフタ 」。例えばリバーブをコンプの前に置くと残響まで潰れてしまうので、空間系(Reverb)は音量系(Compressor)の後に置くのが自然です。

tips: エフェクトはかけるほどCPU負荷が増えます。「バスにまとめて1つ」で済むなら、音源ごとに個別にかけない。必要最小限に留めるのが軽さのコツです。

Sponsored

実践:洞窟に入ったら残響を動的にかける

エフェクトはエディタで静的に設定するだけでなく、 ゲーム中に付け外し・変化 させられます。ここでは定番の演出——プレイヤーが洞窟エリアに入ったらSFXに残響をかけ、出たら戻す——を組んでみます。ダンジョンRPGの洞窟、ホラーの地下室、メトロイドヴァニアの水没エリアなど、応用範囲の広い実装です。

プレイヤーが屋外から洞窟へ歩いて入ると、wetの値をTweenでじわっと上げて残響を強めていく様子を示した図

エリアの出入りは Area2Dbody_entered / body_exited で検知し、そこから次の関数を呼びます。

# 洞窟に入ったらSFXバスにリバーブを追加
func enter_cave() -> void:
    var sfx_idx := AudioServer.get_bus_index("SFX")
    var reverb := AudioEffectReverb.new()
    reverb.room_size = 0.8
    reverb.wet = 0.0                              # まず0から。この後Tweenで上げる
    AudioServer.add_bus_effect(sfx_idx, reverb)   # バスの末尾に追加
    transition_wet(0.3, 1.0)                       # 1秒かけて残響を効かせる

# 洞窟を出たらリバーブだけを取り除く
func exit_cave() -> void:
    var sfx_idx := AudioServer.get_bus_index("SFX")
    remove_effect_by_type(sfx_idx, AudioEffectReverb)

# wetをTweenで滑らかに変える(急に残響が付くと不自然)
func transition_wet(target: float, duration: float) -> void:
    var sfx_idx := AudioServer.get_bus_index("SFX")
    var reverb := find_effect_by_type(sfx_idx, AudioEffectReverb)
    if reverb:
        create_tween().tween_property(reverb, "wet", target, duration)

# 指定した型のエフェクトを後ろから探す(indexハードコードを避ける)
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)
        # is_instance_of で「変数に入れた型」と照合(is演算子は型リテラルしか取れない)
        if is_instance_of(effect, effect_type):
            return effect
    return null

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 is_instance_of(AudioServer.get_bus_effect(bus_idx, i), effect_type):
            AudioServer.remove_bus_effect(bus_idx, i)
            return

ポイントは2つです。

  • 消すときは「型で探す」remove_bus_effect(idx, 番号) で番号を直書きすると、他のエフェクトが後から足された瞬間にズレて、別のエフェクトを消してしまいます。is_instance_of() で目的の型(AudioEffectReverb)を探して消すのが安全です。 is 演算子は型リテラルしか受け取れない ので、型を変数で渡すこの用途では is_instance_of() を使います。
  • 切り替えは Tween でじわっとwet をいきなり 0.3 にすると、境界をまたいだ瞬間にブワッと残響が付いて不自然です。1秒ほどかけて上げると、洞窟に「入っていく」感覚が出ます。
Sponsored

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

「このシーンにはどのエフェクト?」と迷ったときのリファレンスです。まずはこの値から始めて、耳で微調整してください。

シチュエーション使うエフェクト設定のポイント
洞窟・地下Reverbroom_size: 0.8 / wet: 0.3 / damping: 0.4
水中EQ + Reverb高音域(4kHz以上)を大きく下げ、リバーブは強め
屋外・草原Reverb(軽め)room_size: 0.3 / wet: 0.1
ラジオ・通信機Distortion + EQMODE_OVERDRIVE、中音域だけ残す
ボス戦の迫力CompressorMasterバスで音圧を上げる
メニュー画面EQ + LimiterBGMを控えめにし、UI音を際立たせる

おまけ:先に知っておくと良いこと

  • バス音量のフェードは tween_methodwet のようなエフェクトのプロパティは tween_property で動かせますが、バス全体の音量(set_bus_volume_db)はメソッド経由なので、create_tween().tween_method(func(db): AudioServer.set_bus_volume_db(idx, db), 現在db, 目標db, 秒数) で滑らかにフェードできます。
  • ソロ/ミュートはデバッグの味方AudioServer.set_bus_solo(idx, true) で1バスだけ鳴らし、set_bus_mute() で消せます。「このリバーブ、本当に効いてる?」の切り分けに便利です。
  • バス構成は保存を忘れずに :作ったバスとエフェクトは audio_bus_layout.tres に保存し、プロジェクト設定で指定します(基礎編 参照)。
  • 空間の音は3Dオーディオへ :距離で減衰する足音や、位置で変わる環境音は 3Dオーディオと空間音響 の領域です。エリアで曲調を変える演出は アダプティブミュージック が入口になります。

まとめ

  • エフェクトはバスにかける :そのバスを通る全ての音に一括適用できる
  • 3大エフェクトReverb(空間の残響)・Compressor(音量差を均す)・EQ(周波数バランス)
  • 処理順序 は「整えて → 均して → フタ」= EQ → Compressor → Limiter が基本
  • 動的制御add_bus_effect() で付け外し、消すときは is_instance_of() で型を探し、wetTween でじわっと変える

まずはSFXバスにリバーブを1つ足して、room_sizewet をいじってみてください。効果音全体がぐっと「その場所らしく」なるはずです。そこから洞窟の動的リバーブ、水中のEQ、と足していけば、ゲームの世界がぐっと立体的になります。

さらに学ぶために