Browse Source

remade help files, fixed breakfiles crashing processes running

Jonathan Higgins 7 months ago
parent
commit
d6e58bd403

+ 60 - 54
examples/automation.thd

@@ -1,108 +1,128 @@
 {
 	"connections": [
 		{
-			"from_node": "inputfile",
+			"from_node_id": 2,
 			"from_port": 0,
-			"to_node": "modify_speed_2",
+			"to_node_id": 1,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_brassage_4",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 6,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_speed_2",
+			"from_node_id": 6,
 			"from_port": 0,
-			"to_node": "modify_brassage_4",
+			"to_node_id": 3,
 			"to_port": 0
 		}
 	],
 	"nodes": [
 		{
-			"command": "inputfile",
-			"name": "inputfile",
+			"command": "modify_speed_2",
+			"id": 1,
+			"name": "modify_speed_2",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 20.0,
-				"y": 80.0
+				"x": 591.5556640625,
+				"y": 80.6666870117188
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1445/@MarginContainer@1485/Tree/@Popup@1471/@VBoxContainer@1472/@HSlider@1480": {
+				"VBoxContainer/HSplitContainer/HSlider": {
 					"editable": true,
 					"meta": {
-
+						"brk": true
 					},
 					"value": 0.0
 				}
 			}
 		},
 		{
-			"command": "notes",
-			"name": "notes",
+			"command": "inputfile",
+			"id": 2,
+			"name": "inputfile",
 			"notes": {
-				"CodeEdit": "Parametes with a tilde (~) next to their name can have automation applied to them to change their value over time.\n\nRight click on the Semitones~ slider to apply automation to that parameter.\n\nIn the automation window, automation timings (% of input file) are on the x axis and the value change is on the y axis. "
+
 			},
 			"offset": {
-				"x": 483.333343505859,
-				"y": 367.944458007813
+				"x": 110.444465637207,
+				"y": 80.0
 			},
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@5578/@MarginContainer@5618/Tree/@Popup@5604/@VBoxContainer@5605/@HSlider@5613": {
+					"editable": true,
+					"meta": {
 
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "modify_speed_2",
-			"name": "modify_speed_2",
+			"command": "outputfile",
+			"id": 3,
+			"name": "outputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 513.333374023438,
-				"y": 80.1666641235352
+				"x": 1353.22216796875,
+				"y": 81.2222213745117
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"AudioPlayer/FileDialog/@VBoxContainer@5687/@MarginContainer@5727/Tree/@Popup@5713/@VBoxContainer@5714/@HSlider@5722": {
 					"editable": true,
 					"meta": {
-						"brk": true
+
 					},
 					"value": 0.0
 				}
 			}
 		},
 		{
-			"command": "outputfile",
-			"name": "outputfile",
+			"command": "notes",
+			"id": 4,
+			"name": "notes2",
 			"notes": {
+				"CodeEdit": "When automation is applied the slider will lock and its value cannot be changed.\n\nAutomation can be edited or removed by right clicking on a locked slider.\n\nGrainsize~ already has some automation applied, right click it to edit the automation."
+			},
+			"offset": {
+				"x": 924.000183105469,
+				"y": 451.000091552734
+			},
+			"slider_values": {
 
+			}
+		},
+		{
+			"command": "notes",
+			"id": 5,
+			"name": "notes",
+			"notes": {
+				"CodeEdit": "Parametes with a tilde (~) next to their name can have automation applied to them to change their value over time.\n\nRight click on the Semitones~ slider to apply automation to that parameter.\n\nIn the automation window, automation timings (% of input file) are on the x axis and the value change is on the y axis. "
 			},
 			"offset": {
-				"x": 1333.33337402344,
-				"y": 80.0
+				"x": 515.777954101563,
+				"y": 452.222320556641
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1553/@MarginContainer@1593/Tree/@Popup@1579/@VBoxContainer@1580/@HSlider@1588": {
-					"editable": true,
-					"meta": {
 
-					},
-					"value": 0.0
-				}
 			}
 		},
 		{
 			"command": "modify_brassage_4",
+			"id": 6,
 			"name": "modify_brassage_4",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 934.444519042969,
-				"y": 80.1666641235352
+				"x": 957.000244140625,
+				"y": 80.6666870117188
 			},
 			"slider_values": {
 				"VBoxContainer/HSplitContainer/HSlider": {
@@ -110,12 +130,12 @@
 					"meta": {
 						"brk": true,
 						"brk_data": [
-							"(0.0, 233.0)",
+							"(0.0, 231.0)",
 							"(700.0, 128.0)",
-							"(174.0, 109.0)",
-							"(354.0, 251.0)",
-							"(562.0, 251.0)",
-							"(137.0, 249.0)"
+							"(123.0, 253.0)",
+							"(170.0, 105.0)",
+							"(342.0, 251.0)",
+							"(552.0, 250.0)"
 						]
 					},
 					"value": 10.0
@@ -129,20 +149,6 @@
 					"value": 2500.0
 				}
 			}
-		},
-		{
-			"command": "notes",
-			"name": "notes2",
-			"notes": {
-				"CodeEdit": "When automation is applied the slider will lock and its value cannot be changed.\n\nAutomation can be edited or removed by right clicking on a locked slider.\n\nGrainsize~ already has some automation applied, right click it to edit the automation."
-			},
-			"offset": {
-				"x": 897.77783203125,
-				"y": 366.833343505859
-			},
-			"slider_values": {
-
-			}
 		}
 	]
 }

+ 119 - 44
examples/building_a_thread.thd

@@ -1,140 +1,214 @@
 {
 	"connections": [
 		{
-			"from_node": "inputfile",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "modify_brassage_5",
+			"to_node_id": 2,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_brassage_5",
+			"from_node_id": 2,
 			"from_port": 0,
-			"to_node": "distort_interpolate",
+			"to_node_id": 3,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_brassage_5",
+			"from_node_id": 3,
 			"from_port": 0,
-			"to_node": "modify_speed_2",
+			"to_node_id": 4,
 			"to_port": 0
 		},
 		{
-			"from_node": "distort_interpolate",
+			"from_node_id": 4,
 			"from_port": 0,
-			"to_node": "filter_bank_1",
+			"to_node_id": 5,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_speed_2",
+			"from_node_id": 2,
 			"from_port": 0,
-			"to_node": "filter_bank_1",
+			"to_node_id": 6,
 			"to_port": 0
 		},
 		{
-			"from_node": "filter_bank_1",
+			"from_node_id": 6,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 4,
 			"to_port": 0
 		}
 	],
 	"nodes": [
 		{
 			"command": "inputfile",
+			"id": 1,
 			"name": "inputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": -85.5555572509766,
-				"y": 74.4444427490234
+				"x": 20.0,
+				"y": 80.0
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1161/@MarginContainer@1201/Tree/@Popup@1187/@VBoxContainer@1188/@HSlider@1196": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@2996/@MarginContainer@3036/Tree/@Popup@3022/@VBoxContainer@3023/@HSlider@3031": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
 			"command": "modify_brassage_5",
+			"id": 2,
 			"name": "modify_brassage_5",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 374.888854980469,
-				"y": 75.0
+				"x": 481.111206054688,
+				"y": 80.0000152587891
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": 0.4
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 0.4
+				}
 			}
 		},
 		{
-			"command": "modify_speed_2",
-			"name": "modify_speed_2",
+			"command": "distort_interpolate",
+			"id": 3,
+			"name": "distort_interpolate",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 721.111145019531,
-				"y": 214.33332824707
+				"x": 818.889099121094,
+				"y": 80.0000152587891
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": -12.0
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 2.0
+				}
 			}
 		},
 		{
-			"command": "distort_interpolate",
-			"name": "distort_interpolate",
+			"command": "filter_bank_5",
+			"id": 4,
+			"name": "filter_bank_5",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 721.666687011719,
-				"y": 74.8888854980469
+				"x": 1165.55578613281,
+				"y": 78.8889083862305
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": 2.0
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 400.0
+				},
+				"VBoxContainer2/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 1.0
+				},
+				"VBoxContainer3/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 110.0
+				},
+				"VBoxContainer4/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 1600.0
+				},
+				"VBoxContainer5/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 10.0
+				},
+				"VBoxContainer6/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"flag": "-s"
+					},
+					"value": 0.1
+				}
 			}
 		},
 		{
 			"command": "outputfile",
+			"id": 5,
 			"name": "outputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1440.0,
-				"y": 76.6666717529297
+				"x": 1524.44445800781,
+				"y": 78.8888931274414
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1278/@MarginContainer@1318/Tree/@Popup@1304/@VBoxContainer@1305/@HSlider@1313": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@3105/@MarginContainer@3145/Tree/@Popup@3131/@VBoxContainer@3132/@HSlider@3140": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "filter_bank_1",
-			"name": "filter_bank_1",
+			"command": "modify_speed_2",
+			"id": 6,
+			"name": "modify_speed_2",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1080.66662597656,
-				"y": 75.2222061157227
+				"x": 818.889099121094,
+				"y": 244.44450378418
 			},
 			"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
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": -12.0
+				}
 			}
 		},
 		{
 			"command": "notes",
+			"id": 7,
 			"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
+				"x": 553.333435058594,
+				"y": 573.333435058594
 			},
 			"slider_values": {
 
@@ -142,13 +216,14 @@
 		},
 		{
 			"command": "notes",
+			"id": 8,
 			"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
+				"x": 1004.44464111328,
+				"y": 573.333435058594
 			},
 			"slider_values": {
 

+ 126 - 72
examples/frequency_domain.thd

@@ -1,192 +1,244 @@
 {
 	"connections": [
 		{
-			"from_node": "inputfile",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "pvoc_anal_1",
+			"to_node_id": 3,
 			"to_port": 0
 		},
 		{
-			"from_node": "spectstr_stretch",
+			"from_node_id": 3,
 			"from_port": 0,
-			"to_node": "blur_blur",
+			"to_node_id": 2,
 			"to_port": 0
 		},
 		{
-			"from_node": "pvoc_anal_1",
+			"from_node_id": 6,
 			"from_port": 0,
-			"to_node": "spectstr_stretch",
+			"to_node_id": 5,
 			"to_port": 0
 		},
 		{
-			"from_node": "pvoc_synth",
+			"from_node_id": 5,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 4,
 			"to_port": 0
 		},
 		{
-			"from_node": "blur_blur",
+			"from_node_id": 2,
 			"from_port": 0,
-			"to_node": "pvoc_synth2",
+			"to_node_id": 7,
 			"to_port": 0
 		},
 		{
-			"from_node": "pvoc_synth2",
+			"from_node_id": 2,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 6,
 			"to_port": 0
 		},
 		{
-			"from_node": "spectstr_stretch",
+			"from_node_id": 7,
 			"from_port": 0,
-			"to_node": "blur_scatter",
+			"to_node_id": 8,
 			"to_port": 0
 		},
 		{
-			"from_node": "blur_scatter",
+			"from_node_id": 8,
 			"from_port": 0,
-			"to_node": "pvoc_synth",
+			"to_node_id": 4,
 			"to_port": 0
 		}
 	],
 	"nodes": [
 		{
-			"command": "spectstr_stretch",
-			"name": "spectstr_stretch",
+			"command": "inputfile",
+			"id": 1,
+			"name": "inputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 815.333312988281,
-				"y": 78.7777404785156
+				"x": 20.0,
+				"y": 80.0
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": 3.131,
-				"VBoxContainer2/HSplitContainer/HSlider": 0.0,
-				"VBoxContainer3/HSplitContainer/HSlider": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@3995/@MarginContainer@4035/Tree/@Popup@4021/@VBoxContainer@4022/@HSlider@4030": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "blur_blur",
-			"name": "blur_blur",
+			"command": "spectstr_stretch",
+			"id": 2,
+			"name": "spectstr_stretch",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1150.88891601563,
-				"y": 232.999954223633
+				"x": 785.555725097656,
+				"y": 80.0000152587891
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": 445.0
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 3.001
+				},
+				"VBoxContainer2/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				},
+				"VBoxContainer3/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "pvoc_synth",
-			"name": "pvoc_synth",
+			"command": "pvoc_anal_1",
+			"id": 3,
+			"name": "pvoc_anal_1",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1477.66662597656,
-				"y": 79.2222137451172
+				"x": 466.666778564453,
+				"y": 80.0000152587891
 			},
 			"slider_values": {
 
 			}
 		},
 		{
-			"command": "pvoc_synth",
-			"name": "pvoc_synth2",
+			"command": "outputfile",
+			"id": 4,
+			"name": "outputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1478.77783203125,
-				"y": 232.666625976563
+				"x": 1795.5556640625,
+				"y": 79.0000076293945
 			},
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@4104/@MarginContainer@4144/Tree/@Popup@4130/@VBoxContainer@4131/@HSlider@4139": {
+					"editable": true,
+					"meta": {
 
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "pvoc_anal_1",
-			"name": "pvoc_anal_1",
+			"command": "pvoc_synth",
+			"id": 5,
+			"name": "pvoc_synth",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 484.0,
-				"y": 78.3333358764648
+				"x": 1448.18920898438,
+				"y": 79.2222518920898
 			},
 			"slider_values": {
 
 			}
 		},
 		{
-			"command": "inputfile",
-			"name": "inputfile",
+			"command": "hilite_trace_1",
+			"id": 6,
+			"name": "hilite_trace_1",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 18.8888874053955,
-				"y": 78.8888854980469
+				"x": 1117.77807617188,
+				"y": 78.7777938842773
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2175/@MarginContainer@2215/Tree/@Popup@2201/@VBoxContainer@2202/@HSlider@2210": 0.0
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 4.0
+				}
 			}
 		},
 		{
-			"command": "blur_scatter",
-			"name": "blur_scatter",
+			"command": "blur_blur",
+			"id": 7,
+			"name": "blur_blur",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1149.55541992188,
-				"y": 79.8888244628906
+				"x": 1115.74475097656,
+				"y": 223.444488525391
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": 16.0
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 300.0
+				}
 			}
 		},
 		{
-			"command": "notes",
-			"name": "notes",
+			"command": "pvoc_synth",
+			"id": 8,
+			"name": "pvoc_synth2",
 			"notes": {
-				"CodeEdit": "The \"Frequency Domain\" processes allow you to perform unique transformations to a sound. Load a file into \"Input File\" to test it out.\n\nThese processes work by manipulating FFT analysis files of the audio and as such your audio must first be analysed using \"PVOC: Analyse\"."
+
 			},
 			"offset": {
-				"x": 27.6944522857666,
-				"y": 446.1611328125
+				"x": 1445.74475097656,
+				"y": 224.666732788086
 			},
 			"slider_values": {
 
 			}
 		},
 		{
-			"command": "outputfile",
-			"name": "outputfile",
+			"command": "notes",
+			"id": 9,
+			"name": "notes",
 			"notes": {
-
+				"CodeEdit": "The \"Frequency Domain\" processes allow you to perform unique transformations to a sound. Load a file into \"Input File\" to test it out.\n\nThese processes work by manipulating FFT analysis files of the audio and as such your audio must first be analysed using \"PVOC: Analyse\"."
 			},
 			"offset": {
-				"x": 1863.27893066406,
-				"y": 77.7777786254883
+				"x": 30.4112148284912,
+				"y": 488.666778564453
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2294/@MarginContainer@2334/Tree/@Popup@2320/@VBoxContainer@2321/@HSlider@2329": 0.0
+
 			}
 		},
 		{
 			"command": "notes",
-			"name": "notes3",
+			"id": 10,
+			"name": "notes2",
 			"notes": {
-				"CodeEdit": "This enables processing that is difficult/impossible to do in the time domain. E.g. PVOC: Stretch allows extreme time stretching without changing pitch."
+				"CodeEdit": "This enables processing that is difficult/impossible to do in the time domain. \n\nE.g. PVOC: Stretch allows extreme time stretching without changing pitch."
 			},
 			"offset": {
-				"x": 497.705474853516,
-				"y": 446.306701660156
+				"x": 481.411315917969,
+				"y": 493.5556640625
 			},
 			"slider_values": {
 
@@ -194,13 +246,14 @@
 		},
 		{
 			"command": "notes",
+			"id": 11,
 			"name": "notes4",
 			"notes": {
-				"CodeEdit": "Frequency Domain PVOC signals can be split but they cannot be mixed directly, if you want to mix the signals you will need to convert them back using \"PVOC: Resynthesise\".\n\nThis process will take the analysis files that PVOC uses and turn it back into audio."
+				"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: Analyse\" and \"PVOC: Resynthesise\".\n\nTime domain inputs and outputs are white and Frequency Domain inputs and outputs are black."
 			},
 			"offset": {
-				"x": 951.683349609375,
-				"y": 443.973327636719
+				"x": 1376.078125,
+				"y": 492.333435058594
 			},
 			"slider_values": {
 
@@ -208,13 +261,14 @@
 		},
 		{
 			"command": "notes",
-			"name": "notes5",
+			"id": 12,
+			"name": "notes3",
 			"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\".\n\nTime domain inputs and outputs are white and Frequency Domain inputs and outputs are black."
+				"CodeEdit": "Frequency Domain PVOC signals can be split but they cannot be mixed directly, if you want to mix the signals you will need to convert them back using \"PVOC: Resynthesise\".\n\nThis process will take the analysis files that PVOC uses and turn it back into audio."
 			},
 			"offset": {
-				"x": 1407.61108398438,
-				"y": 442.272155761719
+				"x": 931.189208984375,
+				"y": 491.111206054688
 			},
 			"slider_values": {
 

+ 40 - 33
examples/getting_started.thd

@@ -3,13 +3,14 @@
 	"nodes": [
 		{
 			"command": "notes",
-			"name": "notes_copy_5112",
+			"id": 1,
+			"name": "notes2",
 			"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 (left)."
+				"CodeEdit": "The white squares on each side of the nodes are inputs (left) and outputs (right). \n\nConnect nodes together by clicking and dragging from outputs to inputs. You can detach a cable by clicking on the input.\n\nConnect \"Input File\" to \"Distort: Average\" and \"Distort: Average\" to the Output File."
 			},
 			"offset": {
-				"x": 521.555419921875,
-				"y": 596.999938964844
+				"x": 530.0,
+				"y": 595.555541992188
 			},
 			"slider_values": {
 
@@ -17,13 +18,14 @@
 		},
 		{
 			"command": "notes",
-			"name": "notes2",
+			"id": 2,
+			"name": "notes3",
 			"notes": {
-				"CodeEdit": "Each node is a function from the Composers Desktop Project.\n\nYou can hover your mouse over nodes and controls to get some quick information about them. Double click on a node to open its full help file.\n\nConnect \"Input File\" to \"Distort: Average\" and \"Distort:Average\" to \"Output File\"."
+				"CodeEdit": "Each node is a function from the Composers Desktop Project.\n\nClick the \"?\" on a node to open its full help file. Or, hover your mouse over nodes and controls to get some quick tips. "
 			},
 			"offset": {
-				"x": 956.777709960938,
-				"y": 601.666687011719
+				"x": 992.22216796875,
+				"y": 596.666687011719
 			},
 			"slider_values": {
 
@@ -31,13 +33,14 @@
 		},
 		{
 			"command": "notes",
-			"name": "notes3",
+			"id": 3,
+			"name": "notes",
 			"notes": {
-				"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"
+				"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": {
-				"x": 1430.88879394531,
-				"y": 600.111022949219
+				"x": 70.0,
+				"y": 596.666687011719
 			},
 			"slider_values": {
 
@@ -45,13 +48,14 @@
 		},
 		{
 			"command": "notes",
-			"name": "notes",
+			"id": 4,
+			"name": "notes4",
 			"notes": {
-				"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": "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\"."
 			},
 			"offset": {
-				"x": 47.7777099609375,
-				"y": 597.555480957031
+				"x": 1461.0654296875,
+				"y": 593.270690917969
 			},
 			"slider_values": {
 
@@ -59,16 +63,17 @@
 		},
 		{
 			"command": "outputfile",
+			"id": 5,
 			"name": "outputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1416.11096191406,
-				"y": 36.1110992431641
+				"x": 1415.55541992188,
+				"y": 72.2222290039063
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1697/@MarginContainer@1737/Tree/@Popup@1723/@VBoxContainer@1724/@HSlider@1732": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1711/@MarginContainer@1751/Tree/@Popup@1737/@VBoxContainer@1738/@HSlider@1746": {
 					"editable": true,
 					"meta": {
 
@@ -78,42 +83,44 @@
 			}
 		},
 		{
-			"command": "distort_average",
-			"name": "distort_average",
+			"command": "inputfile",
+			"id": 6,
+			"name": "inputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 758.444396972656,
-				"y": 185.888885498047
+				"x": 55.5555572509766,
+				"y": 67.7777786254883
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1820/@MarginContainer@1860/Tree/@Popup@1846/@VBoxContainer@1847/@HSlider@1855": {
 					"editable": true,
 					"meta": {
-						"brk": true
+
 					},
-					"value": 18.0
+					"value": 0.0
 				}
 			}
 		},
 		{
-			"command": "inputfile",
-			"name": "inputfile",
+			"command": "distort_average",
+			"id": 7,
+			"name": "distort_average",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 58.6666221618652,
-				"y": 128.111099243164
+				"x": 778.888916015625,
+				"y": 66.6666641235352
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1813/@MarginContainer@1853/Tree/@Popup@1839/@VBoxContainer@1840/@HSlider@1848": {
+				"VBoxContainer/HSplitContainer/HSlider": {
 					"editable": true,
 					"meta": {
-
+						"brk": true
 					},
-					"value": 0.0
+					"value": 18.0
 				}
 			}
 		}

+ 39 - 22
examples/navigating.thd

@@ -2,28 +2,30 @@
 	"connections": [],
 	"nodes": [
 		{
-			"command": "outputfile",
-			"name": "outputfile2",
+			"command": "notes",
+			"id": 1,
+			"name": "notes",
 			"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": 1425.85852050781,
-				"y": 316.363647460938
+				"x": 104.444465637207,
+				"y": 165.555587768555
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1166/@MarginContainer@1206/Tree/@Popup@1192/@VBoxContainer@1193/@HSlider@1201": 0.0
+
 			}
 		},
 		{
 			"command": "notes",
+			"id": 2,
 			"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."
+				"CodeEdit": "Click and drag on the background to select multiple nodes at once.\n\nPressing Backspace/Delete will remove 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": 30.9191761016846,
-				"y": 96.7272796630859
+				"x": 964.444641113281,
+				"y": 165.555587768555
 			},
 			"slider_values": {
 
@@ -31,44 +33,59 @@
 		},
 		{
 			"command": "notes",
-			"name": "notes",
+			"id": 3,
+			"name": "notes2",
 			"notes": {
 				"CodeEdit": "Right click anywhere in SoundThread to bring up the main menu.\n\nThis menu lists 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."
 			},
 			"offset": {
-				"x": 479.373718261719,
-				"y": 98.7474822998047
+				"x": 531.111267089844,
+				"y": 162.222259521484
 			},
 			"slider_values": {
 
 			}
 		},
 		{
-			"command": "notes",
-			"name": "notes2",
+			"command": "inputfile",
+			"id": 4,
+			"name": "inputfile",
 			"notes": {
-				"CodeEdit": "Click and drag on the background to select multiple nodes at once.\n\nPressing Backspace/Delete will remove 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
+				"x": 1383.33361816406,
+				"y": 164.444458007813
 			},
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2060/@MarginContainer@2100/Tree/@Popup@2086/@VBoxContainer@2087/@HSlider@2095": {
+					"editable": true,
+					"meta": {
 
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "inputfile",
-			"name": "inputfile2",
+			"command": "outputfile",
+			"id": 5,
+			"name": "outputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1425.05053710938,
-				"y": 100.202033996582
+				"x": 1384.44445800781,
+				"y": 393.333435058594
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1298/@MarginContainer@1338/Tree/@Popup@1324/@VBoxContainer@1325/@HSlider@1333": 0.0
+				"AudioPlayer/FileDialog/@VBoxContainer@2169/@MarginContainer@2209/Tree/@Popup@2195/@VBoxContainer@2196/@HSlider@2204": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
 			}
 		}
 	]

+ 40 - 35
examples/trimming.thd

@@ -1,65 +1,74 @@
 {
 	"connections": [
 		{
-			"from_node": "inputfile",
+			"from_node_id": 3,
 			"from_port": 0,
-			"to_node": "distort_multiply",
+			"to_node_id": 1,
 			"to_port": 0
 		},
 		{
-			"from_node": "distort_multiply",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 2,
 			"to_port": 0
 		}
 	],
 	"nodes": [
 		{
-			"command": "inputfile",
-			"name": "inputfile",
+			"command": "distort_multiply",
+			"id": 1,
+			"name": "distort_multiply",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 20.0,
-				"y": 80.0
+				"x": 595.555541992188,
+				"y": 88.8888931274414
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1909/@MarginContainer@1949/Tree/@Popup@1935/@VBoxContainer@1936/@HSlider@1944": {
+				"VBoxContainer/HSplitContainer/HSlider": {
 					"editable": true,
 					"meta": {
-
+						"brk": true
 					},
-					"value": 0.0
+					"value": 3.0
 				}
 			}
 		},
 		{
-			"command": "notes",
-			"name": "notes",
+			"command": "outputfile",
+			"id": 2,
+			"name": "outputfile",
 			"notes": {
-				"CodeEdit": "Load a soundfile into \"Input File\".\n\nClicking and dragging on the soundfile viewer on the input and output will let you select a section of audio to play.\n\nIf audio is selected in \"Input File\" when you run the process, SoundThread will automatically cut out that section and process only that."
+
 			},
 			"offset": {
-				"x": 38.8888893127441,
-				"y": 303.5
+				"x": 967.77783203125,
+				"y": 88.8888931274414
 			},
 			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2083/@MarginContainer@2123/Tree/@Popup@2109/@VBoxContainer@2110/@HSlider@2118": {
+					"editable": true,
+					"meta": {
 
+					},
+					"value": 0.0
+				}
 			}
 		},
 		{
-			"command": "outputfile",
-			"name": "outputfile",
+			"command": "inputfile",
+			"id": 3,
+			"name": "inputfile",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 916.666687011719,
-				"y": 80.0
+				"x": 111.111114501953,
+				"y": 88.8888931274414
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@2017/@MarginContainer@2057/Tree/@Popup@2043/@VBoxContainer@2044/@HSlider@2052": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1974/@MarginContainer@2014/Tree/@Popup@2000/@VBoxContainer@2001/@HSlider@2009": {
 					"editable": true,
 					"meta": {
 
@@ -69,34 +78,30 @@
 			}
 		},
 		{
-			"command": "distort_multiply",
-			"name": "distort_multiply",
+			"command": "notes",
+			"id": 4,
+			"name": "notes",
 			"notes": {
-
+				"CodeEdit": "Load a soundfile into \"Input File\".\n\nClicking and dragging on the soundfile viewer on the input and output will let you select a section of audio to play.\n\nIf audio is selected in \"Input File\" when you run the process, SoundThread will automatically cut out that section and process only that."
 			},
 			"offset": {
-				"x": 532.222229003906,
-				"y": 80.1666641235352
+				"x": 117.777778625488,
+				"y": 368.888885498047
 			},
 			"slider_values": {
-				"VBoxContainer/HSplitContainer/HSlider": {
-					"editable": true,
-					"meta": {
-						"brk": true
-					},
-					"value": 2.0
-				}
+
 			}
 		},
 		{
 			"command": "notes",
+			"id": 5,
 			"name": "notes2",
 			"notes": {
 				"CodeEdit": "Clicking on the soundfile viewer while audio is playing will allow you to jump around the file to listen to different sections."
 			},
 			"offset": {
-				"x": 481.111114501953,
-				"y": 303.5
+				"x": 542.222229003906,
+				"y": 367.777801513672
 			},
 			"slider_values": {
 

+ 25 - 34
examples/wetdry.thd

@@ -1,39 +1,40 @@
 {
 	"connections": [
 		{
-			"from_node": "inputfile",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "modify_brassage_1",
+			"to_node_id": 3,
 			"to_port": 0
 		},
 		{
-			"from_node": "inputfile",
+			"from_node_id": 3,
 			"from_port": 0,
-			"to_node": "modify_loudness_1",
+			"to_node_id": 4,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_brassage_1",
+			"from_node_id": 4,
 			"from_port": 0,
-			"to_node": "modify_loudness_2",
+			"to_node_id": 2,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_loudness_2",
+			"from_node_id": 5,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 2,
 			"to_port": 0
 		},
 		{
-			"from_node": "modify_loudness_1",
+			"from_node_id": 1,
 			"from_port": 0,
-			"to_node": "outputfile",
+			"to_node_id": 5,
 			"to_port": 0
 		}
 	],
 	"nodes": [
 		{
 			"command": "inputfile",
+			"id": 1,
 			"name": "inputfile",
 			"notes": {
 
@@ -43,7 +44,7 @@
 				"y": 80.0
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1445/@MarginContainer@1485/Tree/@Popup@1471/@VBoxContainer@1472/@HSlider@1480": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2389/@MarginContainer@2429/Tree/@Popup@2415/@VBoxContainer@2416/@HSlider@2424": {
 					"editable": true,
 					"meta": {
 
@@ -54,6 +55,7 @@
 		},
 		{
 			"command": "outputfile",
+			"id": 2,
 			"name": "outputfile",
 			"notes": {
 
@@ -63,7 +65,7 @@
 				"y": 80.0
 			},
 			"slider_values": {
-				"AudioPlayer/FileDialog/@VBoxContainer@1553/@MarginContainer@1593/Tree/@Popup@1579/@VBoxContainer@1580/@HSlider@1588": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2498/@MarginContainer@2538/Tree/@Popup@2524/@VBoxContainer@2525/@HSlider@2533": {
 					"editable": true,
 					"meta": {
 
@@ -74,13 +76,14 @@
 		},
 		{
 			"command": "modify_brassage_1",
+			"id": 3,
 			"name": "modify_brassage_1",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 647.777770996094,
-				"y": 83.4999923706055
+				"x": 608.888916015625,
+				"y": 83.3333358764648
 			},
 			"slider_values": {
 				"VBoxContainer/HSplitContainer/HSlider": {
@@ -94,13 +97,14 @@
 		},
 		{
 			"command": "modify_loudness_1",
-			"name": "modify_loudness_2",
+			"id": 4,
+			"name": "modify_loudness_1",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1027.77783203125,
-				"y": 83.4999923706055
+				"x": 973.333374023438,
+				"y": 83.3333358764648
 			},
 			"slider_values": {
 				"VBoxContainer/HSplitContainer/HSlider": {
@@ -114,13 +118,14 @@
 		},
 		{
 			"command": "modify_loudness_1",
-			"name": "modify_loudness_1",
+			"id": 5,
+			"name": "modify_loudness_2",
 			"notes": {
 
 			},
 			"offset": {
-				"x": 1032.22229003906,
-				"y": 230.16667175293
+				"x": 965.555603027344,
+				"y": 286.666687011719
 			},
 			"slider_values": {
 				"VBoxContainer/HSplitContainer/HSlider": {
@@ -131,20 +136,6 @@
 					"value": 1.0
 				}
 			}
-		},
-		{
-			"command": "notes",
-			"name": "notes",
-			"notes": {
-				"CodeEdit": "Using \"Gain\" nodes in parallel will allow you to mix different parts of your thread.\n\nHere it is being used to blend the original input signal with a quieter pitched up version of the input signal."
-			},
-			"offset": {
-				"x": 988.888977050781,
-				"y": 405.722229003906
-			},
-			"slider_values": {
-
-			}
 		}
 	]
 }

+ 0 - 5
project.godot

@@ -72,11 +72,6 @@ save={
 "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":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
 ]
 }
-open_explore={
-"deadzone": 0.2,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
-]
-}
 
 [rendering]
 

+ 3 - 5
scenes/Nodes/nodes.tscn

@@ -17,7 +17,7 @@ layout_mode = 0
 offset_left = 21.0
 offset_top = 6.0
 offset_right = 449.0
-offset_bottom = 204.0
+offset_bottom = 212.0
 tooltip_text = "Stores your input file to be processed. Supports mono and stereo .wav files."
 title = "Input File"
 slot/0/left_enabled = false
@@ -2703,10 +2703,9 @@ text = "Gain~"
 
 [node name="HSlider" parent="modify_loudness_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.001
-max_value = 10.0
+max_value = 2.0
 step = 0.001
 value = 1.0
-exp_edit = true
 metadata/brk = true
 
 [node name="modify_stack" type="GraphNode" parent="."]
@@ -3431,10 +3430,9 @@ text = "Gain~"
 
 [node name="HSlider" parent="spec_gain/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.001
-max_value = 10.0
+max_value = 2.0
 step = 0.001
 value = 0.8
-exp_edit = true
 metadata/brk = true
 
 [node name="strange_waver_1" type="GraphNode" parent="."]

+ 5 - 26
scenes/main/control.gd

@@ -219,30 +219,9 @@ func _input(event):
 			$SaveDialog.popup_centered()
 		else:
 			save_graph_edit(currentfile)
-	elif event.is_action_pressed("open_explore"):
-		open_explore()
+	#elif event.is_action_pressed("open_explore"):
+		#open_explore()
 	
-	#if event is InputEventMouseButton and event.pressed:
-		#if event.button_index == MOUSE_BUTTON_LEFT and event.double_click:
-			#var pos = get_viewport().get_mouse_position()
-			#var clicked_node = find_graphedit_node_under(pos)
-			#if clicked_node:
-				#await get_tree().process_frame #wait a frame to stop nodes jumping across graph edit
-				#deselect_all_nodes() #deselect nodes to avoid dragging issues
-				#show_help_for_node(clicked_node.get_meta("command"), clicked_node.title)
-#
-#func find_graphedit_node_under(mouse_pos: Vector2) -> GraphNode:
-	##find the node that was double clicked on
-	#for node in graph_edit.get_children():
-		#if node is GraphNode and node.get_global_rect().has_point(mouse_pos):
-			#return node
-	#return null
-
-#func deselect_all_nodes():
-	#for node in $GraphEdit.get_children():
-		#if node is GraphNode:
-			#node.selected = false
-			#selected_nodes[node] = false
 
 func show_help_for_node(node_name: String, node_title: String):
 	#check if there is already a help window open for this node and pop it up instead of making a new one
@@ -1191,7 +1170,7 @@ func make_process(node: Node, process_count: int, current_infile: String, slider
 			var calculated_brk = []
 			
 			#get length of input file in seconds
-			var infile_length = run_command(cdpprogs_location + "/sfprops", ["-d", "\"%s\"" % current_infile])
+			var infile_length = run_command(cdpprogs_location + "/sfprops", ["-d", current_infile])
 			infile_length = float(infile_length[0].strip_edges())
 			
 			#scale values from automation window to the right length for file and correct slider values
@@ -1216,12 +1195,12 @@ func make_process(node: Node, process_count: int, current_infile: String, slider
 			
 			#append text file in place of value
 			line += ("\"%s\" " % brk_file_path)
-			args.append("\"%s\" " % brk_file_path)
+			args.append(brk_file_path)
 			
 			cleanup.append(brk_file_path)
 		else:
 			if time == true:
-				var infile_length = run_command(cdpprogs_location + "/sfprops", ["-d", "\"%s\"" % current_infile])
+				var infile_length = run_command(cdpprogs_location + "/sfprops", ["-d", current_infile])
 				infile_length = float(infile_length[0].strip_edges())
 				value = infile_length * (value / 100) #calculate percentage time of the input file
 			line += ("%s%.2f " % [flag, value]) if flag.begins_with("-") else ("%.2f " % value)