batrix/scripts/audio/music.gd

66 lines
1.5 KiB
GDScript

extends AudioStreamPlayer
signal track_started
var bpm: float = 100
var bar_beats: float = 4
var beat_length: float
var bar_length: float
var bpm_factor: float
var audio_delta: float
var track_time: float
var bar_time: float
var default_stream := preload("res://assets/music/test_track.mp3")
func _init() -> void:
process_mode = PROCESS_MODE_ALWAYS
process_priority = -100
process_physics_priority = -100
func _ready() -> void:
stream = default_stream
_play_track()
bus = "Music"
func _process(_delta: float) -> void:
var time := get_playback_position() + AudioServer.get_time_since_last_mix()
time -= AudioServer.get_output_latency()
audio_delta = time - track_time
track_time = time
bar_time = wrapf(track_time, 0, bar_length)
Debugger.text("bpm", bpm)
Debugger.text("bar_beats", bar_beats)
Debugger.text("beat_length", beat_length)
Debugger.text("bar_length", bar_length)
Debugger.text("bpm_factor", bpm_factor)
Debugger.text("track_time", track_time)
Debugger.text("bar_time", bar_time)
Debugger.text("audio_delta", audio_delta)
func _play_track() -> void:
play()
_get_bpm_info()
track_started.emit()
func _get_bpm_info() -> void:
if stream is AudioStreamMP3:
var steam_file := stream as AudioStreamMP3
bpm = steam_file.bpm
bar_beats = steam_file.bar_beats
if stream is AudioStreamOggVorbis:
var steam_file := stream as AudioStreamOggVorbis
bpm = steam_file.bpm
bar_beats = steam_file.bar_beats
beat_length = 60 / bpm
bar_length = beat_length * bar_beats
bpm_factor = bpm / 100