I have made a global soundtrack object to handle music and a function to swap tracks even time the player stops. I have a problem though. On testing by itself, the player works so far so good. But when I try to put it as an autoload and use it, I keep getting "Node not found (when direct referencing child)" and "null instances (if onready var referencing them)". Pretty sure this is a loading issues. My tracks are compressed down to OGG and are only loaded when they are queued to play and yet, this is happening whenever I try to actually insert it into my game. I have not found a lot of decent tutorials outside of "here's how to play a sound."
Here's the code - any best practices or optimization advice is appreciated as I am just learning the AudioStreamPlayer.
extends Node2D
onready var _calm = $Calm
onready var _pursuit = $Pursuit
onready var _hidden = $Hidden
onready var _escape = $Escape
onready var _scene = $Event
var _calmTrack = 0
var _chaseTrack = 0
const _calmTracks = [
"res://music/calm/Attic_Springs.ogg",
"res://music/calm/NoHome.ogg",
"res://music/calm/Seeking.ogg",
"res://music/calm/VoidSoul.ogg",
"res://music/calm/Wave.ogg"
]
const _pursuitLoops = [
"res://music/tense/hurt_loop1.ogg",
"res://music/tense/mono_loop2.ogg",
"res://music/tense/noesc_loop3.ogg",
"res://music/tense/reven_loop1.ogg",
"res://music/tense/run_loop.ogg"
]
const _hiddenLoops = [
"res://music/tense/hurt_loop2.ogg",
"res://music/tense/mono_loop1.ogg",
"res://music/tense/noesc_loop1.ogg",
"res://music/tense/reven_loop2.ogg",
"res://music/tense/run_loop2.ogg",
]
const _escapeShots = [
"res://music/tense/hurt_end.ogg",
"res://music/tense/mono_end.ogg",
"res://music/tense/noesc_end.ogg",
"res://music/tense/reven_end.ogg",
"res://music/tense/run_end.ogg"
]
const _sceneBGM = [
"res://music/calm/Doors.ogg",
"res://music/calm/Vessel.ogg",
"res://music/tense/springs_end.ogg"
]
## randomize numbers for song pulls, connect end shots back to regular music
func _ready():
var _out_ = $Timer.connect("timeout",self,"_initialize")
$Timer.start(5)
func _initialize():
_shuffle_bgm()
if Director._inPursuit == true:
_pursuit_music()
else:
_calm_music()
### play calm music
func _calm_music():
var _myCalm = load(_calmTracks[_calmTrack])
$Calm.stream = _myCalm
$Calm.play()
if Director._inPursuit:
$Calm.stop()
_pursuit_music()
if Director._inPursuit == false and $Calm.playing == false:
_shuffle_bgm()
_calm_music()
## play tense music
func _pursuit_music():
var _myChase = load(_pursuitLoops[_chaseTrack])
$Pursuit.stream = _myChase
$Pursuit.play()
if Director._playerIsHidden == true:
$Pursuit.stop()
_hidden_music()
## play suspense music
func _hidden_music():
var _myHidden = load(_hiddenLoops[_chaseTrack])
$Hidden.stream = _myHidden
$Hidden.play()
if Director._inPursuit == false:
$Hidden.stop()
_escape_music()
## play escape one-shot
func _escape_music():
var _myEsc = load(_escapeShots[_chaseTrack])
$Escape.stream = _myEsc
$Escape.play()
if $Escape.playing == false:
_shuffle_bgm()
_calm_music()
## rng function to change song pull
func _shuffle_bgm():
randomize()
_calmTrack = randi() % 4
_chaseTrack = randi() % 4