Selaa lähdekoodia

updated help files, fixed crashing bug with sound file trimming

Jonathan Higgins 7 kuukautta sitten
vanhempi
sitoutus
48275a5ba6

+ 148 - 0
examples/automation.thd

@@ -0,0 +1,148 @@
+{
+	"connections": [
+		{
+			"from_node": "inputfile",
+			"from_port": 0,
+			"to_node": "modify_speed_2",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_brassage_4",
+			"from_port": 0,
+			"to_node": "outputfile",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_speed_2",
+			"from_port": 0,
+			"to_node": "modify_brassage_4",
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"command": "inputfile",
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 20.0,
+				"y": 80.0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1445/@MarginContainer@1485/Tree/@Popup@1471/@VBoxContainer@1472/@HSlider@1480": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "notes",
+			"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": 483.333343505859,
+				"y": 367.944458007813
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "modify_speed_2",
+			"name": "modify_speed_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 513.333374023438,
+				"y": 80.1666641235352
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "outputfile",
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1333.33337402344,
+				"y": 80.0
+			},
+			"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",
+			"name": "modify_brassage_4",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 934.444519042969,
+				"y": 80.1666641235352
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": false,
+					"meta": {
+						"brk": true,
+						"brk_data": [
+							"(0.0, 233.0)",
+							"(700.0, 128.0)",
+							"(174.0, 109.0)",
+							"(354.0, 251.0)",
+							"(562.0, 251.0)",
+							"(137.0, 249.0)"
+						]
+					},
+					"value": 10.0
+				},
+				"VBoxContainer2/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true,
+						"flag": "-r"
+					},
+					"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": {
+
+			}
+		}
+	]
+}

+ 106 - 0
examples/trimming.thd

@@ -0,0 +1,106 @@
+{
+	"connections": [
+		{
+			"from_node": "inputfile",
+			"from_port": 0,
+			"to_node": "distort_multiply",
+			"to_port": 0
+		},
+		{
+			"from_node": "distort_multiply",
+			"from_port": 0,
+			"to_node": "outputfile",
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"command": "inputfile",
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 20.0,
+				"y": 80.0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1909/@MarginContainer@1949/Tree/@Popup@1935/@VBoxContainer@1936/@HSlider@1944": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "notes",
+			"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": 38.8888893127441,
+				"y": 303.5
+			},
+			"slider_values": {
+
+			}
+		},
+		{
+			"command": "outputfile",
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 916.666687011719,
+				"y": 80.0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@2017/@MarginContainer@2057/Tree/@Popup@2043/@VBoxContainer@2044/@HSlider@2052": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "distort_multiply",
+			"name": "distort_multiply",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 532.222229003906,
+				"y": 80.1666641235352
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 2.0
+				}
+			}
+		},
+		{
+			"command": "notes",
+			"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
+			},
+			"slider_values": {
+
+			}
+		}
+	]
+}

+ 150 - 0
examples/wetdry.thd

@@ -0,0 +1,150 @@
+{
+	"connections": [
+		{
+			"from_node": "inputfile",
+			"from_port": 0,
+			"to_node": "modify_brassage_1",
+			"to_port": 0
+		},
+		{
+			"from_node": "inputfile",
+			"from_port": 0,
+			"to_node": "modify_loudness_1",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_brassage_1",
+			"from_port": 0,
+			"to_node": "modify_loudness_2",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_loudness_2",
+			"from_port": 0,
+			"to_node": "outputfile",
+			"to_port": 0
+		},
+		{
+			"from_node": "modify_loudness_1",
+			"from_port": 0,
+			"to_node": "outputfile",
+			"to_port": 0
+		}
+	],
+	"nodes": [
+		{
+			"command": "inputfile",
+			"name": "inputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 20.0,
+				"y": 80.0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1445/@MarginContainer@1485/Tree/@Popup@1471/@VBoxContainer@1472/@HSlider@1480": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "outputfile",
+			"name": "outputfile",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1440.0,
+				"y": 80.0
+			},
+			"slider_values": {
+				"AudioPlayer/FileDialog/@VBoxContainer@1553/@MarginContainer@1593/Tree/@Popup@1579/@VBoxContainer@1580/@HSlider@1588": {
+					"editable": true,
+					"meta": {
+
+					},
+					"value": 0.0
+				}
+			}
+		},
+		{
+			"command": "modify_brassage_1",
+			"name": "modify_brassage_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 647.777770996094,
+				"y": 83.4999923706055
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 12.0
+				}
+			}
+		},
+		{
+			"command": "modify_loudness_1",
+			"name": "modify_loudness_2",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1027.77783203125,
+				"y": 83.4999923706055
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"value": 0.5
+				}
+			}
+		},
+		{
+			"command": "modify_loudness_1",
+			"name": "modify_loudness_1",
+			"notes": {
+
+			},
+			"offset": {
+				"x": 1032.22229003906,
+				"y": 230.16667175293
+			},
+			"slider_values": {
+				"VBoxContainer/HSplitContainer/HSlider": {
+					"editable": true,
+					"meta": {
+						"brk": true
+					},
+					"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": {
+
+			}
+		}
+	]
+}

+ 16 - 15
scenes/Nodes/audioplayer.gd

@@ -153,21 +153,22 @@ func _process(delta: float) -> void:
 	
 
 func _on_button_button_down() -> void:
-	if audio_player.playing: #if audio is playing allow user to skip around the sound file
-		$Timer.stop()
-		var length = $AudioStreamPlayer.stream.get_length()
-		var pixel_to_time = length / 399
-		$Playhead.position.x = get_local_mouse_position().x
-		if $LoopRegion.size.x == 0 or get_local_mouse_position().x > $LoopRegion.position.x + $LoopRegion.size.x: #loop position is not set or click is after loop position, play to end of file
-			audio_player.seek(pixel_to_time * get_local_mouse_position().x)
-		else: #if click position is before the loop position play from there and stop at the end of the loop position
-			audio_player.seek(pixel_to_time * get_local_mouse_position().x)
-			if $LoopRegion.position.x + $LoopRegion.size.x < 399:
-				$Timer.start(pixel_to_time * ($LoopRegion.position.x + $LoopRegion.size.x - get_local_mouse_position().x))
-	else:
-		mouse_pos_x = get_local_mouse_position().x
-		$LoopRegion.position.x = mouse_pos_x
-		rect_focus = true
+	if audio_player.stream:
+		if audio_player.playing: #if audio is playing allow user to skip around the sound file
+			$Timer.stop()
+			var length = $AudioStreamPlayer.stream.get_length()
+			var pixel_to_time = length / 399
+			$Playhead.position.x = get_local_mouse_position().x
+			if $LoopRegion.size.x == 0 or get_local_mouse_position().x > $LoopRegion.position.x + $LoopRegion.size.x: #loop position is not set or click is after loop position, play to end of file
+				audio_player.seek(pixel_to_time * get_local_mouse_position().x)
+			else: #if click position is before the loop position play from there and stop at the end of the loop position
+				audio_player.seek(pixel_to_time * get_local_mouse_position().x)
+				if $LoopRegion.position.x + $LoopRegion.size.x < 399:
+					$Timer.start(pixel_to_time * ($LoopRegion.position.x + $LoopRegion.size.x - get_local_mouse_position().x))
+		else:
+			mouse_pos_x = get_local_mouse_position().x
+			$LoopRegion.position.x = mouse_pos_x
+			rect_focus = true
 
 
 func _on_button_button_up() -> void:

+ 42 - 42
scenes/Nodes/nodes.tscn

@@ -280,7 +280,7 @@ layout_mode = 2
 tooltip_text = "Number of cycles over which to average"
 
 [node name="Label" parent="distort_average/VBoxContainer" index="0"]
-text = "Cycle Count"
+text = "Cycle Count~"
 
 [node name="HSlider" parent="distort_average/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -403,7 +403,7 @@ layout_mode = 2
 layout_mode = 2
 
 [node name="Label" parent="distort_divide/VBoxContainer" index="0"]
-text = "Divider"
+text = "Divider~"
 
 [node name="HSlider" parent="distort_divide/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -457,7 +457,7 @@ layout_mode = 2
 tooltip_text = "Division of scale of source wave"
 
 [node name="Label" parent="distort_fractal/VBoxContainer" index="0"]
-text = "Scaling"
+text = "Scaling~"
 
 [node name="HSlider" parent="distort_fractal/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -471,7 +471,7 @@ layout_mode = 2
 tooltip_text = "loudness of scaled component relative to source (1.0)"
 
 [node name="Label" parent="distort_fractal/VBoxContainer2" index="0"]
-text = "Loudness"
+text = "Loudness~"
 
 [node name="HSlider" parent="distort_fractal/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 0.01
@@ -516,7 +516,7 @@ layout_mode = 2
 layout_mode = 2
 
 [node name="Label" parent="distort_multiply/VBoxContainer" index="0"]
-text = "Multiplier"
+text = "Multiplier~"
 
 [node name="HSlider" parent="distort_multiply/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -560,7 +560,7 @@ layout_mode = 2
 layout_mode = 2
 
 [node name="Label" parent="distort_interpolate/VBoxContainer" index="0"]
-text = "Multiplier"
+text = "Multiplier~"
 
 [node name="HSlider" parent="distort_interpolate/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -713,7 +713,7 @@ layout_mode = 2
 tooltip_text = "The number of wavecycles in each group"
 
 [node name="Label" parent="distort_replace/VBoxContainer" index="0"]
-text = "Cycle Count"
+text = "Cycle Count~"
 
 [node name="HSlider" parent="distort_replace/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -1395,7 +1395,7 @@ layout_mode = 2
 tooltip_text = "Filter Q factor - how narrow the filer is"
 
 [node name="Label" parent="filter_bank_1/VBoxContainer" index="0"]
-text = "Q"
+text = "Q~"
 
 [node name="HSlider" parent="filter_bank_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -1532,7 +1532,7 @@ layout_mode = 2
 tooltip_text = "Filter Q factor - how narrow the filer is"
 
 [node name="Label" parent="filter_bank_2/VBoxContainer" index="0"]
-text = "Q"
+text = "Q~"
 
 [node name="HSlider" parent="filter_bank_2/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -1790,7 +1790,7 @@ layout_mode = 2
 tooltip_text = "Filter Q factor - how narrow the filer is"
 
 [node name="Label" parent="filter_bank_5/VBoxContainer" index="0"]
-text = "Q"
+text = "Q~"
 
 [node name="HSlider" parent="filter_bank_5/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -1947,7 +1947,7 @@ layout_mode = 2
 tooltip_text = "Filter Q factor - how narrow the filer is"
 
 [node name="Label" parent="filter_bank_6/VBoxContainer" index="0"]
-text = "Q"
+text = "Q~"
 
 [node name="HSlider" parent="filter_bank_6/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -2060,7 +2060,7 @@ layout_mode = 2
 tooltip_text = "Change of pitch in semitones"
 
 [node name="Label" parent="modify_brassage_1/VBoxContainer" index="0"]
-text = "Pitch Shift"
+text = "Pitch Shift~"
 
 [node name="HSlider" parent="modify_brassage_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = -24.0
@@ -2162,7 +2162,7 @@ layout_mode = 2
 tooltip_text = "Length of each grain in ms"
 
 [node name="Label" parent="modify_brassage_4/VBoxContainer" index="0"]
-text = "Grainsize"
+text = "Grainsize~"
 
 [node name="HSlider" parent="modify_brassage_4/VBoxContainer/HSplitContainer" index="0"]
 min_value = 2.0
@@ -2176,7 +2176,7 @@ layout_mode = 2
 tooltip_text = "Range of search for next grain"
 
 [node name="Label" parent="modify_brassage_4/VBoxContainer2" index="0"]
-text = "Range"
+text = "Range~"
 
 [node name="HSlider" parent="modify_brassage_4/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 1.0
@@ -2224,7 +2224,7 @@ tooltip_text = "Amount of grain overlap
 Values < 1 leaves intergrain silence"
 
 [node name="Label" parent="modify_brassage_5/VBoxContainer" index="0"]
-text = "Density"
+text = "Density~"
 
 [node name="HSlider" parent="modify_brassage_5/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.01
@@ -2351,7 +2351,7 @@ layout_mode = 2
 tooltip_text = "How fast to move through the file, >1 faster <1 slower"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer" index="0"]
-text = "Scan Speed"
+text = "Scan Speed~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.01
@@ -2374,7 +2374,7 @@ tooltip_text = "Amount of grain overlap
 Values < 1 leaves intergrain silence"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer2" index="0"]
-text = "Density"
+text = "Density~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 0.2
@@ -2395,7 +2395,7 @@ layout_mode = 2
 tooltip_text = "Size of the grains in milliseconds"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer3" index="0"]
-text = "Grain Size"
+text = "Grain Size~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer3/HSplitContainer" index="0"]
 min_value = 2.0
@@ -2416,7 +2416,7 @@ layout_mode = 2
 tooltip_text = "Transposition of grains in semitones"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer4" index="0"]
-text = "Pitchshift"
+text = "Pitchshift~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer4/HSplitContainer" index="0"]
 min_value = -24.0
@@ -2437,7 +2437,7 @@ layout_mode = 2
 tooltip_text = "Gain applied to grains"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer5" index="0"]
-text = "Amplitude"
+text = "Amplitude~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer5/HSplitContainer" index="0"]
 min_value = 0.01
@@ -2459,7 +2459,7 @@ layout_mode = 2
 tooltip_text = "Position of grains from L to R (0 = L, 1 = R)"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer6" index="0"]
-text = "Panning"
+text = "Panning~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer6/HSplitContainer" index="0"]
 max_value = 1.0
@@ -2479,7 +2479,7 @@ layout_mode = 2
 tooltip_text = "Time for each grain to fade in (ms)"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer7" index="0"]
-text = "Attack"
+text = "Attack~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer7/HSplitContainer" index="0"]
 min_value = 1.0
@@ -2500,7 +2500,7 @@ layout_mode = 2
 tooltip_text = "Time for each grain to fade out (ms)"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer8" index="0"]
-text = "Decay"
+text = "Decay~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer8/HSplitContainer" index="0"]
 min_value = 1.0
@@ -2521,7 +2521,7 @@ layout_mode = 2
 tooltip_text = "Range in file to search for the next grain (ms)"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer9" index="0"]
-text = "Search Range"
+text = "Search Range~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer9/HSplitContainer" index="0"]
 min_value = 1.0
@@ -2543,7 +2543,7 @@ layout_mode = 2
 tooltip_text = "Randomisation of grain position"
 
 [node name="Label" parent="modify_brassage_6/VBoxContainer10" index="0"]
-text = "Jitter"
+text = "Jitter~"
 
 [node name="HSlider" parent="modify_brassage_6/VBoxContainer10/HSplitContainer" index="0"]
 max_value = 1.0
@@ -2664,7 +2664,7 @@ layout_mode = 2
 tooltip_text = "Amount to scale signal by. <1 is quiet >1 is louder"
 
 [node name="Label" parent="modify_loudness_1/VBoxContainer" index="0"]
-text = "Gain"
+text = "Gain~"
 
 [node name="HSlider" parent="modify_loudness_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.001
@@ -2672,7 +2672,7 @@ max_value = 10.0
 step = 0.001
 value = 1.0
 exp_edit = true
-metadata/brk = false
+metadata/brk = true
 
 [node name="modify_stack" type="GraphNode" parent="."]
 layout_mode = 0
@@ -2863,7 +2863,7 @@ layout_mode = 2
 tooltip_text = "Amount to scale signal by. <1 is quiet >1 is louder"
 
 [node name="Label" parent="modify_speed_2/VBoxContainer" index="0"]
-text = "Semitones"
+text = "Semitones~"
 
 [node name="HSlider" parent="modify_speed_2/VBoxContainer/HSplitContainer" index="0"]
 min_value = -24.0
@@ -2990,7 +2990,7 @@ layout_mode = 2
 tooltip_text = "Gain factor for accumulated sound"
 
 [node name="Label" parent="focus_accu/VBoxContainer2" index="0"]
-text = "Decay"
+text = "Decay~"
 
 [node name="HSlider" parent="focus_accu/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 0.001
@@ -3005,7 +3005,7 @@ layout_mode = 2
 tooltip_text = "Sustained channel data glissandos at glis octaves per second"
 
 [node name="Label" parent="focus_accu/VBoxContainer" index="0"]
-text = "Glissandos"
+text = "Glissandos~"
 
 [node name="HSlider" parent="focus_accu/VBoxContainer/HSplitContainer" index="0"]
 min_value = -5.0
@@ -3052,7 +3052,7 @@ layout_mode = 2
 tooltip_text = "Number of windows over which to average the spectrum"
 
 [node name="Label" parent="blur_blur/VBoxContainer" index="0"]
-text = "Bluring"
+text = "Bluring~"
 
 [node name="HSlider" parent="blur_blur/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -3106,7 +3106,7 @@ layout_mode = 2
 tooltip_text = "Maximum random scatter of partial amplitudes"
 
 [node name="Label" parent="blur_chorus_5/VBoxContainer" index="0"]
-text = "Amplitude Randomise"
+text = "Amplitude Randomise~"
 
 [node name="HSlider" parent="blur_chorus_5/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -3120,7 +3120,7 @@ layout_mode = 2
 tooltip_text = "Maximum random scatter of partial frequencies"
 
 [node name="Label" parent="blur_chorus_5/VBoxContainer2" index="0"]
-text = "Frequency Randomise"
+text = "Frequency Randomise~"
 
 [node name="HSlider" parent="blur_chorus_5/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 1.0
@@ -3131,10 +3131,10 @@ metadata/brk = true
 
 [node name="strange_invert_1" type="GraphNode" parent="."]
 layout_mode = 0
-offset_left = 2230.0
-offset_top = 857.0
-offset_right = 2536.0
-offset_bottom = 937.0
+offset_left = 2234.0
+offset_top = 878.0
+offset_right = 2540.0
+offset_bottom = 958.0
 tooltip_text = "Transfers the energy from the highest frequency bands to the lowest ones and vice versa"
 title = "PVOC: Invert"
 slot/0/left_enabled = true
@@ -3288,7 +3288,7 @@ layout_mode = 2
 tooltip_text = "The number of frequency bands to keep"
 
 [node name="Label" parent="hilite_trace_1/VBoxContainer" index="0"]
-text = "Amount Kept"
+text = "Amount Kept~"
 
 [node name="HSlider" parent="hilite_trace_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -3334,7 +3334,7 @@ layout_mode = 2
 tooltip_text = "The number of frequency bands to keep"
 
 [node name="Label" parent="blur_scatter/VBoxContainer" index="0"]
-text = "Amount Kept"
+text = "Amount Kept~"
 
 [node name="HSlider" parent="blur_scatter/VBoxContainer/HSplitContainer" index="0"]
 min_value = 1.0
@@ -3380,7 +3380,7 @@ layout_mode = 2
 tooltip_text = "The number of frequency bands to keep"
 
 [node name="Label" parent="spec_gain/VBoxContainer" index="0"]
-text = "Gain"
+text = "Gain~"
 
 [node name="HSlider" parent="spec_gain/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.001
@@ -3445,7 +3445,7 @@ layout_mode = 2
 tooltip_text = "The frequency of oscillation relative to the length of the input file"
 
 [node name="Label" parent="strange_waver_1/VBoxContainer" index="0"]
-text = "Vibrato Frequency"
+text = "Vibrato Frequency~"
 
 [node name="HSlider" parent="strange_waver_1/VBoxContainer/HSplitContainer" index="0"]
 min_value = 0.01
@@ -3459,7 +3459,7 @@ layout_mode = 2
 tooltip_text = "The maximum frequency stretch"
 
 [node name="Label" parent="strange_waver_1/VBoxContainer2" index="0"]
-text = "Stretch"
+text = "Stretch~"
 
 [node name="HSlider" parent="strange_waver_1/VBoxContainer2/HSplitContainer" index="0"]
 min_value = 1.0

+ 29 - 1
scenes/main/control.gd

@@ -1466,9 +1466,37 @@ func _on_help_button_index_pressed(index: int) -> void:
 				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")
 		5:
-			pass
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/automation.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/automation.thd")
 		6:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/trimming.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/trimming.thd")
+		7:
+			pass
+		8:
+			if changesmade == true:
+				savestate = "helpfile"
+				helpfile = "res://examples/wetdry.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/wetdry.thd")
+		9:
+			pass
+		10:
 			OS.shell_open("https://www.composersdesktop.com/docs/html/cdphome.htm")
+		11:
+			OS.shell_open("https://github.com/j-p-higgins/SoundThread/issues")
 
 func _recycle_outfile():
 	if outfile != "no file":

+ 15 - 4
scenes/main/control.tscn

@@ -236,7 +236,7 @@ item_3/id = 3
 [node name="HelpButton" type="PopupMenu" parent="MenuBar"]
 auto_translate_mode = 1
 title = "Help"
-item_count = 7
+item_count = 12
 item_0/text = "Tutorials"
 item_0/id = 0
 item_0/separator = true
@@ -248,11 +248,22 @@ item_3/text = "Building a Thread"
 item_3/id = 3
 item_4/text = "Frequency Domain"
 item_4/id = 4
-item_5/text = "Other Help"
+item_5/text = "Automation"
 item_5/id = 5
-item_5/separator = true
-item_6/text = "CDP Documentation"
+item_6/text = "Trimming Input Files"
 item_6/id = 6
+item_7/text = "Tips"
+item_7/id = 7
+item_7/separator = true
+item_8/text = "Wet/Dry Mix"
+item_8/id = 8
+item_9/text = "Other Help"
+item_9/id = 9
+item_9/separator = true
+item_10/text = "CDP Documentation"
+item_10/id = 10
+item_11/text = "Report a Bug"
+item_11/id = 11
 
 [node name="About" type="PopupMenu" parent="MenuBar"]
 item_count = 1