Browse Source

input file node and soundfile player ui improvements

Jonathan Higgins 6 months ago
parent
commit
72452a3cc5

+ 15 - 0
project.godot

@@ -72,6 +72,21 @@ search={
 "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
+run_thread={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+new={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":78,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+save_as={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
 
 [rendering]
 

+ 40 - 1
scenes/Nodes/audioplayer.gd

@@ -4,15 +4,18 @@ extends Control
 @onready var file_dialog = $FileDialog
 @onready var waveform_display = $WaveformPreview
 var outfile_path = "not_loaded"
-#signal recycle_outfile_trigger
+
 var rect_focus = false
 var mouse_pos_x
 
 #Used for waveform preview
 var voice_preview_generator : Node = null
 var stream : AudioStreamWAV = null
+
 var autoplay
 
+signal setnodetitle
+
 func _ready():
 	#Setup file dialogue to access system files and only accept wav files
 	#get_window().files_dropped.connect(_on_files_dropped)
@@ -66,6 +69,12 @@ func _on_file_selected(path: String):
 		"compress/mode" = 0,
 		"edit/loop_mode" = 1})
 	voice_preview_generator.generate_preview(audio_player.stream)
+	if audio_player.stream != null:
+		var length = convert_length(audio_player.stream.get_length())
+		$EndLabel.text = length
+		setnodetitle.emit(path.get_file())
+	else:
+		$EndLabel.text = "00:00.00"
 	set_meta("inputfile", path)
 	reset_playback()
 	
@@ -89,6 +98,11 @@ func play_outfile(path: String):
 		reset_playback()
 		return
 	await voice_preview_generator.generate_preview(audio_player.stream)
+	if audio_player.stream != null:
+		var length = convert_length(audio_player.stream.get_length())
+		$EndLabel.text = length
+	else:
+		$EndLabel.text = "00:00.00"
 	reset_playback()
 	if autoplay == true:
 		_on_play_button_button_down()
@@ -195,7 +209,32 @@ func _on_button_button_up() -> void:
 			var length = $AudioStreamPlayer.stream.get_length()
 			var pixel_to_time = length / 399
 			var start = pixel_to_time * $LoopRegion.position.x
+			var starttime = convert_length(start)
+			$StartLabel.text = starttime
 			var end = start + (pixel_to_time * $LoopRegion.size.x)
+			var endtime = convert_length(end)
+			$EndLabel.text = endtime
 			set_meta("trimpoints", [start, end])
 		else:
 			set_meta("trimfile", false)
+			$StartLabel.text = "00:00.00"
+			var end = convert_length($AudioStreamPlayer.stream.get_length())
+			$EndLabel.text = end
+			
+
+func convert_length(reportedseconds: float) -> String:
+	var converted_length = reportedseconds
+	var hours
+	var minutes
+	var seconds = int(reportedseconds) % 60
+	seconds = seconds + (reportedseconds - int(reportedseconds))
+	
+	if reportedseconds > 3600:
+		hours = reportedseconds / 3600
+		minutes = (int(reportedseconds) % 3600) / 60
+		converted_length = "%.0f:%02.0f:%05.2f" % [hours, minutes, seconds, 0.01]
+	else:
+		minutes = int((int(reportedseconds) % 3600) / 60)
+		converted_length = "%02.0f:%05.2f" % [minutes, seconds]
+	
+	return converted_length

+ 25 - 8
scenes/Nodes/audioplayer.tscn

@@ -9,7 +9,7 @@ anchors_preset = 15
 anchor_right = 1.0
 anchor_bottom = 1.0
 offset_right = -880.0
-offset_bottom = -568.0
+offset_bottom = -544.0
 grow_horizontal = 2
 grow_vertical = 2
 script = ExtResource("1_yprak")
@@ -18,7 +18,7 @@ metadata/loadenable = false
 [node name="Panel" type="Panel" parent="."]
 layout_mode = 0
 offset_right = 400.0
-offset_bottom = 96.0
+offset_bottom = 120.0
 
 [node name="Label" type="Label" parent="."]
 visible = false
@@ -35,17 +35,17 @@ use_native_dialog = true
 
 [node name="LoadButton" type="Button" parent="."]
 layout_mode = 0
-offset_top = 104.0
+offset_top = 128.0
 offset_right = 128.0
-offset_bottom = 147.0
+offset_bottom = 171.0
 text = "Load File"
 
 [node name="RecycleButton" type="Button" parent="." groups=["outputnode"]]
 layout_mode = 0
 offset_left = 272.0
-offset_top = 104.0
+offset_top = 128.0
 offset_right = 400.0
-offset_bottom = 147.0
+offset_bottom = 171.0
 tooltip_text = "Copies your output file back to your input for further processing."
 text = "Reuse Output"
 metadata/outputfunction = "recycle"
@@ -53,9 +53,9 @@ metadata/outputfunction = "recycle"
 [node name="PlayButton" type="Button" parent="."]
 layout_mode = 0
 offset_left = 136.0
-offset_top = 104.0
+offset_top = 128.0
 offset_right = 264.0
-offset_bottom = 147.0
+offset_bottom = 171.0
 text = "Play"
 
 [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
@@ -112,6 +112,23 @@ flat = true
 
 [node name="Timer" type="Timer" parent="."]
 
+[node name="StartLabel" type="Label" parent="."]
+layout_mode = 0
+offset_left = 5.0
+offset_top = 97.0
+offset_right = 149.0
+offset_bottom = 116.0
+text = "00:00.00"
+
+[node name="EndLabel" type="Label" parent="."]
+layout_mode = 0
+offset_left = 250.0
+offset_top = 97.0
+offset_right = 394.0
+offset_bottom = 116.0
+text = "00:00.00"
+horizontal_alignment = 2
+
 [connection signal="button_down" from="LoadButton" to="." method="_on_load_button_button_down"]
 [connection signal="button_down" from="RecycleButton" to="." method="recycle_outfile"]
 [connection signal="button_down" from="PlayButton" to="." method="_on_play_button_button_down"]

+ 23 - 0
scenes/Nodes/inputfile.gd

@@ -0,0 +1,23 @@
+extends GraphNode
+signal open_help
+
+func _ready() -> void:
+	#add button to title bar
+	var titlebar = self.get_titlebar_hbox()
+	var btn = Button.new()
+	btn.text = "?"
+	btn.tooltip_text = "Open help for " + self.title
+	btn.connect("pressed", Callable(self, "_open_help")) #pass key (process name) when button is pressed
+	titlebar.add_child(btn)
+	
+	$AudioPlayer.setnodetitle.connect(_set_node_title)
+
+
+func _open_help():
+	open_help.emit(self.get_meta("command"), self.title)
+
+func _set_node_title(file: String):
+	file = file.get_basename()
+	if file.length() > 30:
+		file = file.substr(0, 30) + "..."
+	title = "Input File - " + file

+ 1 - 0
scenes/Nodes/inputfile.gd.uid

@@ -0,0 +1 @@
+uid://bifsyv5gxrddm

+ 5 - 4
scenes/Nodes/nodes.tscn

@@ -1,5 +1,6 @@
-[gd_scene load_steps=6 format=3 uid="uid://duy5epq25pj8u"]
+[gd_scene load_steps=7 format=3 uid="uid://duy5epq25pj8u"]
 
+[ext_resource type="Script" uid="uid://bifsyv5gxrddm" path="res://scenes/Nodes/inputfile.gd" id="1_8x08j"]
 [ext_resource type="PackedScene" uid="uid://csapiqka522fh" path="res://scenes/Nodes/audioplayer.tscn" id="2_b6nw4"]
 [ext_resource type="Script" uid="uid://cqwwhjwatkghf" path="res://scenes/Nodes/outputfile.gd" id="3_0jqh0"]
 [ext_resource type="Script" uid="uid://cdbx1dt3ohqte" path="res://scenes/Nodes/node_logic.gd" id="3_uv17x"]
@@ -19,7 +20,7 @@ layout_mode = 0
 offset_left = 21.0
 offset_top = 6.0
 offset_right = 449.0
-offset_bottom = 212.0
+offset_bottom = 236.0
 tooltip_text = "Stores your input file to be processed. Supports mono and stereo .wav files."
 title = "Input File"
 slot/0/left_enabled = false
@@ -40,7 +41,7 @@ slot/1/right_type = 0
 slot/1/right_color = Color(1, 1, 1, 1)
 slot/1/right_icon = null
 slot/1/draw_stylebox = true
-script = ExtResource("3_uv17x")
+script = ExtResource("1_8x08j")
 metadata/command = "inputfile"
 metadata/input = true
 
@@ -57,7 +58,7 @@ layout_mode = 0
 offset_left = 523.0
 offset_top = 6.0
 offset_right = 954.0
-offset_bottom = 495.0
+offset_bottom = 519.0
 tooltip_text = "Handles everything to do with audio output. "
 title = "Output File"
 slot/0/left_enabled = true

+ 12 - 4
scenes/main/scripts/control.gd

@@ -265,6 +265,18 @@ func _input(event):
 	elif event.is_action_pressed("search"):
 		var pos = graph_edit.get_local_mouse_position()
 		_on_graph_edit_popup_request(pos)
+	elif event.is_action_pressed("run_thread"):
+		_run_process()
+	elif event.is_action_pressed("new"):
+		if changesmade == true:
+			savestate = "newfile"
+			$SaveChangesPopup.popup_centered()
+		else:
+			new_patch()
+			currentfile = "none" #reset current file to none for save tracking
+	elif event.is_action_pressed("save_as"):
+		savestate = "saveas"
+		$SaveDialog.popup_centered()
 	
 
 
@@ -377,10 +389,6 @@ func _on_file_button_index_pressed(index: int) -> void:
 				new_patch()
 				currentfile = "none" #reset current file to none for save tracking
 			
-			print("new patch, changes made =")
-			print(changesmade)
-			print("current file =")
-			print(currentfile)
 		1:
 			if currentfile == "none":
 				savestate = "saveas"

+ 1 - 1
theme/main_theme.tres

@@ -18,7 +18,7 @@ content_margin_left = 4.0
 content_margin_top = 4.0
 content_margin_right = 4.0
 content_margin_bottom = 4.0
-bg_color = Color(1, 1, 1, 0.415686)
+bg_color = Color(0.458405, 0.458405, 0.458405, 0.415686)
 draw_center = false
 corner_detail = 5
 expand_margin_left = 2.0