BGMや効果音を鳴らせるようになると、次はこんな欲が出てきます。「洞窟に入ったら音を反響させたい」「爆発音は大きいのに足音が小さすぎて聞こえない」「通信機ごしのラジオみたいな声にしたい」——こうした 音の"質感"づくり を担うのが、Audio Busにかける エフェクト です。
エフェクトはバスに追加すると、 そのバスを通る全ての音にまとめて 効果がかかります。この記事では、オーディオ管理の基礎 で作ったバス構成を土台に、リバーブ・コンプレッサー・EQといった主役エフェクトの使い方から、処理順序、そして「洞窟に入ったら残響を動的にかける」実装までを組み立てます。
この記事でわかること
- エフェクトで 同じ音源が空間ごとに変わる 仕組み
- 定番3エフェクト—— Reverb(残響)・Compressor(音量差を均す)・EQ(周波数調整)
- エフェクトの 処理順序(チェーン) が結果を変えること
- 洞窟に入ったら残響をかける 動的制御(
add_bus_effect+is_instance_of+ Tween)- シチュエーション別の 設定リファレンス
エフェクトでできること
エフェクトの本質は、 「同じ音源を、置かれた空間にふさわしい聞こえ方に変える」 ことです。同じ足音のサンプル1つでも、洞窟なら反響し、水中ならこもり、屋外ならすっきり抜ける——その差を作るのがエフェクトです。

しかも、これを 音源1つ1つに設定するのではなく、バスにまとめてかける のがGodot流です。「SFXバスにリバーブを1つ」置けば、そのバスを通る全効果音が一斉に反響します。だからこそ、まず バスを用途別に分けておく(BGM / SFX / Voice / Ambient)ことが、エフェ クト活用の前提になります。
定番の3エフェクト:Reverb・Compressor・EQ
数あるエフェクトのうち、まず押さえたいのはこの3つです。役割がはっきり違うので、順に見ていきます。
AudioEffectReverb(残響で空間を作る)
洞窟のエコー、大聖堂の荘厳な響き——空間の広さや材質を音で表す定番エフェクトです。要は「音がどれだけ長く反射して残るか」を作ります。

| プロパティ | 説明 | 目安 |
|---|---|---|
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 があり、数字はバンド(つまみ)の数です。

# 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
# 水中風にするなら逆に、高音側のバンドをマイナスに下げる
その他のよく使うエフェクト
3大エフェクト以外にも、質感づくりに効くものが揃っています。
| エフェクト | 用途 | 主なプロパティ |
|---|---|---|
AudioEffectDelay | エコー・山びこ | tap1_delay_ms, feedback_level_db |
AudioEffectChorus | 音に厚み・広がり | voice_count, voice_depth_ms |
AudioEffectLimiter | 音割れ防止(天井を決める) | ceiling_db |
AudioEffectDistortion | 歪み・ラジオ風 | mode, drive, pre_gain |
AudioEffectDistortion を MODE_OVERDRIVE で軽くかけ、EQで中音域だけ残すと、通信機ごしの声が作れます。リミッターは「これ以上大きくしない天井」を決めるもので、Masterバスの最後に置いて音割れを防ぐのが定番です。
エフェクトの処理順序(チェーン)
エフェクトは1つだけでなく、バスに複数を重ねられます。このとき重要なのが 順序 です。バス内のエフェクトは 上から順に直列で処理 されるため、並べ方を変えると結果が変わります。

とくに Masterバス の基本形は次の順です。
- EQ :まず全体の周波数バランスを整える
- Compressor :音量を均一化する
- Limiter :最後に天井を決めて音割れを防ぐ(
ceiling_dbを-0.5程度)
順序の勘どころは「 整えてから → 均して → 最後にフタ 」。例えばリバーブをコンプの前に置くと残響まで潰れてしまうので、空間系(Reverb)は音量系(Compressor)の後に置くのが自然です。
tips: エフェクトはかけるほどCPU負荷が増えます。「バスにまとめて1つ」で済むなら、音源ごとに個別にかけない。必要最小限に留めるのが軽さのコツです。
実践:洞窟に入ったら残響を動的にかける
エフェクトはエディタで静的に設定するだけでなく、 ゲーム中に付け外し・変化 させられます。ここでは定番の演出——プレイヤーが洞窟エリアに入ったらSFXに残響をかけ、出たら戻す——を組んでみます。ダンジョンRPGの洞窟、ホラーの地下室、メトロイドヴァニアの水没エリアなど、応用範囲の広い実装です。

エリアの出入りは Area2D の body_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秒ほどかけて上げると、洞窟に「入っていく」感覚が出ます。
ユースケース別エフェクト設定
「このシーンにはどのエフェクト?」と迷ったときのリファレンスです。まずはこの値から始めて、耳で微調整してください。
| シチュエーション | 使うエフェクト | 設定のポイント |
|---|---|---|
| 洞窟・地下 | Reverb | room_size: 0.8 / wet: 0.3 / damping: 0.4 |
| 水中 | EQ + Reverb | 高音域(4kHz以上)を大きく下げ、リバ ーブは強め |
| 屋外・草原 | Reverb(軽め) | room_size: 0.3 / wet: 0.1 |
| ラジオ・通信機 | Distortion + EQ | MODE_OVERDRIVE、中音域だけ残す |
| ボス戦の迫力 | Compressor | Masterバスで音圧を上げる |
| メニュー画面 | EQ + Limiter | BGMを控えめにし、UI音を際立たせる |
おまけ:先に知っておくと良いこと
- バス音量のフェードは
tween_method:wetのようなエフェクトのプロパティは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()で型を探し、wetは Tween でじわっと変える
まずはSFXバスにリバーブを1つ足して、room_size と wet をいじってみてください。効果音全体がぐっと「その場所らしく」なるはずです。そこから洞窟の動的リバーブ、水中のEQ、と足していけば、ゲームの世界がぐっと立体的になります。
さらに学ぶために
- オーディオ管理の基礎(AudioStreamPlayerとAudio Bus) ——本記事の前提となるバス構成とAudioManager
- Tweenで実現する滑らかなアニメーション ——
wetやバス音量を滑らかに変える - Area2D徹底解説 ——エリアの出入りを検知してエフェクトを切り替える
- 3Dオーディオと空間音響 ——距離減衰・位置で変わる音づくり
- アダプティブミュージック ——場面に応じてBGMを動的に変える
- Godot公式ドキュメント:Audio buses ——バスとエフェクトの一次情報