Преглед изворни кода

updated help files plus a couple of small bug fixes

Jonathan Higgins пре 7 месеци
родитељ
комит
761eb5f4e6

+ 158 - 0
examples/building_a_thread.thd

@@ -0,0 +1,158 @@
+{
+	"connections": [
+		{
+			"from_node": "inputfile",
+			"from_port": 0,
+			"to_node": "modify_brassage_5",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_brassage_5",
+			"from_port": 0,
+			"to_node": "distort_interpolate",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_brassage_5",
+			"from_port": 0,
+			"to_node": "modify_speed_2",
+			"to_port": 0
+		},
+		{
+			"from_node": "distort_interpolate",
+			"from_port": 0,
+			"to_node": "filter_bank_1",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_speed_2",
+			"from_port": 0,
+			"to_node": "filter_bank_1",
+			"to_port": 0
+		},
+		{
+			"from_node": "filter_bank_1",
+			"from_port": 0,
+			"to_node": "outputfile",
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"command": "inputfile",
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": -85.5555572509766,
+				"y": 74.4444427490234
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1161/@MarginContainer@1201/Tree/@Popup@1187/@VBoxContainer@1188/@HSlider@1196": 0.0
+			}
+		},
+		{
+			"command": "modify_brassage_5",
+			"name": "modify_brassage_5",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 374.888854980469,
+				"y": 75.0
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": 0.4
+			}
+		},
+		{
+			"command": "modify_speed_2",
+			"name": "modify_speed_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 721.111145019531,
+				"y": 214.33332824707
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": -12.0
+			}
+		},
+		{
+			"command": "distort_interpolate",
+			"name": "distort_interpolate",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 721.666687011719,
+				"y": 74.8888854980469
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": 2.0
+			}
+		},
+		{
+			"command": "outputfile",
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1440.0,
+				"y": 76.6666717529297
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1278/@MarginContainer@1318/Tree/@Popup@1304/@VBoxContainer@1305/@HSlider@1313": 0.0
+			}
+		},
+		{
+			"command": "filter_bank_1",
+			"name": "filter_bank_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1080.66662597656,
+				"y": 75.2222061157227
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": 500.0,
+				"VBoxContainer2/HSplitContainer/HSlider": 1.0,
+				"VBoxContainer3/HSplitContainer/HSlider": 110.0,
+				"VBoxContainer4/HSplitContainer/HSlider": 1760.0,
+				"VBoxContainer6/HSplitContainer/HSlider": 0.2
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "Multiple nodes can be combined to create a thread.\n\nThey will be run in the order that they are connected in your thread.\n\nNote: all nodes must have a route to and from \"Input File\" and \"Output File\" to run. Anything not connected will be ignored."
+			},
+			"offset": {
+				"x": 447.777801513672,
+				"y": 494.777770996094
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes2",
+			"notes": {
+				"CodeEdit": "The signal can be split out of nodes to run processes in parallel.\n\nYou can also connect multiple outputs from \"Time Domain\" nodes to the input of another to mix their outputs together.\n\nNote: \"Frequency Domain\" processes can be split but not mixed directly, see the Frequency Domain Demo for more. "
+			},
+			"offset": {
+				"x": 895.222229003906,
+				"y": 493.889007568359
+			},
+			"slider_values": {
+
+			}
+		}
+	]
+}

+ 3 - 3
examples/frequency_domain.thd

@@ -133,7 +133,7 @@
 				"y": 78.8888854980469
 				"y": 78.8888854980469
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1325/@MarginContainer@1365/Tree/@Popup@1351/@VBoxContainer@1352/@HSlider@1360": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@2175/@MarginContainer@2215/Tree/@Popup@2201/@VBoxContainer@2202/@HSlider@2210": 0.0
 			}
 			}
 		},
 		},
 		{
 		{
@@ -175,7 +175,7 @@
 				"y": 77.7777786254883
 				"y": 77.7777786254883
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1177/@MarginContainer@1217/Tree/@Popup@1203/@VBoxContainer@1204/@HSlider@1212": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@2294/@MarginContainer@2334/Tree/@Popup@2320/@VBoxContainer@2321/@HSlider@2329": 0.0
 			}
 			}
 		},
 		},
 		{
 		{
@@ -210,7 +210,7 @@
 			"command": "notes",
 			"command": "notes",
 			"name": "notes5",
 			"name": "notes5",
 			"notes": {
 			"notes": {
-				"CodeEdit": "You can use both Time Domain and Frequency Domain processes in the same Thread. You just need to convert between the two using \"PVOC: Anlalyse\" and \"PVOC: Resynthesise\"."
+				"CodeEdit": "You can use both Time Domain and Frequency Domain processes in the same Thread. You just need to convert between the two using \"PVOC: Anlalyse\" and \"PVOC: Resynthesise\".\n\nTime domain inputs and outputs are white and Frequency Domain inputs and outputs are black."
 			},
 			},
 			"offset": {
 			"offset": {
 				"x": 1407.61108398438,
 				"x": 1407.61108398438,

+ 30 - 30
examples/getting_started.thd

@@ -5,11 +5,11 @@
 			"command": "notes",
 			"command": "notes",
 			"name": "notes_copy_5112",
 			"name": "notes_copy_5112",
 			"notes": {
 			"notes": {
-				"CodeEdit": "The little white squares on the sides of these nodes are inputs (left) and outputs (right). \n\nYou can connect nodes together by clicking and dragging from one to another.\n\nYou can detach a node by clicking on the input."
+				"CodeEdit": "The little white squares on the sides of these nodes are inputs (left) and outputs (right). \n\nYou can connect nodes together by clicking and dragging from one to another.\n\nYou can detach a node by clicking on the input (left)."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 169.333160400391,
-				"y": 514.777709960938
+				"x": 521.555419921875,
+				"y": 596.999938964844
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
@@ -19,11 +19,11 @@
 			"command": "notes",
 			"command": "notes",
 			"name": "notes2",
 			"name": "notes2",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Each node is a function from the Composers Desktop Project.\n\nYou can hover your mouse over the name of a node to find out a bit more about it.\nYou can also hover over sliders to get more information about them."
+				"CodeEdit": "Each node is a function from the Composers Desktop Project.\n\nYou can hover your mouse over the name of a node to find out a bit more about it.\nYou can also hover over sliders to get more information about them.\n\nConnect \"Input File\" to \"Distort: Average\" and \"Distort:Average\" to \"Output File\"."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 604.555480957031,
-				"y": 519.444458007813
+				"x": 956.777709960938,
+				"y": 601.666687011719
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
@@ -33,30 +33,16 @@
 			"command": "notes",
 			"command": "notes",
 			"name": "notes3",
 			"name": "notes3",
 			"notes": {
 			"notes": {
-				"CodeEdit": "Connect \"Input File\" to \"Distort: Average\" and \"Distort:Average\" to \"Output File\".\n\nClick \"Run Process\" and it will prompt you for a location to save the audio files that CDP Generates and then it will run the process.\n\nIf it runs successfully you can close the console and press play on \"Output File\""
+				"CodeEdit": "Click \"Run Thread\" and it will prompt you for a location to save the audio files that CDP Generates and then it will run the process.\n\nIf it runs successfully you can close the console and press play on \"Output File\".\n"
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1078.66662597656,
-				"y": 517.888793945313
+				"x": 1430.88879394531,
+				"y": 600.111022949219
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
 			}
 			}
 		},
 		},
-		{
-			"command": "inputfile",
-			"name": "inputfile",
-			"notes": {
-
-			},
-			"offset": {
-				"x": -293.555603027344,
-				"y": 45.8888778686523
-			},
-			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1268/@MarginContainer@1308/Tree/@Popup@1294/@VBoxContainer@1295/@HSlider@1303": 0.0
-			}
-		},
 		{
 		{
 			"command": "notes",
 			"command": "notes",
 			"name": "notes",
 			"name": "notes",
@@ -64,8 +50,8 @@
 				"CodeEdit": "Welcome to SoundThread!\n\nTo get started, load a sound file into \"Input File\"\n\nIt supports a mono or stereo .wav file."
 				"CodeEdit": "Welcome to SoundThread!\n\nTo get started, load a sound file into \"Input File\"\n\nIt supports a mono or stereo .wav file."
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": -304.444519042969,
-				"y": 515.333251953125
+				"x": 47.7777099609375,
+				"y": 597.555480957031
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 
 
@@ -78,11 +64,11 @@
 
 
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 1063.88879394531,
-				"y": -46.1111259460449
+				"x": 1416.11096191406,
+				"y": 36.1110992431641
 			},
 			},
 			"slider_values": {
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1160/@MarginContainer@1200/Tree/@Popup@1186/@VBoxContainer@1187/@HSlider@1195": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@2192/@MarginContainer@2232/Tree/@Popup@2218/@VBoxContainer@2219/@HSlider@2227": 0.0
 			}
 			}
 		},
 		},
 		{
 		{
@@ -92,12 +78,26 @@
 
 
 			},
 			},
 			"offset": {
 			"offset": {
-				"x": 406.222137451172,
-				"y": 103.666656494141
+				"x": 758.444396972656,
+				"y": 185.888885498047
 			},
 			},
 			"slider_values": {
 			"slider_values": {
 				"VBoxContainer/HSplitContainer/HSlider": 18.0
 				"VBoxContainer/HSplitContainer/HSlider": 18.0
 			}
 			}
+		},
+		{
+			"command": "inputfile",
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 58.6666221618652,
+				"y": 128.111099243164
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2303/@MarginContainer@2343/Tree/@Popup@2329/@VBoxContainer@2330/@HSlider@2338": 0.0
+			}
 		}
 		}
 	]
 	]
 }
 }

+ 75 - 0
examples/navigating.thd

@@ -0,0 +1,75 @@
+{
+	"connections": [],
+	"nodes": [
+		{
+			"command": "outputfile",
+			"name": "outputfile2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1425.85852050781,
+				"y": 316.363647460938
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1520/@MarginContainer@1560/Tree/@Popup@1546/@VBoxContainer@1547/@HSlider@1555": 0.0
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes3",
+			"notes": {
+				"CodeEdit": "The buttons in the top left let you change the view of the main window or, you can use your mouse to navigate.\n\nScroll to zoom.\nClick middle mouse and drag to move.\n\nYou can also use the map in the bottom right to move around the main window."
+			},
+			"offset": {
+				"x": 30.9191761016846,
+				"y": 96.7272796630859
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "Right click anywhere in SoundThread to bring up the main menu.\n\nThis menu lists all the available processes in SoundThread. Click the + next to a process to add it to your Thread.\n\nNodes can be dragged around to rearrange and you can copy and paste nodes with ctrl/cmd+c and ctrl/cmd+v.\n\n"
+			},
+			"offset": {
+				"x": 479.373718261719,
+				"y": 98.7474822998047
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes2",
+			"notes": {
+				"CodeEdit": "Click and drag on the background to select multiple nodes at once.\n\nPressing Delete on your keyboard will remove any selected nodes. Note: \"Input File\" and \"Output File\" can't be deleted.\n\nSoundThread allows you to undo most major changes with ctrl/cmd+z. Please note this not yet fully implemented."
+			},
+			"offset": {
+				"x": 934.262573242188,
+				"y": 99.6363754272461
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "inputfile",
+			"name": "inputfile2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1425.05053710938,
+				"y": 100.202033996582
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1412/@MarginContainer@1452/Tree/@Popup@1438/@VBoxContainer@1439/@HSlider@1447": 0.0
+			}
+		}
+	]
+}

+ 118 - 0
examples/quirks.thd

@@ -0,0 +1,118 @@
+{
+	"connections": [
+		{
+			"from_node": "inputfile2",
+			"from_port": 0,
+			"to_node": "extend_scramble_1",
+			"to_port": 0
+		},
+		{
+			"from_node": "extend_scramble_1",
+			"from_port": 0,
+			"to_node": "outputfile2",
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"command": "notes",
+			"name": "notes2",
+			"notes": {
+				"CodeEdit": "Perhaps the biggest quirk is how SoundThread handles stereo files.\n\nMany processes in CDP are mono only, to get arround this, SoundThread splits all stereo files into dual mono and processes them indpendently and reinterleaves the files at the end.\n\nThis works great for most mono only processes but causes potential issues with processes that were designed to work with stereo files. This is particularly an issue with processes that use randomness and chance. When running a stereo file through \"Extend: Scramble\" the random chunks it cuts out will be different in left and right creating a decorrolation of the stereo image. This doesn't sound bad but is not its intended application. \n\nFixing this behaviour is on the list for the next release of SoundThread."
+			},
+			"offset": {
+				"x": 475.222106933594,
+				"y": 524.333374023438
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "extend_scramble_1",
+			"name": "extend_scramble_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 525.555480957031,
+				"y": 26.7777614593506
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": 0.05,
+				"VBoxContainer2/HSplitContainer/HSlider": 1.5,
+				"VBoxContainer3/HSplitContainer/HSlider": 60.0
+			}
+		},
+		{
+			"command": "outputfile",
+			"name": "outputfile2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 904.66650390625,
+				"y": 27.444429397583
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1774/@MarginContainer@1814/Tree/@Popup@1800/@VBoxContainer@1801/@HSlider@1809": 0.0
+			}
+		},
+		{
+			"command": "inputfile",
+			"name": "inputfile2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 26.1111125946045,
+				"y": 27.444429397583
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1666/@MarginContainer@1706/Tree/@Popup@1692/@VBoxContainer@1693/@HSlider@1701": 0.0
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "SoundThread is currently in Alpha and as such it has a lot of quirks and a lot of features from CDP are not yet implemented.\n\nIf you find a bug or something that seems weird please raise an issue on github:\nhttps://github.com/j-p-higgins/SoundThread/issues"
+			},
+			"offset": {
+				"x": 16.0000019073486,
+				"y": 523.666748046875
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes3",
+			"notes": {
+				"CodeEdit": "Another quirk is how SoundThread handles audio playback inside the application. \n\nSoundThread is built using Godot and Godot doesn not natively support bit-depths higher than 16 bit. As such \"Input File\" and \"Output File\" truncate to 16-bit before playback.\n\nHowever, all processing and your actual output files are done at the native resolution of your file."
+			},
+			"offset": {
+				"x": 923.333129882813,
+				"y": 524.888793945313
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "notes",
+			"name": "notes4",
+			"notes": {
+				"CodeEdit": "Finally, because of the way CDP reports errors the console in SoundThread may sometimes incorrectly tell you a process was successful when something failed.\n\nIf the output in \"Output File\" didn't change, something went wrong and you can check the console logs to find what CDP isn't happy about. (Usually you have set a length longer than your input sound)"
+			},
+			"offset": {
+				"x": 1368.0,
+				"y": 526.333312988281
+			},
+			"slider_values": {
+
+			}
+		}
+	]
+}

+ 1 - 0
project.godot

@@ -79,4 +79,5 @@ save={
 
 
 [rendering]
 [rendering]
 
 
+textures/vram_compression/import_etc2_astc=true
 environment/defaults/default_clear_color=Color(0.184314, 0.309804, 0.305882, 1)
 environment/defaults/default_clear_color=Color(0.184314, 0.309804, 0.305882, 1)

+ 52 - 5
scenes/main/control.gd

@@ -73,8 +73,10 @@ func new_patch():
 	_register_node_movement() #link nodes for tracking position changes for changes tracking
 	_register_node_movement() #link nodes for tracking position changes for changes tracking
 	
 	
 	changesmade = false #so it stops trying to save unchanged empty files
 	changesmade = false #so it stops trying to save unchanged empty files
-	
+	get_window().title = "SoundThread"
 	link_output()
 	link_output()
+	
+	
 
 
 func link_output():
 func link_output():
 	#links various buttons and function in the input nodes - this is called after they are created so that it still works on new and loading files
 	#links various buttons and function in the input nodes - this is called after they are created so that it still works on new and loading files
@@ -121,6 +123,10 @@ func check_cdp_location_set():
 func _on_ok_button_button_down() -> void:
 func _on_ok_button_button_down() -> void:
 	#after user has read dialog on where to find cdp progs this loads the file browser
 	#after user has read dialog on where to find cdp progs this loads the file browser
 	$NoLocationPopup.hide()
 	$NoLocationPopup.hide()
+	if OS.get_name() == "Windows":
+		$CdpLocationDialog.current_dir = "C:/"
+	else:
+		$CdpLocationDialog.current_dir = "~/"
 	$CdpLocationDialog.show()
 	$CdpLocationDialog.show()
 
 
 func _on_cdp_location_dialog_dir_selected(dir: String) -> void:
 func _on_cdp_location_dialog_dir_selected(dir: String) -> void:
@@ -1169,7 +1175,8 @@ func _on_settings_button_index_pressed(index: int) -> void:
 			else:
 			else:
 				$MenuBar/SettingsButton.set_item_checked(index, false)
 				$MenuBar/SettingsButton.set_item_checked(index, false)
 				ConfigHandler.save_interface_settings("auto_close_console", false)
 				ConfigHandler.save_interface_settings("auto_close_console", false)
-
+		3:
+			$Console.show()
 
 
 func _on_file_button_index_pressed(index: int) -> void:
 func _on_file_button_index_pressed(index: int) -> void:
 	match index:
 	match index:
@@ -1244,6 +1251,8 @@ func save_graph_edit(path: String):
 	file.store_string(json_string)
 	file.store_string(json_string)
 	file.close()
 	file.close()
 	print("Graph saved.")
 	print("Graph saved.")
+	changesmade = false
+	get_window().title = "SoundThread - " + path.get_file().trim_suffix(".thd")
 
 
 
 
 func load_graph_edit(path: String):
 func load_graph_edit(path: String):
@@ -1305,6 +1314,7 @@ func load_graph_edit(path: String):
 		)
 		)
 	link_output()
 	link_output()
 	print("Graph loaded.")
 	print("Graph loaded.")
+	get_window().title = "SoundThread - " + path.get_file().trim_suffix(".thd")
 
 
 
 
 func _on_save_dialog_file_selected(path: String) -> void:
 func _on_save_dialog_file_selected(path: String) -> void:
@@ -1334,8 +1344,30 @@ func _on_help_button_index_pressed(index: int) -> void:
 		0:
 		0:
 			pass
 			pass
 		1:
 		1:
-			pass
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/getting_started.thd"
+				$SaveChangesPopup.show()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				load_graph_edit("res://examples/getting_started.thd")
 		2:
 		2:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/navigating.thd"
+				$SaveChangesPopup.show()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				load_graph_edit("res://examples/navigating.thd")
+		3:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/building_a_thread.thd"
+				$SaveChangesPopup.show()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				load_graph_edit("res://examples/building_a_thread.thd")
+		4:
 			if changesmade == true:
 			if changesmade == true:
 				savestate = "helpfile"
 				savestate = "helpfile"
 				helpfile = "res://examples/frequency_domain.thd"
 				helpfile = "res://examples/frequency_domain.thd"
@@ -1343,9 +1375,17 @@ func _on_help_button_index_pressed(index: int) -> void:
 			else:
 			else:
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
 				load_graph_edit("res://examples/frequency_domain.thd")
 				load_graph_edit("res://examples/frequency_domain.thd")
-		3:
+		5:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/quirks.thd"
+				$SaveChangesPopup.show()
+			else:
+				currentfile = "none" #reset current file to none for save tracking so user cant save over help file
+				load_graph_edit("res://examples/quirks.thd")
+		6:
 			pass
 			pass
-		4:
+		7:
 			OS.shell_open("https://www.composersdesktop.com/docs/html/cdphome.htm")
 			OS.shell_open("https://www.composersdesktop.com/docs/html/cdphome.htm")
 
 
 func _recycle_outfile():
 func _recycle_outfile():
@@ -1401,3 +1441,10 @@ func _notification(what):
 func _open_output_folder():
 func _open_output_folder():
 	if lastoutputfolder != "none":
 	if lastoutputfolder != "none":
 		OS.shell_open(lastoutputfolder)
 		OS.shell_open(lastoutputfolder)
+		
+		
+
+
+func _on_rich_text_label_meta_clicked(meta: Variant) -> void:
+	print(str(meta))
+	OS.shell_open(str(meta))

+ 50 - 27
scenes/main/control.tscn

@@ -1,8 +1,9 @@
-[gd_scene load_steps=4 format=3 uid="uid://bcs87y7ptx3ke"]
+[gd_scene load_steps=5 format=3 uid="uid://bcs87y7ptx3ke"]
 
 
 [ext_resource type="Script" uid="uid://bdlfvuljckmu1" path="res://scenes/main/control.gd" id="1_2f0aq"]
 [ext_resource type="Script" uid="uid://bdlfvuljckmu1" path="res://scenes/main/control.gd" id="1_2f0aq"]
 [ext_resource type="Script" uid="uid://l2yejnjysupr" path="res://scenes/main/graph_edit.gd" id="2_3ioqo"]
 [ext_resource type="Script" uid="uid://l2yejnjysupr" path="res://scenes/main/graph_edit.gd" id="2_3ioqo"]
 [ext_resource type="PackedScene" uid="uid://b0wdj8v6o0wq0" path="res://scenes/menu/menu.tscn" id="3_dtf4o"]
 [ext_resource type="PackedScene" uid="uid://b0wdj8v6o0wq0" path="res://scenes/menu/menu.tscn" id="3_dtf4o"]
+[ext_resource type="Texture2D" uid="uid://cdwux1smquvpi" path="res://theme/images/logo.png" id="4_3ioqo"]
 
 
 [node name="Control" type="Control"]
 [node name="Control" type="Control"]
 layout_mode = 3
 layout_mode = 3
@@ -38,33 +39,46 @@ offset_top = 35.0
 auto_translate_mode = 1
 auto_translate_mode = 1
 title = "Wrong File Type"
 title = "Wrong File Type"
 initial_position = 2
 initial_position = 2
-size = Vector2i(380, 175)
-visible = false
-exclusive = true
+size = Vector2i(450, 500)
 unresizable = true
 unresizable = true
 borderless = true
 borderless = true
 always_on_top = true
 always_on_top = true
 popup_window = true
 popup_window = true
 
 
-[node name="Label" type="Label" parent="NoLocationPopup"]
-offset_left = 14.0
+[node name="TextureRect" type="TextureRect" parent="NoLocationPopup"]
+offset_left = -6.0
 offset_top = 16.0
 offset_top = 16.0
-offset_right = 363.0
-offset_bottom = 123.0
-text = "Please select the location of your _cdprogs folder. This can be changed later in settings.
+offset_right = 378.0
+offset_bottom = 64.0
+texture = ExtResource("4_3ioqo")
+expand_mode = 2
+stretch_mode = 4
+
+[node name="RichTextLabel" type="RichTextLabel" parent="NoLocationPopup"]
+offset_left = 16.0
+offset_top = 73.0
+offset_right = 435.0
+offset_bottom = 457.0
+bbcode_enabled = true
+text = "Welcome to SoundThread! 
 
 
-Windows Default: C:\\CDPR8\\_cdp\\_cdprogs
-Mac Default: ~/cdp/_cdprogs"
-horizontal_alignment = 1
-vertical_alignment = 1
-autowrap_mode = 2
+SoundThread is an interface for the Composers Desktop Project (CDP) audio processing tools. As such it requires you to have CDP installed to work correctly. If you don't already have CDP installed you can [url=\"https://www.unstablesound.net/cdp.html\"]download it here.[/url]
+
+When you close this window you will be prompted for the location of your _cdprogs folder. The default location for this folder is:
+Windows: C:/cdpr8/_cdp/_cdprogs
+Mac: ~/cdpr8/_cdp/_cdprogs
+
+SoundThread will remember this but you can always change it later in Settings.
+
+If this is your first time using SoundThread you can find some getting started tutorials in the Help tab in the top menu."
+scroll_active = false
 
 
 [node name="OkButton" type="Button" parent="NoLocationPopup"]
 [node name="OkButton" type="Button" parent="NoLocationPopup"]
-offset_left = -2.0
-offset_top = 144.0
-offset_right = 382.0
-offset_bottom = 175.0
-text = "Ok"
+offset_left = -7.0
+offset_top = 469.0
+offset_right = 457.0
+offset_bottom = 500.0
+text = "Click to locate _cdprogs"
 
 
 [node name="NoInputPopup" type="Window" parent="."]
 [node name="NoInputPopup" type="Window" parent="."]
 auto_translate_mode = 1
 auto_translate_mode = 1
@@ -197,7 +211,7 @@ item_3/id = 1
 
 
 [node name="SettingsButton" type="PopupMenu" parent="MenuBar"]
 [node name="SettingsButton" type="PopupMenu" parent="MenuBar"]
 title = "Settings"
 title = "Settings"
-item_count = 3
+item_count = 4
 item_0/text = "Change CDP Folder Location"
 item_0/text = "Change CDP Folder Location"
 item_0/id = 0
 item_0/id = 0
 item_1/text = "Disable PVOC Multi Input Warning"
 item_1/text = "Disable PVOC Multi Input Warning"
@@ -206,23 +220,31 @@ item_1/id = 1
 item_2/text = "Auto Close Console"
 item_2/text = "Auto Close Console"
 item_2/checkable = 1
 item_2/checkable = 1
 item_2/id = 2
 item_2/id = 2
+item_3/text = "Open the Console"
+item_3/id = 3
 
 
 [node name="HelpButton" type="PopupMenu" parent="MenuBar"]
 [node name="HelpButton" type="PopupMenu" parent="MenuBar"]
 auto_translate_mode = 1
 auto_translate_mode = 1
 title = "Help"
 title = "Help"
-item_count = 5
-item_0/text = "Demos"
+item_count = 8
+item_0/text = "Tutorials"
 item_0/id = 0
 item_0/id = 0
 item_0/separator = true
 item_0/separator = true
 item_1/text = "Getting Started"
 item_1/text = "Getting Started"
-item_1/id = 2
-item_2/text = "Frequency Domain"
+item_1/id = 1
+item_2/text = "Navigating SoundThread"
 item_2/id = 2
 item_2/id = 2
-item_3/text = "Other Help"
+item_3/text = "Building a Thread"
 item_3/id = 3
 item_3/id = 3
-item_3/separator = true
-item_4/text = "CDP Documentation"
+item_4/text = "Frequency Domain"
 item_4/id = 4
 item_4/id = 4
+item_5/text = "SoundThread Quirks"
+item_5/id = 5
+item_6/text = "Other Help"
+item_6/id = 6
+item_6/separator = true
+item_7/text = "CDP Documentation"
+item_7/id = 7
 
 
 [node name="SaveDialog" type="FileDialog" parent="."]
 [node name="SaveDialog" type="FileDialog" parent="."]
 use_native_dialog = true
 use_native_dialog = true
@@ -273,6 +295,7 @@ text = "Don't Save"
 [connection signal="node_deselected" from="GraphEdit" to="." method="_on_graph_edit_node_deselected"]
 [connection signal="node_deselected" from="GraphEdit" to="." method="_on_graph_edit_node_deselected"]
 [connection signal="node_selected" from="GraphEdit" to="." method="_on_graph_edit_node_selected"]
 [connection signal="node_selected" from="GraphEdit" to="." method="_on_graph_edit_node_selected"]
 [connection signal="dir_selected" from="FileDialog" to="." method="_on_file_dialog_dir_selected"]
 [connection signal="dir_selected" from="FileDialog" to="." method="_on_file_dialog_dir_selected"]
+[connection signal="meta_clicked" from="NoLocationPopup/RichTextLabel" to="." method="_on_rich_text_label_meta_clicked"]
 [connection signal="button_down" from="NoLocationPopup/OkButton" to="." method="_on_ok_button_button_down"]
 [connection signal="button_down" from="NoLocationPopup/OkButton" to="." method="_on_ok_button_button_down"]
 [connection signal="button_down" from="NoInputPopup/OkButton2" to="." method="_on_ok_button_2_button_down"]
 [connection signal="button_down" from="NoInputPopup/OkButton2" to="." method="_on_ok_button_2_button_down"]
 [connection signal="button_down" from="MultipleConnectionsPopup/OkButton3" to="." method="_on_ok_button_3_button_down"]
 [connection signal="button_down" from="MultipleConnectionsPopup/OkButton3" to="." method="_on_ok_button_3_button_down"]

BIN
theme/images/logo.png


+ 34 - 0
theme/images/logo.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cdwux1smquvpi"
+path="res://.godot/imported/logo.png-39bc5fd0abe124db0a8a0760a7908627.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://theme/images/logo.png"
+dest_files=["res://.godot/imported/logo.png-39bc5fd0abe124db0a8a0760a7908627.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1