Godot3でサウンド再生
事前にAudioStreamPlayer にサウンドを割り当てて再生する
メリット
簡単
デメリット
サウンドの種類だけ AudioStreamPlayer Nodeを用意する必要があり、管理コストが大きい
https://gyazo.com/43229840a1680646a04d8335f92b2d4c
Stream にサウンドファイルを D&Dし、スクリプトで再生させる
code:sound_play_and_stop.py
func _on_PlayMusicBtn_button_up():
if $MusicPlayer.playing == false:
$MusicPlayer.play()
func _on_StopMusicBtn_button_up():
$MusicPlayer.stop()
動的にAudioStreamPlayer にサウンドを割り当てて再生する
メリット
サウンドが増えても AudioStreamPlayer Nodeを増やす必要が無い
デメリット
動的に指定したサウンドファイルが存在しない場合はランタイムエラーになる
https://gyazo.com/01de06b8965391e749ccbb39ecfd7ef6
事前にStreamを割り当てず、空の状態でボタンを押したら再生する
code:play_effect.py
var snd_effect_a = preload("res://Sound/EffectA.mp3")
var snd_effect_b = preload("res://Sound/EffectB.mp3")
var snd_effect_c = preload("res://Sound/EffectC.mp3")
func _play_sound(id):
$SoundEffectPlayer.stop()
match id:
"A":
$SoundEffectPlayer.stream = snd_effect_a
"B":
$SoundEffectPlayer.stream = snd_effect_b
"C":
$SoundEffectPlayer.stream = snd_effect_c
$SoundEffectPlayer.play()
func _on_PlayEffectABtn_button_up():
_play_sound("A")
func _on_PlayEffectBBtn_button_up():
_play_sound("B")
func _on_PlayEffectCBtn_button_up():
_play_sound("C")
参考記事:
https://www.youtube.com/watch?v=nIGJ6ImzSuI
BGMPlayerとSEPlayerを子ノードに持つAudioManagerのテンプレスクリプト
code:audio_manager.py
extends Node2D
onready var bgm_player = $BGMPlayer
onready var se_player = $SEPlayer
var bgm_xxx = preload("res://Sound/bgm_xxx.ogg")
var se_xxx = preload("res://Sound/se_xxx.ogg")
func _ready():
randomize()
func play_bgm(id:String) -> void:
if bgm_player.playing:
bgm_player.stop()
match id:
"bgm_xxx":
bgm_player.stream = bgm_xxx
bgm_player.play()
func play_se(id:String) -> void:
match id:
"se_xxx":
se_player.stream = se_xxx
se_player.play()
AudioPlayers配下に、同時に再生できるだけの AudioStreamPlayer ノードをぶら下げておく
1つだけだと、SEが1つしか再生されずに後勝ちされてしまうから
code:gd
extends Node
cosnt HURT = preload(サウンドファイルのパス)
# ... 省略
onready var audioPlayers = $AudioPlayers
func play_sound(sound):
for audioStreamPlayer in audioPlayers.get_children():
if not audioStreamPlayer.playing:
audioStreamPlayer.stream = sound
audioStreamPlayer.play()
break