1
Fork 0
mirror of https://github.com/Steffo99/looping-for-loops.git synced 2025-02-16 17:13:59 +00:00

❇️ Conductor: add support for beat submultiples

This commit is contained in:
Steffo 2020-10-03 03:46:52 +02:00
parent 5f9f5bea4e
commit 538d21f36d
2 changed files with 26 additions and 22 deletions

View file

@ -2,10 +2,6 @@
[ext_resource path="res://Scripts/Conductor.gd" type="Script" id=1] [ext_resource path="res://Scripts/Conductor.gd" type="Script" id=1]
[node name="Conductor" type="Node"] [node name="Conductor" type="Node"]
script = ExtResource( 1 ) script = ExtResource( 1 )

View file

@ -11,16 +11,23 @@ export(float, 0, 1000000) var song_offset: float = 0
# The time the song started playing at # The time the song started playing at
var start_time: int var start_time: int
# The time of the last beat # Song beats signals
var last_beat: int signal quarter_beat
signal half_beat
# A song beat
signal beat signal beat
signal four_beats
signal two_beats
# The time of the last quarter_beat
var last_qb: int
# The count of quarter_beats so far
var count_qb: int = 0
# Calculate the microseconds per beat # Calculate the microseconds per beat
func usec_per_beat(): func usec_per_quarter_beat():
return 60000000 / song_bpm return 60000000 / (song_bpm * 4)
# Returns microseconds since the song start # Returns microseconds since the song start
@ -37,24 +44,25 @@ func corrected_time():
# Start playing the song # Start playing the song
func play(): func play():
start_time = OS.get_ticks_usec() start_time = OS.get_ticks_usec()
count_qb = 0
$Music.play() $Music.play()
# Signal that a beat has happened
func beat():
pass
func _ready(): func _ready():
play() play()
func _process(delta): func _process(delta):
var time = corrected_time() var time = corrected_time()
if time - last_beat >= usec_per_beat(): if time - last_qb >= usec_per_quarter_beat():
emit_signal("beat") emit_signal("quarter_beat")
last_beat = time if count_qb % 2 == 0:
emit_signal("half_beat")
if count_qb % 4 == 0:
func _on_Conductor_beat(): emit_signal("beat")
print("Beat! %f" % song_time()) if count_qb % 8 == 0:
emit_signal("two_beats")
if count_qb % 16 == 0:
emit_signal("four_beats")
last_qb = time
count_qb += 1