This video covers all aspects of audio using the Godot 3 game engine. We cover how to play audio using an AudioStreamPlayer, then look at how to create one dynamically. We then look in-depth at how audio buses work, how to create special effects. We also look at how to perform positional audio and how to limit its playback using Area2D. After this tutorial, you should know everything you need to be effective with audio in Godot.
The Video
Assets and Code Samples
DynamicAudio.gd
extends Node
func _ready():
var player = AudioStreamPlayer.new()
self.add_child(player)
player.stream = load("res://belch.wav")
player.play()
SpritePositionalAudio.gd
extends Sprite
func _ready():
get_viewport().audio_listener_enable_2d = true
$AudioStreamPlayer2D.play()
func _process(delta):
if self.position.x > 0 - self.texture.get_width():
move_local_x(-1)
else:
self.position.x = get_viewport().get_visible_rect().size.x
OptionButton.gd
extends OptionButton
var files = []
func _ready():
var player = get_tree().get_root().get_node("Node/AudioStreamPlayer")
var dir = Directory.new()
if dir.open("res://") == OK:
dir.list_dir_begin()
var file = dir.get_next()
while (file != ""):
if file.ends_with("wav") or file.ends_with("ogg"):
files.append(file)
file = dir.get_next()
for i in range(files.size()):
self.add_item(files[i],i)
player.stream = load("res://" + files[0])
func _on_OptionButton_item_selected(ID):
if files.size() > 0:
var player = get_tree().get_root().get_node("Node/AudioStreamPlayer")
player.stream = load("res://" + files[ID])
PlayButton.gd
extends Button
var player
func _ready():
player = get_tree().get_root().get_node("Node/AudioStreamPlayer")
func _on_PlayButton_pressed():
if get_node("/root/Node/PanelContainer/VBoxContainer/LoopContainer/CheckBoxLoop").pressed == true:
setLoopMode(player.stream, 1)
else:
setLoopMode(player.stream, 0)
print("Playing sound")
player.play()
func setLoopMode(stream,loop):
if(stream is AudioStreamOGGVorbis):
stream.loop = bool(loop)
else: #Its a wave
stream.loop_mode = loop
func _on_StopButton_pressed():
player.stop()
