【Godot】ボタンで効果音を鳴らす方法|AudioStreamPlayerとfinished
この記事について
UIのボタンを押したときに効果音を鳴らすには、音声ファイルをAudioStreamPlayerへ設定し、play()を呼びます。この記事では、再生中だけボタンを無効にし、再生が終わったら再び押せる小さな画面を作ります。
Godot 4.6.3のGDScriptを使い、エディターの項目名は英語表記で説明します。AudioStreamPlayerは位置によって聞こえ方を変えない音声再生用です。画面内の距離で音量を変えるAudioStreamPlayer2Dや3Dは使いません。
この記事でわかること
- WAVファイルを読み込み、Streamへ割り当てる方法
- ボタンからplay()を呼ぶ方法
- finishedシグナルで自然な再生終了を受け取る方法
基本手順
完成サンプルはこちらのGodotプロジェクトZIPから開けます。ZIPを展開し、Project ManagerのImportでproject.godotを選んでください。自分で新規作成する場合は、レンダラーをCompatibilityにして進めます。
手順1:短いWAVファイルを用意する
付属サンプルの09_audioフォルダーにあるui_click.wavを使います。本サンプル用に作成した0.45秒のオリジナル音声です。新しいプロジェクトで試す場合は、project.godotと同じフォルダーへこのファイルをコピーし、GodotのFileSystemドックにui_click.wavが表示されるまで待ってください。
FileSystemでui_click.wavを選び、Importタブを開きます。Loop ModeがDisabledになっていることを確認し、変更した場合はReimportを押します。ループする音声では、この記事の自然終了を待つ処理が終わりません。

手順2:ボタンとAudioStreamPlayerを追加する
Scene → New Scene → User InterfaceでControlを作り、SoundUIと名付けてmain.tscnへ保存します。SoundUIの子にVBoxContainerを置いてContentとし、Label2つとButtonを追加します。さらにSoundUI直下へAudioStreamPlayerを追加してClickSoundと名付けます。
SoundUI (Control) ├ Content (VBoxContainer) │ ├ TitleLabel (Label) │ ├ StatusLabel (Label) │ └ PlayButton (Button) └ ClickSound (AudioStreamPlayer)
ContentのLayout → TransformでPositionをX=40、Y=40、SizeのXを640にします。Separationは16、Font Sizeは24、PlayButtonのCustom Minimum SizeのYは48です。TitleLabelを「ボタンで効果音を鳴らす」、StatusLabelを「再生ボタンを押してください」、PlayButtonを「効果音を再生」にします。

手順3:音声ファイルをStreamへ設定する
ClickSoundを選びます。FileSystemのui_click.wavをInspectorのStream欄へドラッグしてください。Volume dBを-12、Pitch Scaleを1、BusをMasterにし、Autoplayはオフにします。Max Polyphonyは1のままです。
Volume dBは元の音に対する音量調整です。まずOSやスピーカーの音量を低めにして試してください。このサンプルでは、再生中の連打をコードで防ぎ、1つの音を最後まで再生します。

手順4:再生と終了のコードを書く
SoundUIにres://main.gdをAttach Scriptで付け、Templateを外して作成します。次の内容を入力してください。シグナルは_ready()で接続するため、Signalsタブで追加接続しません。
extends Control
@onready var sound: AudioStreamPlayer = $ClickSound
@onready var play_button: Button = $Content/PlayButton
@onready var status_label: Label = $Content/StatusLabel
var completed: int = 0
func _ready() -> void:
play_button.pressed.connect(_play_sound)
sound.finished.connect(_on_sound_finished)
func _play_sound() -> void:
if sound.stream == null:
status_label.text = "Streamに音声を設定してください"
return
play_button.disabled = true
status_label.text = "再生中..."
sound.play()
func _on_sound_finished() -> void:
completed += 1
status_label.text = "再生完了: %d 回" % completed
play_button.disabled = false
_play_sound()はStreamがあるか確かめ、ボタンを押せない状態にしてから再生します。_on_sound_finished()は音が最後まで再生されたときに呼ばれます。完了回数を更新し、Disabledをfalseへ戻します。

手順5:音と画面表示を確認する
保存してF6で実行します。「効果音を再生」を1回クリックすると、短い音が再生され、終了後に「再生完了: 1 回」と表示されます。もう一度押すと2回です。再生中はボタンが無効になり、終了後に押せる状態へ戻ります。
独立したウィンドウで試す場合は、保存後にProject → Quit to Project Listへ戻り、Project Managerでこのプロジェクトを選んでRunを押します。独立実行を終えるときは、その実行ウィンドウを閉じます。
実行画面のカウンターで確認できるのは再生終了の通知です。音が実際に聞こえるかは別に確認します。カウンターだけ増えて無音なら、Streamの設定とあわせてGodotのMasterバス、OSの出力先、ミュート状態を調べてください。

うまくいかないときの確認箇所
Streamに音声を設定してくださいと表示される
ClickSoundのStreamが空欄になっています。ファイルがFileSystemへ読み込まれているか確認し、ui_click.wavを割り当てます。ファイルを移動した直後に読み込みエラーが出ている場合は、Debuggerのパスも確認してください。
音が聞こえない
最初に再生完了の表示が増えるか確認します。増える場合は、ClickSoundのVolume dB、AudioパネルのMasterバスのミュート、OS音量と出力先を順に調べます。再生状態のログだけでスピーカーから音が出ているとは判断できません。
ボタンが無効のまま戻らない
WAVのLoop ModeがDisabledか、finishedを_on_sound_finishedへ接続しているか確認します。stop()による途中停止ではfinishedは出ません。停止ボタンを追加する場合は、stop()に加えてボタンのDisabledを戻す処理も書く必要があります。
音が途中で切れる、または勝手に鳴る
Autoplayがオンならシーンへ入った時に再生が始まります。別のコードからもplay()を呼んでいないか確認してください。Max Polyphonyが1のときに再びplay()を呼ぶと、古い再生が打ち切られます。この記事では、再生中にボタンを無効にして重ねて再生しない構成にしています。
まとめ
ボタンの効果音は、AudioStreamPlayerに音声を設定し、play()で再生するところから始められます。finishedで終了後の操作を戻すときは、ループ音とstop()による中断を区別してください。画面の再生状態と、出力機器から聞こえる音をそれぞれ確認しましょう。
サイトアイコン-2-150x150.png)