Преглед на файлове

Added about half of the help files for the currently availble processes

Jonathan Higgins преди 7 месеца
родител
ревизия
bc8ce2a2a2
променени са 6 файла, в които са добавени 598 реда и са изтрити 18 реда
  1. 13 7
      scenes/Nodes/nodes.tscn
  2. 4 2
      scenes/main/control.gd
  3. 10 0
      scenes/main/control.tscn
  4. 347 7
      scenes/main/process_help.json
  5. 221 0
      scenes/main/process_help.json22291586527.tmp
  6. 3 2
      scenes/menu/menu.tscn

+ 13 - 7
scenes/Nodes/nodes.tscn

@@ -208,7 +208,7 @@ metadata/outputfunction = "runprocess"
 custom_minimum_size = Vector2(0, 43)
 custom_minimum_size = Vector2(0, 43)
 layout_mode = 2
 layout_mode = 2
 tooltip_text = "SoundThread makes a lot of files. When toggled on this deletes everything but the output file."
 tooltip_text = "SoundThread makes a lot of files. When toggled on this deletes everything but the output file."
-text = "Delete Intermediate files"
+text = "Delete Intermediate Files"
 expand_icon = true
 expand_icon = true
 metadata/outputfunction = "deleteintermediate"
 metadata/outputfunction = "deleteintermediate"
 
 
@@ -216,7 +216,7 @@ metadata/outputfunction = "deleteintermediate"
 custom_minimum_size = Vector2(0, 43)
 custom_minimum_size = Vector2(0, 43)
 layout_mode = 2
 layout_mode = 2
 tooltip_text = "Stops you from being prompted for new folder each time you run a thread."
 tooltip_text = "Stops you from being prompted for new folder each time you run a thread."
-text = "Reuse last output folder"
+text = "Reuse Last Output Folder"
 expand_icon = true
 expand_icon = true
 metadata/outputfunction = "reusefolder"
 metadata/outputfunction = "reusefolder"
 
 
@@ -647,7 +647,7 @@ offset_top = 1444.0
 offset_right = 2004.0
 offset_right = 2004.0
 offset_bottom = 1524.0
 offset_bottom = 1524.0
 tooltip_text = "Reverses a soundfile to play backwards"
 tooltip_text = "Reverses a soundfile to play backwards"
-title = "Modify: Reverse"
+title = "Reverse"
 slot/0/left_enabled = true
 slot/0/left_enabled = true
 slot/0/left_type = 0
 slot/0/left_type = 0
 slot/0/left_color = Color(1, 1, 1, 0.564706)
 slot/0/left_color = Color(1, 1, 1, 0.564706)
@@ -867,9 +867,11 @@ tooltip_text = "Half-width of the region from within which the sound segments ar
 text = "Ambitus"
 text = "Ambitus"
 
 
 [node name="HSlider" parent="extend_drunk_1/VBoxContainer3/HSplitContainer" index="0"]
 [node name="HSlider" parent="extend_drunk_1/VBoxContainer3/HSplitContainer" index="0"]
-max_value = 6.0
+min_value = 0.1
 step = 0.01
 step = 0.01
-value = 1.0
+value = 2.0
+exp_edit = true
+metadata/time = true
 
 
 [node name="VBoxContainer4" parent="extend_drunk_1" instance=ExtResource("3_b6nw4")]
 [node name="VBoxContainer4" parent="extend_drunk_1" instance=ExtResource("3_b6nw4")]
 layout_mode = 2
 layout_mode = 2
@@ -879,9 +881,11 @@ tooltip_text = "Maximum length of (random) step between segment reads"
 text = "Maximum Step"
 text = "Maximum Step"
 
 
 [node name="HSlider" parent="extend_drunk_1/VBoxContainer4/HSplitContainer" index="0"]
 [node name="HSlider" parent="extend_drunk_1/VBoxContainer4/HSplitContainer" index="0"]
-max_value = 6.0
+min_value = 0.1
 step = 0.01
 step = 0.01
-value = 0.02
+value = 0.5
+exp_edit = true
+metadata/time = true
 
 
 [node name="VBoxContainer5" parent="extend_drunk_1" instance=ExtResource("3_b6nw4")]
 [node name="VBoxContainer5" parent="extend_drunk_1" instance=ExtResource("3_b6nw4")]
 layout_mode = 2
 layout_mode = 2
@@ -1045,6 +1049,7 @@ text = "Minimum Chunk Length"
 min_value = 2.0
 min_value = 2.0
 step = 0.01
 step = 0.01
 value = 2.0
 value = 2.0
+exp_edit = true
 metadata/time = true
 metadata/time = true
 metadata/min = true
 metadata/min = true
 
 
@@ -1059,6 +1064,7 @@ text = "Maximum Chunk Length"
 min_value = 3.0
 min_value = 3.0
 step = 0.01
 step = 0.01
 value = 3.0
 value = 3.0
+exp_edit = true
 metadata/time = true
 metadata/time = true
 metadata/max = true
 metadata/max = true
 
 

+ 4 - 2
scenes/main/control.gd

@@ -35,6 +35,7 @@ func _ready() -> void:
 	$Console.hide()
 	$Console.hide()
 	$NoInputPopup.hide()
 	$NoInputPopup.hide()
 	$MultipleConnectionsPopup.hide()
 	$MultipleConnectionsPopup.hide()
+	$HelpWindow.hide()
 	
 	
 	$SaveDialog.access = FileDialog.ACCESS_FILESYSTEM
 	$SaveDialog.access = FileDialog.ACCESS_FILESYSTEM
 	$SaveDialog.file_mode = FileDialog.FILE_MODE_SAVE_FILE
 	$SaveDialog.file_mode = FileDialog.FILE_MODE_SAVE_FILE
@@ -218,13 +219,13 @@ func deselect_all_nodes():
 func show_help_for_node(node_name: String, node_title: String):
 func show_help_for_node(node_name: String, node_title: String):
 	if help_data.has(node_name):
 	if help_data.has(node_name):
 		var info = help_data[node_name]
 		var info = help_data[node_name]
-		$HelpWindow.title = node_title
+		$HelpWindow.title = "Help - " + node_title
 		$HelpWindow/HelpTitle.text = node_title
 		$HelpWindow/HelpTitle.text = node_title
 		$HelpWindow/HelpText.text = ""
 		$HelpWindow/HelpText.text = ""
 		$HelpWindow/HelpText.text += info.get("description", "No help available.")
 		$HelpWindow/HelpText.text += info.get("description", "No help available.")
 		$HelpWindow.show()
 		$HelpWindow.show()
 	else:
 	else:
-		$HelpWindow.title = node_title
+		$HelpWindow.title = "Help - " + node_title
 		$HelpWindow/HelpTitle.text = node_title
 		$HelpWindow/HelpTitle.text = node_title
 		$HelpWindow/HelpText.text = ""
 		$HelpWindow/HelpText.text = ""
 		$HelpWindow/HelpText.text += "No help found."
 		$HelpWindow/HelpText.text += "No help found."
@@ -1586,6 +1587,7 @@ func _notification(what):
 		if changesmade == true:
 		if changesmade == true:
 			savestate = "quit"
 			savestate = "quit"
 			$SaveChangesPopup.show()
 			$SaveChangesPopup.show()
+			$HelpWindow.hide()
 		else:
 		else:
 			get_tree().quit() # default behavior
 			get_tree().quit() # default behavior
 			
 			

+ 10 - 0
scenes/main/control.tscn

@@ -318,8 +318,14 @@ text = "Don't Save"
 initial_position = 2
 initial_position = 2
 size = Vector2i(600, 400)
 size = Vector2i(600, 400)
 visible = false
 visible = false
+unresizable = true
 always_on_top = true
 always_on_top = true
 
 
+[node name="ColorRect" type="ColorRect" parent="HelpWindow"]
+offset_right = 604.0
+offset_bottom = 400.0
+color = Color(0.101961, 0.101961, 0.101961, 0.6)
+
 [node name="HelpTitle" type="Label" parent="HelpWindow"]
 [node name="HelpTitle" type="Label" parent="HelpWindow"]
 offset_left = 12.0
 offset_left = 12.0
 offset_top = 8.0
 offset_top = 8.0
@@ -333,6 +339,10 @@ offset_left = 12.0
 offset_top = 48.0
 offset_top = 48.0
 offset_right = 588.0
 offset_right = 588.0
 offset_bottom = 392.0
 offset_bottom = 392.0
+theme_override_colors/table_odd_row_bg = Color(0.101961, 0.101961, 0.101961, 0.262745)
+theme_override_constants/table_v_separation = 8
+theme_override_constants/table_h_separation = 10
+bbcode_enabled = true
 text = "Help Text goes in here"
 text = "Help Text goes in here"
 
 
 [connection signal="connection_request" from="GraphEdit" to="." method="_on_graph_edit_connection_request"]
 [connection signal="connection_request" from="GraphEdit" to="." method="_on_graph_edit_connection_request"]

+ 347 - 7
scenes/main/process_help.json

@@ -1,13 +1,353 @@
 {
 {
   "inputfile": {
   "inputfile": {
 	"description": 
 	"description": 
-"Allows you to load and play a file for processing.
-Here I am testing multiple lines.
-I do not know if this will work.",
+"Loads a file for processing - supports mono and stereo .wav files
+
+[b]Parameters[/b]
+[table=2]
+[cell]Load File[/cell][cell]Opens a file browser to select a sound file[/cell]
+[cell]Play/Stop[/cell][cell]Plays the input sound file[/cell]
+[/table]
+
+[b]Functionality[/b]
+SoundThread only supports mono and stereo .wav files.
+
+Clicking and dragging on the soundfile viewer will let you select a section of audio to play.
+
+If audio is selected in Input File when you run the thread, SoundThread will automatically cut out that section and process only that.
+
+Clicking on the soundfile viewer while audio is playing will allow you to jump around the file to listen to different sections.
+",
   },
   },
   "outputfile": {
   "outputfile": {
-	"title": "Output File",
-	"description": "Controls running your thread and plays the output file from the thread.",
-	"category": "Shader"
-  }
+	"description": 
+"Manages output for running threads
+
+[b]Parameters[/b]
+[table=2]
+[cell]File Name[/cell][cell]The name for your output file[/cell]
+[cell]Run Thread[/cell][cell]Runs the current thread, opens a file dialog to choose the folder for the output files[/cell]
+[cell]Delete Intermediate Files[/cell][cell]If switched on, deletes all files except the final output file[/cell]
+[cell]Reuse Last Output Folder[/cell][cell]If switched on, the last folder selected on Run Thread will be used for output files[/cell]
+[cell]Open Folder[/cell][cell]Opens the last used output folder[/cell]
+[cell]Recycle File[/cell][cell]Loops the output file back to the Input File node for reprocessing[/cell]
+[cell]Play/Stop[/cell][cell]Plays the last output file[/cell]
+[/table]
+
+[b]Functionality[/b]
+The name inputted in File Name will be appended with the current date and time so that you don't need to input a new file name each time.
+
+SoundThread can create a lot of files as each node in the thread can create multiple files. Turning on Delete Intermediate Files will delete everything but the main output file. 
+
+Clicking and dragging on the soundfile viewer will let you select a section of audio to play. Clicking on the soundfile viewer while audio is playing will allow you to jump around the file to listen to different sections.
+",
+  },
+  "notes": {
+	"description": 
+"A box for taking notes
+
+[b]Functionality[/b]
+Doesn't do anything other than giving you a space to take notes. You can right click in the text box to copy and paste and use special characters like emojis 😊.
+",
+  },
+  "distort_average": {
+	"description": 
+"Average the waveshape over a number of wavecycles
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Cycle Count[/cell][cell]Number of cycles over which to average[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Performs a mathematical averaging of the set number of cycle counts. The effect is more akin to a loss of resolution than the blurring which might be expected. Values below 10 retain some semblance of the original, while values of 100 create a kind of 'sample hold' effect.
+
+",
+  },
+  "clip_clip_2": {
+	"description": 
+"Clip a fraction of half wavecycles
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Fraction[/cell][cell]Fraction of each half wavecycle to clip, 1 = no change[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Cuts the top and bottom off of a wavecycle. Unlike conventional clipping that only cuts off parts of the signal that exceeds a set threshold, Clip Fraction looks at each cycle of the sound and cuts off a set fraction of that wavecycle. This produces a clipping effect that is uniform across the entire signal and maintains the dynamic range of the original. The lower you set the value, the more distorted the sound will be.
+",
+  },
+  "distort_divide": {
+	"description": 
+"Distortion by dividing wavecycle frequency
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Divider[/cell][cell] [/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and divides its frequency, pitch shifting it down and making it slower. This longer wavecycle replaces the next few wavecycles keeping the length of the file the same. This produces a rough pitch shift effect with added distortion artifacts. Works best with division values less than 4, at high division values the sound file may be too low to hear.
+
+This process is the opposite of Distort: Multiply.
+",
+  },
+  "distort_fractal": {
+	"description": 
+"Superimpose miniature copies of a wavecycles onto itself
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Scaling[/cell][cell]The division of scale of the wavecycle[/cell][cell][center]✅[/center][/cell]
+[cell]Loudness[/cell][cell]Loudness of fractal component compared to original wavecycle, 1 = same level.[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and divides its length and makes shorter and higher copies that equal the divided length. It then takes these copies and superimposes them over the original wavecycle. The higher the scaling the shorter each copy will be and the more copies will be layered over the original. The loudness control works like a mix between the original and the copies of the wavecycle. Produces a sheen of distortion over the original sound.
+",
+  },
+  "distort_interpolate": {
+	"description": 
+"Time-stretch by repeating wavecycles and interpolating between them
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Multiplier[/cell][cell]The number of times each wavecycle repeats[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and repeats it based on the multiplier. On each repetition the wavecycle is morphed slightly in shape so that it morphs into the shape of the next wavecycle in the file. This adds a modulatory quality to the output, successive wavecycles gliss and bend as they flow into one another.
+",
+  },
+  "distort_multiply": {
+	"description": 
+"Distortion by multiplying wavecycle frequency
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Multiplier[/cell][cell]The amount each wavecycle is multiplied by[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes each wavecycle and multiplies its frequency making it higher and shorter. It then repeats this wavecycle to fill the length of the original keeping the output file the same length. This produces a distorted pitching up of the sound. 
+
+This process is the opposite of Distort: Divide.
+",
+  },
+  "distort_reform_2": {
+	"description": 
+"Replaces wavecycles with square shaped wavecycles
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a square waveform of the same length and amplitude. This produces a similar but considerably harsher effect to Distort: Clip Fraction.
+",
+  },
+  "distort_reform_4": {
+	"description": 
+"Replaces wavecycles with triangle shaped wavecycles
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a triangle waveform of the same length and amplitude. This effect of this process is quite dependent on the input material. If applied to noisy and distorted sounds this will producing a smoothing or filtering like effect. On sounds with few harmonics - e.g. sine waves - it will add additional harmonics producing a gentle distortion.
+",
+  },
+  "distort_reform_6": {
+	"description": 
+"Replaces wavecycles with short pulses
+
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a short square pulse of a random length of the same amplitude. This produces a rough, rattle like timbre.
+",
+  },
+  "distort_replace": {
+	"description": 
+"The strongest wavecycle in a group replaces the others
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Cycle Count[/cell][cell]The size of the group[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Looks at a set number of wavecycles and finds the loudest one and repeats it to replace all other wavecycles. The repeated wavecycle is repeated at its original frequency and amplitude. This produces a sample and hold like effect.
+",
+  },
+ 	"quirk_quirk_1": {
+	"description": 
+"Distortion by raising sample values of half wavecycles to a power
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Power Factor[/cell][cell]The power to raise each sample to[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Introduces distortion into a signal by raising sample values to a power. Values less than 1 tend to flatten the tops of the waveform, while values greater than 1 narrow the waveform shape, creating a thinner, raspier sound.
+",
+  },
+ 	"extend_drunk_1": {
+	"description": 
+"Wanders through a soundfile jumping forwards and backwards while repeating small segments
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Minimum Output Duration[/cell][cell]The minimum length of the output in seconds[/cell][cell][center]❌[/center][/cell]
+[cell]Location[/cell][cell]The position in percent of the input file where the drunken walk occurs[/cell][cell][center]❌[/center][/cell]
+[cell]Ambitus[/cell][cell]The percentage of the input file the walk can move either side of the location by over the whole process[/cell][cell][center]❌[/center][/cell]
+[cell]Maximum Step[/cell][cell]The maximum percentage of the input file the walk can move by on each step[/cell][cell][center]❌[/center][/cell]
+[cell]Clock[/cell][cell]The time between each step in seconds[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Starting at the Location in the input file this process takes a segment and repeats it. When the next clock tick occurs the process will step to another segment and start repeating that. The distance in the file that each step can be is set by the Maximum Step and the amount of the file that it is possible for the process to explore either side of the original Location is set by the Ambitus. 
+",
+  },
+ 	"extend_loop_1": {
+	"description": 
+"Repeats advancing segments of a sound
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Start[/cell][cell]The position in percent of the input file where the process will begin[/cell][cell][center]❌[/center][/cell]
+[cell]Loop Length[/cell][cell]The length of each looping segment in milliseconds[/cell][cell][center]❌[/center][/cell]
+[cell]Step[/cell][cell]The percentage of the input file it moves forwards by on each loop[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Joins together, end-to-end, a series of segments taken from the file. This process will continue until the end of the file is reached. Note, with very long loop lengths and very short steps this may make [b]very[/b] long files.
+",
+  },
+ 	"extend_scramble_1": {
+	"description": 
+"Scrambles a soundfile for a set duration
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Minimum Chunk Length[/cell][cell]Minimum percentage of the input to cut[/cell][cell][center]❌[/center][/cell]
+[cell]Maximum Chunk Length[/cell][cell]Maximum percentage of the input to cut[/cell][cell][center]❌[/center][/cell]
+[cell]Output Duration[/cell][cell]Length of the output file in seconds[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Cuts out segments at random from the full duration of the file and splices them end to end. Randomises the length of each chunk to be between the minimum and maximum. With small maximum chunks this will produce a granulat synthesis like effect, with large chunks it will create new phrases in the material.
+",
+  },
+ 	"extend_zigzag_1": {
+	"description": 
+"Moves through a sound sliding backwards and forwards as it goes
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Start Point[/cell][cell]The point in percent of the input where the process begins[/cell][cell][center]❌[/center][/cell]
+[cell]End Point[/cell][cell]The point in percent of the input where the process ends[/cell][cell][center]❌[/center][/cell]
+[cell]Output Duration[/cell][cell]The total duration of the output file[/cell][cell][center]❌[/center][/cell]
+[cell]Minimum Zigzag Time[/cell][cell]Minimum acceptable time between successive zigzag timepoints[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Unlike the other extend processes this process also plays segments of the sound file backwards. This results in a smoother transition between jumps creating an output that slips and slides through its length.
+",
+  },
+ 	"filter_bank_1": {
+	"description": 
+"Bank of filters tuned to the harmonic series
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Q[/cell][cell]How narrow each filter band is[/cell][cell][center]✅[/center][/cell]
+[cell]Makeup Gain[/cell][cell]How much gain to apply after filtering[/cell][cell][center]❌[/center][/cell]
+[cell]Lowest Band[/cell][cell]The lowest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Highest Band[/cell][cell]The highest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Scatter[/cell][cell]Amount of deviation from the harmonic series[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+This process takes the frequency of the lowest band and create filters up to the value of the highest band tuned to the harmonic series. Scatter applies some randomisation of these values moving the sound from something very harmonic to something more bell like in tone. The makeup gain provides a way of adding a boost to the filtered signal, you may need to adjust this if clipping occurs. Note, Q can be automated although doing this does sometimes produce temperamental results.
+",
+  },
+ 	"filter_bank_2": {
+	"description": 
+"Bank of filters tuned to odd harmonics from the harmonic series
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Q[/cell][cell]How narrow each filter band is[/cell][cell][center]✅[/center][/cell]
+[cell]Makeup Gain[/cell][cell]How much gain to apply after filtering[/cell][cell][center]❌[/center][/cell]
+[cell]Lowest Band[/cell][cell]The lowest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Highest Band[/cell][cell]The highest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Scatter[/cell][cell]Amount of deviation from the harmonic series[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+This process takes the frequency of the lowest band and create filters up to the value of the highest band tuned to odd harmonics of the harmonic series. Scatter applies some randomisation of these values moving the sound from something very harmonic to something more bell like in tone. The makeup gain provides a way of adding a boost to the filtered signal, you may need to adjust this if clipping occurs. Note, Q can be automated although doing this does sometimes produce temperamental results.
+",
+  },
+ 	"filter_bank_5": {
+	"description": 
+"Bank of filters with a fixed number of bands spaced linearly between two frequencies
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Q[/cell][cell]How narrow each filter band is[/cell][cell][center]✅[/center][/cell]
+[cell]Makeup Gain[/cell][cell]How much gain to apply after filtering[/cell][cell][center]❌[/center][/cell]
+[cell]Lowest Band[/cell][cell]The lowest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Highest Band[/cell][cell]The highest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Number of Filters[/cell][cell]The number of bands in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Scatter[/cell][cell]Amount of deviation from the harmonic series[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+This process takes the number of filters and spaces them equally in Hz between the lowest and highest bands. Scatter applies some randomisation of these values. The makeup gain provides a way of adding a boost to the filtered signal, you may need to adjust this if clipping occurs. Note, Q can be automated although doing this does sometimes produce temperamental results. Unlike Filter Bank: Pitched Intervals this will produce a more discordant sound as the frequencies will not align to uniform harmonic intervals.
+",
+  },
+ 	"filter_bank_6": {
+	"description": 
+"Bank of filters with a fixed number of bands spaced musically between two frequencies
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Q[/cell][cell]How narrow each filter band is[/cell][cell][center]✅[/center][/cell]
+[cell]Makeup Gain[/cell][cell]How much gain to apply after filtering[/cell][cell][center]❌[/center][/cell]
+[cell]Lowest Band[/cell][cell]The lowest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Highest Band[/cell][cell]The highest band in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Number of Filters[/cell][cell]The number of bands in the bank[/cell][cell][center]❌[/center][/cell]
+[cell]Scatter[/cell][cell]Amount of deviation from the harmonic series[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+This process takes the number of filters and spaces them equally in semitones between the lowest and highest bands. Scatter applies some randomisation of these values moving the sound from something very harmonic to something more bell like in tone. The makeup gain provides a way of adding a boost to the filtered signal, you may need to adjust this if clipping occurs. Note, Q can be automated although doing this does sometimes produce temperamental results. Unlike Filter Bank: Linear this will produce a more consonant sound as the frequencies will align to uniform harmonic intervals.
+",
+  },
+ 	"filter_lohi_1": {
+	"description": 
+"Fixed low-pass or high-pass filter
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Rolloff[/cell][cell]Gain reduction of the filter, in dB[/cell][cell][center]❌[/center][/cell]
+[cell]Pass-band[/cell][cell]Last pitch to be passed by the filter in Hz[/cell][cell][center]❌[/center][/cell]
+[cell]Stop-band[/cell][cell]first pitch to be stopped by the filter in Hz[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+The low-pass filter lets through all of the sound below pass-band and attenuates the frequencies higher than pass-band, ending at stop-band.
+
+The high-pass filter lets through all of the sound above pass-band and attenuates the frequencies lower than pass-band, ending at stop-band.
+
+Setting the Pass-band lower than the stop-band creates a low-pass filter. Setting the Pass-band higher than the stop-band creates a high-pass filter.
+",
+  },
+ 	"processname": {
+	"description": 
+"Short Description
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell] [/cell][cell] [/cell][cell][center]✅❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+
+",
+  },
 }
 }

+ 221 - 0
scenes/main/process_help.json22291586527.tmp

@@ -0,0 +1,221 @@
+{
+  "inputfile": {
+	"description": 
+"Loads a file for processing - supports mono and stereo .wav files
+
+[b]Parameters[/b]
+[table=2]
+[cell]Load File[/cell][cell]Opens a file browser to select a sound file[/cell]
+[cell]Play/Stop[/cell][cell]Plays the input sound file[/cell]
+[/table]
+
+[b]Functionality[/b]
+SoundThread only supports mono and stereo .wav files.
+
+Clicking and dragging on the soundfile viewer will let you select a section of audio to play.
+
+If audio is selected in Input File when you run the thread, SoundThread will automatically cut out that section and process only that.
+
+Clicking on the soundfile viewer while audio is playing will allow you to jump around the file to listen to different sections.
+",
+  },
+  "outputfile": {
+	"description": 
+"Manages output for running threads
+
+[b]Parameters[/b]
+[table=2]
+[cell]File Name[/cell][cell]The name for your output file[/cell]
+[cell]Run Thread[/cell][cell]Runs the current thread, opens a file dialog to choose the folder for the output files[/cell]
+[cell]Delete Intermediate Files[/cell][cell]If switched on, deletes all files except the final output file[/cell]
+[cell]Reuse Last Output Folder[/cell][cell]If switched on, the last folder selected on Run Thread will be used for output files[/cell]
+[cell]Open Folder[/cell][cell]Opens the last used output folder[/cell]
+[cell]Recycle File[/cell][cell]Loops the output file back to the Input File node for reprocessing[/cell]
+[cell]Play/Stop[/cell][cell]Plays the last output file[/cell]
+[/table]
+
+[b]Functionality[/b]
+The name inputted in File Name will be appended with the current date and time so that you don't need to input a new file name each time.
+
+SoundThread can create a lot of files as each node in the thread can create multiple files. Turning on Delete Intermediate Files will delete everything but the main output file. 
+
+Clicking and dragging on the soundfile viewer will let you select a section of audio to play. Clicking on the soundfile viewer while audio is playing will allow you to jump around the file to listen to different sections.
+",
+  },
+  "notes": {
+	"description": 
+"A box for taking notes
+
+[b]Functionality[/b]
+Doesn't do anything other than giving you a space to take notes. You can right click in the text box to copy and paste and use special characters like emojis 😊.
+",
+  },
+  "distort_average": {
+	"description": 
+"Average the waveshape over a number of wavecycles
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Cycle Count[/cell][cell]Number of cycles over which to average[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Performs a mathematical averaging of the set number of cycle counts. The effect is more akin to a loss of resolution than the blurring which might be expected. Values below 10 retain some semblance of the original, while values of 100 create a kind of 'sample hold' effect.
+
+",
+  },
+  "clip_clip_2": {
+	"description": 
+"Clip a fraction of half wavecycles
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Fraction[/cell][cell]Fraction of each half wavecycle to clip, 1 = no change[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Cuts the top and bottom off of a wavecycle. Unlike conventional clipping that only cuts off parts of the signal that exceeds a set threshold, Clip Fraction looks at each cycle of the sound and cuts off a set fraction of that wavecycle. This produces a clipping effect that is uniform across the entire signal and maintains the dynamic range of the original. The lower you set the value, the more distorted the sound will be.
+",
+  },
+  "distort_divide": {
+	"description": 
+"Distortion by dividing wavecycle frequency
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Divider[/cell][cell] [/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and divides its frequency, pitch shifting it down and making it slower. This longer wavecycle replaces the next few wavecycles keeping the length of the file the same. This produces a rough pitch shift effect with added distortion artifacts. Works best with division values less than 4, at high division values the sound file may be too low to hear.
+
+This process is the opposite of Distort: Multiply.
+",
+  },
+  "distort_fractal": {
+	"description": 
+"Superimpose miniature copies of a wavecycles onto itself
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Scaling[/cell][cell]The division of scale of the wavecycle[/cell][cell][center]✅[/center][/cell]
+[cell]Loudness[/cell][cell]Loudness of fractal component compared to original wavecycle, 1 = same level.[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and divides its length and makes shorter and higher copies that equal the divided length. It then takes these copies and superimposes them over the original wavecycle. The higher the scaling the shorter each copy will be and the more copies will be layered over the original. The loudness control works like a mix between the original and the copies of the wavecycle. Produces a sheen of distortion over the original sound.
+",
+  },
+  "distort_interpolate": {
+	"description": 
+"Time-stretch by repeating wavecycles and interpolating between them
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Multiplier[/cell][cell]The number of times each wavecycle repeats[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes a wavecycle and repeats it based on the multiplier. On each repetition the wavecycle is morphed slightly in shape so that it morphs into the shape of the next wavecycle in the file. This adds a modulatory quality to the output, successive wavecycles gliss and bend as they flow into one another.
+",
+  },
+  "distort_multiply": {
+	"description": 
+"Distortion by multiplying wavecycle frequency
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Multiplier[/cell][cell]The amount each wavecycle is multiplied by[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Takes each wavecycle and multiplies its frequency making it higher and shorter. It then repeats this wavecycle to fill the length of the original keeping the output file the same length. This produces a distorted pitching up of the sound. 
+
+This process is the opposite of Distort: Divide.
+",
+  },
+  "distort_reform_2": {
+	"description": 
+"Replaces wavecycles with square shaped wavecycles
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a square waveform of the same length and amplitude. This produces a similar but considerably harsher effect to Distort: Clip Fraction.
+",
+  },
+  "distort_reform_4": {
+	"description": 
+"Replaces wavecycles with triangle shaped wavecycles
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a triangle waveform of the same length and amplitude. This effect of this process is quite dependent on the input material. If applied to noisy and distorted sounds this will producing a smoothing or filtering like effect. On sounds with few harmonics - e.g. sine waves - it will add additional harmonics producing a gentle distortion.
+",
+  },
+  "distort_reform_6": {
+	"description": 
+"Replaces wavecycles with short pulses
+
+
+[b]Functionality[/b]
+This process reads each wavecycle and replaces it with a short square pulse of a random length of the same amplitude. This produces a rough, rattle like timbre.
+",
+  },
+  "distort_replace": {
+	"description": 
+"The strongest wavecycle in a group replaces the others
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Cycle Count[/cell][cell]The size of the group[/cell][cell][center]✅[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Looks at a set number of wavecycles and finds the loudest one and repeats it to replace all other wavecycles. The repeated wavecycle is repeated at its original frequency and amplitude. This produces a sample and hold like effect.
+",
+  },
+ 	"quirk_quirk_1": {
+	"description": 
+"Distortion by raising sample values of half wavecycles to a power
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Power Factor[/cell][cell]The power to raise each sample to[/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+Introduces distortion into a signal by raising sample values to a power. Values less than 1 tend to flatten the tops of the waveform, while values greater than 1 narrow the waveform shape, creating a thinner, raspier sound.
+",
+  },
+ 	"extend_drunk_1": {
+	"description": 
+"Wanders through a soundfile jumping forwards and backwards while repeating small segments
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell]Minimum Output Duration[/cell][cell]The minimum length of the output in seconds[/cell][cell][center]❌[/center][/cell]
+[cell]Location[/cell][cell]The position in percent in the input file where the drunken walk occurs[/cell][cell][center]❌[/center][/cell]
+[cell]Ambitus[/cell][cell]The percentage of the input file the walk can move either side of the location by[/cell][cell][center]❌[/center][/cell]
+[cell]Maximum Step[/cell][cell] [/cell][cell][center]❌[/center][/cell]
+[cell]Clock[/cell][cell] [/cell][cell][center]❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+
+",
+  },
+
+
+
+ 	"processname": {
+	"description": 
+"Short Description
+
+[table=3]
+[cell][b]Parameter Name[/b][/cell][cell][b]Description[/b][/cell][cell][b]Automatable[/b][/cell]
+[cell] [/cell][cell] [/cell][cell][center]✅❌[/center][/cell]
+[/table]
+
+[b]Functionality[/b]
+
+",
+  },
+}

+ 3 - 2
scenes/menu/menu.tscn

@@ -25,7 +25,7 @@ current_tab = 0
 
 
 [node name="Time Domain" type="TabContainer" parent="select_effect"]
 [node name="Time Domain" type="TabContainer" parent="select_effect"]
 layout_mode = 2
 layout_mode = 2
-current_tab = 2
+current_tab = 1
 metadata/_tab_index = 0
 metadata/_tab_index = 0
 
 
 [node name="Distort" type="VBoxContainer" parent="select_effect/Time Domain"]
 [node name="Distort" type="VBoxContainer" parent="select_effect/Time Domain"]
@@ -286,7 +286,6 @@ layout_mode = 2
 text = "+"
 text = "+"
 
 
 [node name="Extend" type="VBoxContainer" parent="select_effect/Time Domain"]
 [node name="Extend" type="VBoxContainer" parent="select_effect/Time Domain"]
-visible = false
 layout_mode = 2
 layout_mode = 2
 metadata/_tab_index = 1
 metadata/_tab_index = 1
 
 
@@ -371,6 +370,7 @@ layout_mode = 2
 theme_override_constants/margin_bottom = 3
 theme_override_constants/margin_bottom = 3
 
 
 [node name="HSplitContainer3" type="HSplitContainer" parent="select_effect/Time Domain/Extend/MarginContainer2/ScrollContainer/VBoxContainer"]
 [node name="HSplitContainer3" type="HSplitContainer" parent="select_effect/Time Domain/Extend/MarginContainer2/ScrollContainer/VBoxContainer"]
+visible = false
 custom_minimum_size = Vector2(565, 0)
 custom_minimum_size = Vector2(565, 0)
 layout_mode = 2
 layout_mode = 2
 split_offset = 505
 split_offset = 505
@@ -411,6 +411,7 @@ layout_mode = 2
 text = "+"
 text = "+"
 
 
 [node name="Filter" type="VBoxContainer" parent="select_effect/Time Domain"]
 [node name="Filter" type="VBoxContainer" parent="select_effect/Time Domain"]
+visible = false
 layout_mode = 2
 layout_mode = 2
 metadata/_tab_index = 2
 metadata/_tab_index = 2