diff --git a/node_2d.tscn b/node_2d.tscn index 123d827..91ed2e1 100644 --- a/node_2d.tscn +++ b/node_2d.tscn @@ -9,46 +9,53 @@ script/source = "extends Node2D # https://docs.godotengine.org/en/stable/classes/class_inputeventmidi.html # https://docs.godotengine.org/en/stable/classes/class_%40globalscope.html#enum-globalscope-midimessage - # here, put the same values as in game config # for example here it's configured for: # spin 1: Ch 2 Note 10, so put 2 and 10 # spin 2: Ch 2 Note 9, so put 2 and 9 # jog: Ch 2 Note 8, so put 2 and 8 # beat: Ch 3 Note 8, so put 3 and 8 -var spin_channel_1: int = 2 -var spin_note_1: int = 10 - -var spin_channel_2: int = 2 -var spin_note_2: int = 9 - -var jog_channel: int = 2 -var jog_note: int = 8 - -var beat_channel: int = 3 -var beat_note: int = 8 -# end of config - - -# init values -var midi_beat: bool = false -var midi_jog: bool = false -var midi_turnleft: bool = false -var midi_turnright: bool = false +# invert_turn: true by default, false if your turntable is NOT inverted # if >0: print midi event to the console (1 for minimal logs, 2 for more logs) # if =0: the program acts normally const debug := 0 +# load config values +var spin_channel_1 = Config.spin_channel_1 +var spin_note_1 = Config.spin_note_1 +var spin_channel_2 = Config.spin_channel_2 +var spin_note_2 = Config.spin_note_2 +var jog_channel = Config.jog_channel +var jog_note = Config.jog_note +var beat_channel = Config.beat_channel +var beat_note = Config.beat_note +var is_inverted = Config.is_inverted + +# init control values +var midi_beat: bool = false +var midi_jog: bool = false +var midi_turnleft: bool = false +var midi_turnright: bool = false +var left: int = 1 +var right: int = 127 + # Called when the node enters the scene tree for the first time. func _ready(): - # fix midi values (the game adds one to the chanels) + # fix midi values (the game adds one to the channel number) spin_channel_1 -= 1 spin_channel_2 -= 1 jog_channel -= 1 beat_channel -= 1 + # handle inverted turntable (must invert left and right values) + if is_inverted: + left = 127 + right = 1 + print(\"inverted!\") + + # connect to the midi turntable OS.open_midi_inputs() print(OS.get_connected_midi_inputs()) @@ -60,12 +67,6 @@ func _unhandled_input(input_event): if input_event is InputEventMIDI: if debug > 0: _print_midi_info(input_event) - if input_event.channel == 2 and input_event.message == 9: - pass - - -func _input(input_event): - if input_event is InputEventMIDI: if input_event.channel == beat_channel and ((input_event.pitch == beat_note and input_event.velocity == 127) or input_event.controller_number == 10): midi_beat = true if input_event.channel == beat_channel and ((input_event.pitch == beat_note and input_event.velocity == 0) or input_event.controller_number == 9): @@ -74,9 +75,9 @@ func _input(input_event): midi_jog = true if input_event.channel == jog_channel and ((input_event.pitch == jog_note and input_event.velocity == 0) or input_event.controller_number == spin_note_2): midi_jog = false - if (input_event.channel == spin_channel_1 or input_event.channel == spin_channel_2) and input_event.controller_value == 127: + if (input_event.channel == spin_channel_1 or input_event.channel == spin_channel_2) and input_event.controller_value == left: midi_turnleft = true - if (input_event.channel == spin_channel_1 or input_event.channel == spin_channel_2) and input_event.controller_value == 1: + if (input_event.channel == spin_channel_1 or input_event.channel == spin_channel_2) and input_event.controller_value == right: midi_turnright = true @@ -114,6 +115,9 @@ func _process(_delta): # trigger the right controller print(\"turn right\") + # reset the turn values before the next cycle + # needed because it can't be turned to false in the _unhandled_input function + # because apparently there is no MIDI command sended for that .___. midi_turnleft = false midi_turnright = false " diff --git a/project.godot b/project.godot index a40bb71..22028f2 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,10 @@ boot_splash/bg_color=Color(1, 0, 0, 1) boot_splash/show_image=false config/icon="res://icon.svg" +[autoload] + +Config="*res://config.gd" + [display] window/size/viewport_width=1900