Godot入門:AudioStreamPlayer2Dの使い方と活用法

はじめに

2Dゲーム開発において、効果音やBGMを「ゲーム空間上の位置」から再生したいことがあります。例えば、敵の爆発音は敵の位置から、キャラクターの足音は歩いている位置から聞こえるべきですよね。このような「空間的な音響効果」を実現するのが AudioStreamPlayer2D です。

この記事では、AudioStreamPlayer2Dの基本的な使い方から、距離に応じた音量変化、バス制御まで、実践的なテクニックを解説します。

AudioStreamPlayer2Dとは?

AudioStreamPlayer2D は、2D空間上の特定の位置から音を再生するノードです。プレイヤーキャラクターとの距離に応じて自動的に音量が変化し、パンニング(左右の音量バランス)も調整されます。

例えるなら、リアルな映画館の音響。舞台の右側で音がしたら、右スピーカーから大きく、左スピーカーから小さく聞こえる—それが AudioStreamPlayer2D です。

継承ツリー:

AudioStreamPlayer2D → Node2D → Node → Object

このノードを使うべき場面

使うべき場面

  • 効果音の空間配置:足音、ジャンプ音、着地音など、キャラクターの動作音
  • 環境音の表現:風の音、水音、機械音など、シーンに立体感を与える音
  • 敵や障害物の音:敵の攻撃音、爆発、罠の音など
  • NPC会話音:複数のNPCがいる場面で、話者の位置から音を出す
  • パーティクルシステムと組み合わせた演出:爆発エフェクトと同時に爆発音を再生

使わない場面

  • BGM再生:背景音楽は位置に関係なく常に同じ音量で聞こえるべき(AudioStreamPlayer を使用)
  • UI音(決定音、キャンセル音):画面上の固定位置の音(AudioStreamPlayer を使用)

主なプロパティと機能

プロパティ 説明
stream AudioStream 再生するオーディオファイル(.ogg, .mp3, .wavなど)
playing bool 現在再生中かどうか
volume_db float 基本音量(デシベル単位。0dB=元の音量、-80dB=ほぼ無音)
pitch_scale float 再生速度・ピッチ(1.0=標準、2.0=2倍速で高音、0.5=半速で低音)
max_distance float この距離以上離れると音が聞こえなくなる
attenuation float 距離による減衰の強さ(値が大きいほど遠いと急激に小さくなる)
bus StringName 出力先オーディオバス(”Master”や”SFX”など)
area_mask int どのエリアマスクのリスナーに聞こえるか制御

基本的な使用例1:効果音の再生


extends Node2D

@onready var footstep_sound = $AudioStreamPlayer2D

func _ready():
    # 足音を最大10メートル離れたら聞こえなくなるように設定
    footstep_sound.max_distance = 1000.0  # ゲーム単位
    footstep_sound.attenuation = 1.0

func play_footstep():
    # キャラクターが足音を出す
    footstep_sound.play()

func _process(delta):
    # ノードの位置が自動的にリスナーに対する距離計算に使われる
    pass

動的な音量調整例2:敵の攻撃音で距離反映


extends AudioStreamPlayer2D

func play_attack_sound():
    volume_db = 0  # 基本音量に設定
    play()

# リスナー(プレイヤー)との距離を手動で計算する場合
func _process(delta):
    var listener_pos = get_tree().get_first_child_in_group("player").global_position
    var distance = global_position.distance_to(listener_pos)

    # 距離に応じたカスタム音量制御
    if distance > max_distance:
        stop()
    else:
        var volume_ratio = 1.0 - (distance / max_distance)
        volume_db = linear2db(volume_ratio)




AudioStreamPlayer2Dの距離減衰グラフ
distance属性が大きいほど減衰が急峻になります

もっと使いこなす:カスタマイズできるパラメータ

パラメータ 推奨値の範囲 用途・解説
max_distance 500 ~ 5000 音が聞こえなくなる距離。屋外は大きく、室内は小さく
attenuation 1.0 ~ 3.0 1.0=穏やか、3.0=急激。リアリズムなら2.0付近
volume_db -80 ~ 0 -80dB近くで無音、0dBで元の音量。±6dBでおよそ2倍/半分
pitch_scale 0.8 ~ 1.5 ランダムに設定してバリエーション(1.0±0.1など)
pan -1.0 ~ 1.0 左(-1)~ 中央(0)~ 右(1)。自動パンニングなら触らない




AudioStreamPlayer vs AudioStreamPlayer2D
AudioStreamPlayer(左)は固定音量、AudioStreamPlayer2D(右)は距離で変化

まとめ

AudioStreamPlayer2D は、ゲームの音響表現に「奥行き感」をもたらす重要なノードです。適切な max_distance と attenuation を設定すれば、プレイヤーは自然な音空間を体験できます。

  • 位置ベースの音:足音、爆発音、敵の声など、ゲーム空間内の現象を音で表現
  • 距離減衰の自動化:max_distance と attenuation で物理的なリアリティを実現
  • オーディオバスとの連携:bus プロパティで全体的な音量制御が可能

次回は「GPUParticles2D」をお届けします。爆発、炎、雨などの美しいエフェクトをGPUの力で高速処理する方法を解説します!

シリーズ:Godot 4 ノード解説

  • 001: Node2D
  • 002: Sprite2D
  • 003: CollisionShape2D
  • 004: CharacterBody2D
  • 005: RigidBody2D
  • 006: Area2D
  • 007: Control
  • 008: Button
  • 009: Label
  • 010: TextEdit
  • 011: ItemList
  • 012: TabContainer
  • 013: Timer
  • 014: Tween
  • 015: Camera2D
  • 016: ParallaxBackground
  • 017: TileMap(旧)
  • 018: Path2D
  • 019: PathFollow2D
  • 020: RemoteTransform2D
  • 021: Marker2D
  • 022: Node
  • 023: Resource
  • 024: Script
  • 025: Signal
  • 026: Input
  • 027: Physics2DServer
  • 028: VisibleOnScreenNotifier2D
  • 029: RayCast2D
  • 030: ShapeCast2D
  • 031: PinJoint2D
  • 032: DistanceJoint2D
  • 033: HingeJoint2D
  • 034: SliderJoint2D
  • 035: ConeTwistJoint2D
  • 036: Generic6DOFJoint2D
  • 037: Polygon2D
  • 038: ColorRect
  • 039: NinePatchRect
  • 040: TextureRect
  • 041: StaticBody2D
  • 042: TileMapLayer
  • 043: AnimationPlayer
  • 044: AnimationTree
  • 045: AudioStreamPlayer
  • 046: AudioStreamPlayer2D
  • 047: GPUParticles2D
  • 048: CPUParticles2D
  • 049: Line2D
  • 050: CanvasLayer

この記事はGodot 4.xをもとに執筆しています。

コメント