Skip to content

Commit

Permalink
Update GenericDrum
Browse files Browse the repository at this point in the history
- Added a snapshot.
- Added presets.
- Changed default parameter.
- Fixed to reset properly. `noteNumber` must be reset before `interpPitch`.
- Removed "[dB]" from `crossFeedbackGain` GUI name. It's easier to read feedback gain as a raw multiplier.
  • Loading branch information
ryukau committed Oct 5, 2023
1 parent 3e094cc commit 74c70f5
Show file tree
Hide file tree
Showing 30 changed files with 11,404 additions and 86 deletions.
1 change: 0 additions & 1 deletion GenericDrum/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
cmake_minimum_required(VERSION 3.20)


include(../common/cmake/non_simd.cmake)

if(TEST_PLUGIN)
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions GenericDrum/source/dsp/dspcore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ void DSPCore::resetCollision()

void DSPCore::reset()
{
noteNumber = 57.0;
velocity = 0;

overSampling = param.value[ParameterID::ID::overSampling]->getInt();
updateUpRate();

Expand All @@ -279,9 +282,6 @@ void DSPCore::reset()
startup();
resetCollision();

noteNumber = 69.0;
velocity = 0;

triggerDetector.reset();

noiseGain = 0;
Expand Down
2 changes: 1 addition & 1 deletion GenericDrum/source/editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ bool Editor::prepareUI()

addLabel(
primaryLeft0, primaryTop1, labelWidth, labelHeight, uiTextSize,
"Cross Feedback Gain [dB]");
"Cross Feedback Gain");
addTextKnob(
primaryLeft1, primaryTop1, labelWidth, labelHeight, uiTextSize, ID::crossFeedbackGain,
Scales::crossFeedbackGain, false, 5);
Expand Down
38 changes: 20 additions & 18 deletions GenericDrum/source/parameter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#pragma once

#include <memory>
#include <numbers>
#include <string>
#include <vector>

Expand Down Expand Up @@ -178,9 +179,9 @@ struct GlobalParameter : public ParameterInterface {
value[ID::overSampling] = std::make_unique<UIntValue>(
1, Scales::boolScale, "overSampling", Info::kCanAutomate);
value[ID::normalizeGainWrtNoiseLowpassHz] = std::make_unique<UIntValue>(
1, Scales::boolScale, "normalizeGainWrtNoiseLowpassHz", Info::kCanAutomate);
0, Scales::boolScale, "normalizeGainWrtNoiseLowpassHz", Info::kCanAutomate);
value[ID::resetSeedAtNoteOn] = std::make_unique<UIntValue>(
1, Scales::boolScale, "resetSeedAtNoteOn", Info::kCanAutomate);
0, Scales::boolScale, "resetSeedAtNoteOn", Info::kCanAutomate);
value[ID::preventBlowUp] = std::make_unique<UIntValue>(
0, Scales::boolScale, "preventBlowUp", Info::kCanAutomate);

Expand Down Expand Up @@ -225,23 +226,23 @@ struct GlobalParameter : public ParameterInterface {
Scales::noiseDecaySeconds.invmap(0.08), Scales::noiseDecaySeconds,
"noiseDecaySeconds", Info::kCanAutomate);
value[ID::noiseLowpassHz] = std::make_unique<DecibelValue>(
Scales::delayTimeHz.invmap(50.0), Scales::delayTimeHz, "noiseLowpassHz",
Scales::delayTimeHz.invmap(200.0), Scales::delayTimeHz, "noiseLowpassHz",
Info::kCanAutomate);
value[ID::noiseAllpassMaxTimeHz] = std::make_unique<DecibelValue>(
Scales::delayTimeHz.invmap(3000.0), Scales::delayTimeHz, "noiseAllpassMaxTimeHz",
Info::kCanAutomate);

value[ID::impactWireMix] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(0.9), Scales::defaultScale, "impactWireMix",
Scales::defaultScale.invmap(0.75), Scales::defaultScale, "impactWireMix",
Info::kCanAutomate);
value[ID::membraneWireMix] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(0), Scales::defaultScale, "membraneWireMix",
Scales::defaultScale.invmap(0.0), Scales::defaultScale, "membraneWireMix",
Info::kCanAutomate);
value[ID::wireFrequencyHz] = std::make_unique<DecibelValue>(
Scales::wireFrequencyHz.invmap(100.0), Scales::wireFrequencyHz, "wireFrequencyHz",
Info::kCanAutomate);
value[ID::wireDecaySeconds] = std::make_unique<DecibelValue>(
Scales::wireDecaySeconds.invmap(2.0), Scales::wireDecaySeconds, "wireDecaySeconds",
Scales::wireDecaySeconds.invmap(1.0), Scales::wireDecaySeconds, "wireDecaySeconds",
Info::kCanAutomate);
value[ID::wireDistance] = std::make_unique<DecibelValue>(
Scales::collisionDistance.invmap(0.15), Scales::collisionDistance, "wireDistance",
Expand All @@ -251,17 +252,18 @@ struct GlobalParameter : public ParameterInterface {
Info::kCanAutomate);

value[ID::crossFeedbackGain] = std::make_unique<DecibelValue>(
0.9, Scales::crossFeedbackGain, "crossFeedbackGain", Info::kCanAutomate);
Scales::crossFeedbackGain.invmap(0.9), Scales::crossFeedbackGain,
"crossFeedbackGain", Info::kCanAutomate);
for (size_t idx = 0; idx < maxFdnSize; ++idx) {
auto indexStr = std::to_string(idx);

value[ID::crossFeedbackRatio0 + idx] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(1.0), Scales::defaultScale,
Scales::defaultScale.invmap(0.0), Scales::defaultScale,
("crossFeedbackRatio" + indexStr).c_str(), Info::kCanAutomate);
}

value[ID::delayTimeSpread] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(0.1), Scales::defaultScale, "delayTimeSpread",
Scales::defaultScale.invmap(0.5), Scales::defaultScale, "delayTimeSpread",
Info::kCanAutomate);
value[ID::bandpassCutSpread] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(0.5), Scales::defaultScale, "bandpassCutSpread",
Expand All @@ -280,31 +282,31 @@ struct GlobalParameter : public ParameterInterface {
0, Scales::envelopeModAmount, "envelopeModAmount", Info::kCanAutomate);

value[ID::pitchType] = std::make_unique<UIntValue>(
7, Scales::pitchType, "pitchType", Info::kCanAutomate);
0, Scales::pitchType, "pitchType", Info::kCanAutomate);
value[ID::delayTimeHz] = std::make_unique<DecibelValue>(
Scales::delayTimeHz.invmap(110.0), Scales::delayTimeHz, "delayTimeHz",
Info::kCanAutomate);
value[ID::delayTimeModAmount] = std::make_unique<DecibelValue>(
Scales::delayTimeModAmount.invmap(1150.0), Scales::delayTimeModAmount,
Scales::delayTimeModAmount.invmap(0.0), Scales::delayTimeModAmount,
"delayTimeModAmount", Info::kCanAutomate);
value[ID::bandpassCutRatio] = std::make_unique<LinearValue>(
Scales::bandpassCutRatio.invmap(0.7), Scales::bandpassCutRatio, "bandpassCutRatio",
Scales::bandpassCutRatio.invmap(0.0), Scales::bandpassCutRatio, "bandpassCutRatio",
Info::kCanAutomate);
value[ID::bandpassQ] = std::make_unique<DecibelValue>(
Scales::bandpassQ.invmap(0.1), Scales::bandpassQ, "bandpassQ", Info::kCanAutomate);
Scales::bandpassQ.invmap(std::numbers::sqrt2_v<double> / double(2)),
Scales::bandpassQ, "bandpassQ", Info::kCanAutomate);

value[ID::secondaryFdnMix] = std::make_unique<LinearValue>(
Scales::defaultScale.invmap(0.25), Scales::defaultScale, "secondaryFdnMix",
Scales::defaultScale.invmap(0.0), Scales::defaultScale, "secondaryFdnMix",
Info::kCanAutomate);
value[ID::secondaryPitchOffset] = std::make_unique<LinearValue>(
Scales::bandpassCutRatio.invmap(0.65), Scales::bandpassCutRatio,
Scales::bandpassCutRatio.invmap(0.0), Scales::bandpassCutRatio,
"secondaryPitchOffset", Info::kCanAutomate);
value[ID::secondaryQOffset] = std::make_unique<LinearValue>(
Scales::bandpassCutRatio.invmap(-2), Scales::bandpassCutRatio, "secondaryQOffset",
Scales::bandpassCutRatio.invmap(0), Scales::bandpassCutRatio, "secondaryQOffset",
Info::kCanAutomate);
value[ID::secondaryDistance] = std::make_unique<DecibelValue>(
Scales::collisionDistance.invmap(0.0008), Scales::collisionDistance,
"secondaryDistance", Info::kCanAutomate);
1.0, Scales::collisionDistance, "secondaryDistance", Info::kCanAutomate);

for (size_t idx = 0; idx < nReservedParameter; ++idx) {
auto indexStr = std::to_string(idx);
Expand Down
8 changes: 4 additions & 4 deletions GenericDrum/source/version.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@
#define SUB_VERSION_STR "0"
#define SUB_VERSION_INT 0

#define RELEASE_NUMBER_STR "3"
#define RELEASE_NUMBER_INT 3
#define RELEASE_NUMBER_STR "4"
#define RELEASE_NUMBER_INT 4

#define BUILD_NUMBER_STR "3"
#define BUILD_NUMBER_INT 3
#define BUILD_NUMBER_STR "4"
#define BUILD_NUMBER_INT 4

#define FULL_VERSION_STR \
MAJOR_VERSION_STR "." SUB_VERSION_STR "." RELEASE_NUMBER_STR "." BUILD_NUMBER_STR
Expand Down
2 changes: 2 additions & 0 deletions GenericDrum/test/testdsp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
// along with Uhhyou Plugins. If not, see <https://www.gnu.org/licenses/>.

#define SET_PARAMETERS dsp->setParameters();
#define HAS_INPUT 1
#define NO_DSP_INTERFACE

#include "../../test/synthtester.hpp"
#include "../source/dsp/dspcore.hpp"
Expand Down
Binary file added presets/Uhhyou/GenericDrum/Default.vstpreset
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/EchoDrum01.vstpreset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/LooseSnare01.vstpreset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/TightSnare01.vstpreset
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/TightSnare02.vstpreset
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/TightSnare03.vstpreset
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/TightSnare04.vstpreset
Binary file not shown.
Binary file added presets/Uhhyou/GenericDrum/TightSnare05.vstpreset
Binary file not shown.
56 changes: 34 additions & 22 deletions presets/extractparameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import sys
from pathlib import Path


def convert_string(string: str):
try:
value = int(string)
Expand All @@ -18,11 +19,13 @@ def convert_string(string: str):
return False
return string


def get_enum_range(code):
# Sort parameter by the order defined in enum ParameterID::ID.
found = re.findall(
r"namespace ParameterID \{\nenum ID.*\{([\s\S]*)\};\n\} // namespace ParameterID",
code)
code,
)

enum = []
for line in found[0].split("\n"):
Expand All @@ -48,14 +51,15 @@ def get_enum_range(code):
index = 0
for idx in range(len(enum) - 1):
temp[idx]["range"] = temp[idx + 1]["index"] - temp[idx]["index"]
temp.pop() # Delete ID_ENUM_LENGTH
temp.pop() # Delete ID_ENUM_LENGTH

enum = {}
for elem in temp:
name = elem.pop("name")
enum[name] = elem
return enum


def extract_plugin_parameter(parameter_hpp_path):
with open(parameter_hpp_path, "r", encoding="utf-8") as fi:
code = fi.read()
Expand All @@ -69,57 +73,64 @@ def extract_plugin_parameter(parameter_hpp_path):
index = 0
data = []
for matched in re.findall(
r"value\[.*ID::(.*)\]\s*=\s*std::make_unique<(.*)>\(\s*([^,]*),\s*([^,]*),\s*[^,]*,\s*([^\)]*)\);",
code,
r"value\[.*ID::(.*)\]\s*=\s*std::make_unique<(.*)>\(\s*([^,]*),\s*([^,]*),\s*[^,]*,\s*([^\)]*)\);",
code,
):
datatype = None
if matched[1] == "UIntValue":
datatype = "I"
else:
datatype = "d"

if matched[0].find(" + i") != -1: # TODO: Change this to regex.
if matched[0].find(" + i") != -1: # TODO: Change this to regex.
name, _, _ = matched[0].rpartition(" + i")
basename = name[0:-1] # remove '0'.
basename = name[0:-1] # remove '0'.
for i in range(enum[name]["range"]):
default = matched[2].replace("idx", str(i))
data.append({
data.append(
{
"id": index,
"name": f"{basename}{i}",
"type": datatype,
"default": convert_string(default),
"scale": matched[3],
"flags": matched[4],
}
)
index += 1
else:
data.append(
{
"id": index,
"name": f"{basename}{i}",
"name": matched[0],
"type": datatype,
"default": convert_string(default),
"default": convert_string(matched[2]),
"scale": matched[3],
"flags": matched[4],
})
index += 1
else:
data.append({
"id": index,
"name": matched[0],
"type": datatype,
"default": convert_string(matched[2]),
"scale": matched[3],
"flags": matched[4],
})
}
)
index += 1

json_dir = Path(__file__).parent / Path("json")
json_dir.mkdir(parents=True, exist_ok=True)
with open(json_dir / Path(f"{plugin_name}.type.json"), "w", encoding="utf-8") as fi:
json.dump(data, fi, indent=2)


def extract_parameter():
for path in Path("..").glob("**/parameter.hpp"):
if path.parts[1] == "_dump":
continue
if path.parts[1] != "FeedbackPhaser":
if path.parts[1] != "GenericDrum":
continue
print(path)
extract_plugin_parameter(path)


def extract_guid():
re_processor_guid = re.compile(
r"static const FUID ProcessorUID\(0x(.*), 0x(.*), 0x(.*), 0x(.*)\);")
r"static const FUID ProcessorUID\(0x(.*), 0x(.*), 0x(.*), 0x(.*)\);"
)

data = {}
for path in Path("..").glob("**/fuid.hpp"):
Expand All @@ -137,6 +148,7 @@ def extract_guid():
with open("json/GUID.json", "w", encoding="utf-8") as fi:
json.dump(data, fi)


if __name__ == "__main__":
extract_guid()
extract_parameter()
2 changes: 1 addition & 1 deletion presets/json/GUID.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"AccumulativeRingMod": {"processor_guid": "3DC7F14DE69E479C9BF0970D84AB5A64"}, "BasicLimiter": {"processor_guid": "95E38C055A274CE993E19AAA5AFF95F5"}, "BasicLimiterAutoMake": {"processor_guid": "AB6D22F67C2A4ADABCFDAF958D3CFA57"}, "ClangCymbal": {"processor_guid": "F99D3FCFF4E74CC4AD4B756B082C81A2"}, "ClangSynth": {"processor_guid": "31D71DE1C3754F49BAC9E1EE064D3A8C"}, "CollidingCombSynth": {"processor_guid": "10435C85B1B54FD9ACE981C7E46B02FF"}, "CombDistortion": {"processor_guid": "A7607B7290954E38948B9E3D1166F37D"}, "CubicPadSynth": {"processor_guid": "461BCB96D5AC4E5495E341686C5E952A"}, "EnvelopedSine": {"processor_guid": "48168B5EC1334AE88E05BFC822474464"}, "EsPhaser": {"processor_guid": "77E2CA3A7DAE459493555B97B33EBAEA"}, "FDN64Reverb": {"processor_guid": "C880D61A8F9A443D9612BA79E69A87C3"}, "FDNCymbal": {"processor_guid": "1F217F2CE23F4BF4A2716CAE41B5AE4D"}, "FeedbackPhaser": {"processor_guid": "4D7FB2ABCB564068ACF603D40A2A08B6"}, "FoldShaper": {"processor_guid": "A4768485385E4EECA2063A1E9160A26C"}, "IterativeSinCluster": {"processor_guid": "17E56F33963943F6AB265180357446E6"}, "L3Reverb": {"processor_guid": "FADE6289F4AC4CF79CDB02E8960CEA79"}, "L4Reverb": {"processor_guid": "43676AEFBB814CD68B399AC3BF5DB320"}, "LatticeReverb": {"processor_guid": "5B81B24DE43E478FAC8538C43D0550D2"}, "LightPadSynth": {"processor_guid": "DBA003596849493B913464191F2E1909"}, "LongPhaser": {"processor_guid": "699672A8A75841CB88537D6EC17B6931"}, "MatrixShifter": {"processor_guid": "6B558433326940F1B7DA266E997B0A06"}, "MaybeSnare": {"processor_guid": "8CEAB2D991E3419480C077FFD3840FC4"}, "MembraneSynth": {"processor_guid": "6A672DC1E57A4D6FA81A49F09916B435"}, "MiniCliffEQ": {"processor_guid": "6DC19649B15244BB8CCAD8CD71F629E9"}, "ModuloShaper": {"processor_guid": "5ACBA767837B4C029DE8E89BD232C5B9"}, "NarrowingDelay": {"processor_guid": "2F26E910CB5446A48EEC8E38AB36F890"}, "OddPowShaper": {"processor_guid": "522FB4206F4A417AB6E874DE8ABA6DEE"}, "OrdinaryPhaser": {"processor_guid": "B80CFC48698A4016852D7818310D7DA3"}, "OvertoneChord": {"processor_guid": "45FE002B7BEF49E78F4015D8FA4253EB"}, "ParallelComb": {"processor_guid": "885129EAFB1F40189877B912E7F740AF"}, "ParallelDetune": {"processor_guid": "42D5E208A916474AB45B302C62BC1650"}, "PitchShiftDelay": {"processor_guid": "14087F0853BA4C4FA6C9391088BF809B"}, "RingModSpacer": {"processor_guid": "48B91321E75349B58459491CBD923DB8"}, "SevenDelay": {"processor_guid": "CD3D8D67AE6E4322B39DDDC0CA4C35A1"}, "SoftClipper": {"processor_guid": "C9D814BCB61147C2BFD03A00636C90D7"}, "SyncSawSynth": {"processor_guid": "4377ACAE737A45A89B64BA13A7C5E0B7"}, "TestBedSynth": {"processor_guid": "12434244FFCB40778CFB915FC80F9C4B"}, "TrapezoidSynth": {"processor_guid": "A2A458AD3697430F9CF48840E3E721EF"}, "UltrasonicRingMod": {"processor_guid": "67F7662C470F47ADAF877B5C06B39ED5"}, "UltraSynth": {"processor_guid": "7AFF243DA6854F108378D9C0CBF71B07"}, "WaveCymbal": {"processor_guid": "1EEBAD0DF81247A2AA6E27D75E111DC5"}}
{"AccumulativeRingMod": {"processor_guid": "3DC7F14DE69E479C9BF0970D84AB5A64"}, "BasicLimiter": {"processor_guid": "95E38C055A274CE993E19AAA5AFF95F5"}, "BasicLimiterAutoMake": {"processor_guid": "AB6D22F67C2A4ADABCFDAF958D3CFA57"}, "ClangCymbal": {"processor_guid": "F99D3FCFF4E74CC4AD4B756B082C81A2"}, "ClangSynth": {"processor_guid": "31D71DE1C3754F49BAC9E1EE064D3A8C"}, "CollidingCombSynth": {"processor_guid": "10435C85B1B54FD9ACE981C7E46B02FF"}, "CombDistortion": {"processor_guid": "A7607B7290954E38948B9E3D1166F37D"}, "CubicPadSynth": {"processor_guid": "461BCB96D5AC4E5495E341686C5E952A"}, "EnvelopedSine": {"processor_guid": "48168B5EC1334AE88E05BFC822474464"}, "EsPhaser": {"processor_guid": "77E2CA3A7DAE459493555B97B33EBAEA"}, "FDN64Reverb": {"processor_guid": "C880D61A8F9A443D9612BA79E69A87C3"}, "FDNCymbal": {"processor_guid": "1F217F2CE23F4BF4A2716CAE41B5AE4D"}, "FeedbackPhaser": {"processor_guid": "4D7FB2ABCB564068ACF603D40A2A08B6"}, "FilterLab": {"processor_guid": "1826AD696D21416886AA3F917B32100B"}, "FoldShaper": {"processor_guid": "A4768485385E4EECA2063A1E9160A26C"}, "GenericDrum": {"processor_guid": "97B971DA2A0E4E0B9B3F1278DC9BFB60"}, "GrowlSynth": {"processor_guid": "F727851F56E84A3DACA8C62CC4628511"}, "IterativeSinCluster": {"processor_guid": "17E56F33963943F6AB265180357446E6"}, "L3Reverb": {"processor_guid": "FADE6289F4AC4CF79CDB02E8960CEA79"}, "L4Reverb": {"processor_guid": "43676AEFBB814CD68B399AC3BF5DB320"}, "LatticeReverb": {"processor_guid": "5B81B24DE43E478FAC8538C43D0550D2"}, "LightPadSynth": {"processor_guid": "DBA003596849493B913464191F2E1909"}, "LongPhaser": {"processor_guid": "699672A8A75841CB88537D6EC17B6931"}, "MatrixShifter": {"processor_guid": "6B558433326940F1B7DA266E997B0A06"}, "MaybeSnare": {"processor_guid": "8CEAB2D991E3419480C077FFD3840FC4"}, "MembraneSynth": {"processor_guid": "6A672DC1E57A4D6FA81A49F09916B435"}, "MiniCliffEQ": {"processor_guid": "6DC19649B15244BB8CCAD8CD71F629E9"}, "ModuloShaper": {"processor_guid": "5ACBA767837B4C029DE8E89BD232C5B9"}, "NarrowingDelay": {"processor_guid": "2F26E910CB5446A48EEC8E38AB36F890"}, "OddPowShaper": {"processor_guid": "522FB4206F4A417AB6E874DE8ABA6DEE"}, "OrdinaryPhaser": {"processor_guid": "B80CFC48698A4016852D7818310D7DA3"}, "OvertoneChord": {"processor_guid": "45FE002B7BEF49E78F4015D8FA4253EB"}, "ParallelComb": {"processor_guid": "885129EAFB1F40189877B912E7F740AF"}, "ParallelDetune": {"processor_guid": "42D5E208A916474AB45B302C62BC1650"}, "PitchShiftDelay": {"processor_guid": "14087F0853BA4C4FA6C9391088BF809B"}, "RingModSpacer": {"processor_guid": "48B91321E75349B58459491CBD923DB8"}, "SevenDelay": {"processor_guid": "CD3D8D67AE6E4322B39DDDC0CA4C35A1"}, "SoftClipper": {"processor_guid": "C9D814BCB61147C2BFD03A00636C90D7"}, "SyncSawSynth": {"processor_guid": "4377ACAE737A45A89B64BA13A7C5E0B7"}, "TestBedSynth": {"processor_guid": "12434244FFCB40778CFB915FC80F9C4B"}, "TrapezoidSynth": {"processor_guid": "A2A458AD3697430F9CF48840E3E721EF"}, "UltrasonicRingMod": {"processor_guid": "67F7662C470F47ADAF877B5C06B39ED5"}, "UltraSynth": {"processor_guid": "7AFF243DA6854F108378D9C0CBF71B07"}, "WaveCymbal": {"processor_guid": "1EEBAD0DF81247A2AA6E27D75E111DC5"}, "WeddellSealSynth": {"processor_guid": "6F1166248C9E4CC0A04031948016B6AF"}}
Loading

0 comments on commit 74c70f5

Please sign in to comment.