$AudioStreamPlayer.play()
queue_free()
The queue_free() deletes the node, including the AudioStreamPlayer, before the sound has time to play.
Connect the AudioStreamPlayer's "finished" signal to a handler function, and move the queue_free() there:
func _on_AudioStreamPlayer_finished() -> void:
queue_free()
I learned this the hard way. :smile: