Kuba-Cpp 2 gadi atpakaļ
vecāks
revīzija
e0ebf366d2
86 mainītis faili ar 1178 papildinājumiem un 0 dzēšanām
  1. 155 0
      CPPbegin/Imperfector.cpp
  2. 79 0
      CPPbegin/Imperfector.h
  3. 45 0
      CPPbegin/StdInclude.h
  4. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_ONOFF maker x5 002.png
  5. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_Panel_back.png
  6. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_Panel_front.png
  7. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_back_Fold.png
  8. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_big_knob-reframed.png
  9. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_front_Fold.png
  10. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_horizontal_button-reframed.png
  11. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_horizontal_switch-reframed.png
  12. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_small_knob-reframed.png
  13. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_small_knob_switch-reframed.png
  14. BIN
      GUI/Intermediate/Filmstrips/Reason_GUI_vertical_button-reframed.png
  15. BIN
      GUI/Intermediate/Filmstrips/Reason_Icon_Snapshot_Panel_front.png
  16. BIN
      GUI/Intermediate/Filmstrips/Reason_Navigator_Snapshot_Panel_front.png
  17. BIN
      GUI/Intermediate/Filmstrips/Reason_Navigator_Snapshot_front_Fold.png
  18. BIN
      GUI/Intermediate/Filmstrips/Reason_Palette_Snapshot_Panel_front.png
  19. BIN
      GUI/Intermediate/Filmstrips/Reason_TrackListIcon_Snapshot_Panel_front.png
  20. BIN
      GUI/Intermediate/Filmstrips/Snapshot_Panel_front.png
  21. BIN
      GUI/Intermediate/Filmstrips/Snapshot_front_Fold.png
  22. BIN
      GUI/Intermediate/cropframe361r385x.png
  23. BIN
      GUI/Intermediate/cropframe5fikrvgn.png
  24. BIN
      GUI/Intermediate/cropframed_p69zw7.png
  25. BIN
      GUI/Intermediate/cropframeibprxap4.png
  26. BIN
      GUI/Intermediate/cropframeiz9y3hsr.png
  27. BIN
      GUI/Intermediate/cropframeku89b9gv.png
  28. BIN
      GUI/Intermediate/cropframetd5qif4_.png
  29. 150 0
      GUI/Intermediate/gui.lua
  30. BIN
      GUI/Intermediate/panelbg5z36xpe9.png
  31. BIN
      GUI/Intermediate/panelbgcompnd5mgso5.png
  32. BIN
      GUI/Intermediate/panelbgcompv3s1ybtk.png
  33. BIN
      GUI/Intermediate/panelbgwfeyn69q.png
  34. BIN
      GUI/Intermediate/panelbgz5ok_gwe.png
  35. BIN
      GUI/Output/DeviceIcon.png
  36. BIN
      GUI/Output/DeviceNavigator.png
  37. BIN
      GUI/Output/DeviceNavigatorFolded.png
  38. BIN
      GUI/Output/DevicePaletteImage.png
  39. BIN
      GUI/Output/DeviceTrackListThumbnail.png
  40. BIN
      GUI/Output/Reason_GUI_ONOFF maker x5 002.png
  41. BIN
      GUI/Output/Reason_GUI_Panel_back.png
  42. BIN
      GUI/Output/Reason_GUI_Panel_front.png
  43. BIN
      GUI/Output/Reason_GUI_back_Fold.png
  44. BIN
      GUI/Output/Reason_GUI_big_knob-reframed.png
  45. BIN
      GUI/Output/Reason_GUI_front_Fold.png
  46. BIN
      GUI/Output/Reason_GUI_horizontal_button-reframed.png
  47. BIN
      GUI/Output/Reason_GUI_horizontal_switch-reframed.png
  48. BIN
      GUI/Output/Reason_GUI_small_knob-reframed.png
  49. BIN
      GUI/Output/Reason_GUI_small_knob_switch-reframed.png
  50. BIN
      GUI/Output/Reason_GUI_vertical_button-reframed.png
  51. 150 0
      GUI/Output/gui.lua
  52. 282 0
      GUI/RE2DRender.log
  53. BIN
      GUI2D/Knob_Blue.png
  54. BIN
      GUI2D/Knob_Green.png
  55. BIN
      GUI2D/Knob_Orange.png
  56. BIN
      GUI2D/ONOFF maker x5 002.png
  57. BIN
      GUI2D/Panel_back.png
  58. BIN
      GUI2D/Panel_front.png
  59. BIN
      GUI2D/PatchBrowseGroup.png
  60. BIN
      GUI2D/Placeholder.png
  61. 17 0
      GUI2D/RE2DRender.log
  62. BIN
      GUI2D/SharedCVJack.png
  63. BIN
      GUI2D/back_Fold.png
  64. BIN
      GUI2D/big_knob-reframed.png
  65. BIN
      GUI2D/big_knob.png
  66. 70 0
      GUI2D/device_2D.lua
  67. BIN
      GUI2D/front_Fold.png
  68. 120 0
      GUI2D/hdgui_2D.lua
  69. BIN
      GUI2D/horizontal_button-reframed.png
  70. BIN
      GUI2D/horizontal_button.png
  71. BIN
      GUI2D/horizontal_switch-reframed.png
  72. BIN
      GUI2D/horizontal_switch.png
  73. BIN
      GUI2D/small_knob-reframed.png
  74. BIN
      GUI2D/small_knob.png
  75. BIN
      GUI2D/small_knob_switch-reframed.png
  76. BIN
      GUI2D/small_knob_switch-reframed0002.png
  77. BIN
      GUI2D/small_knob_switch.png
  78. BIN
      GUI2D/vertical_button-reframed.png
  79. BIN
      GUI2D/vertical_button.png
  80. 14 0
      JukeboxABI.plist
  81. 9 0
      Jukebox_Exports.cpp
  82. 14 0
      Jukebox_Exports.plist
  83. 6 0
      Resources/English/texts.lua
  84. 20 0
      motherboard_def.lua
  85. 14 0
      picolibc.plist
  86. 33 0
      realtime_controller.lua

+ 155 - 0
CPPbegin/Imperfector.cpp

@@ -0,0 +1,155 @@
+#include "Imperfector.h"
+#include "StdInclude.h"
+#include <cmath>
+
+
+
+namespace {
+
+#if DEBUG
+
+	// This must hold true at the start/end of each batch (i.e. if we handle all of the diffs in one render batch this should be valid but if we only handle some of the diffs it might not be )
+	bool CheckSampleParamsInvariant(const TGUISampleParameters& iSampleParams) {
+		JBOX_ASSERT(iSampleParams.fRootNote < 128);
+		JBOX_ASSERT(iSampleParams.fTuneCents >= -50)
+			JBOX_ASSERT(iSampleParams.fTuneCents <= 50);
+		JBOX_ASSERT(iSampleParams.fPlayRangeStart >= 0.0f);
+		JBOX_ASSERT(iSampleParams.fPlayRangeEnd <= 1.0f);
+		JBOX_ASSERT(iSampleParams.fPlayRangeStart <= iSampleParams.fPlayRangeEnd);
+		JBOX_ASSERT(iSampleParams.fLoopRangeStart >= 0.0f);
+		JBOX_ASSERT(iSampleParams.fLoopRangeEnd <= 1.0f);
+		JBOX_ASSERT(iSampleParams.fLoopRangeStart >= iSampleParams.fPlayRangeStart);
+		JBOX_ASSERT(iSampleParams.fLoopRangeEnd <= iSampleParams.fPlayRangeEnd);
+		JBOX_ASSERT(iSampleParams.fLoopRangeStart <= iSampleParams.fLoopRangeEnd);
+		JBOX_ASSERT(iSampleParams.fLoopMode <= kLoopMode_FwdBwdLoopMode);
+		JBOX_ASSERT(iSampleParams.fVolumeLevel <= 127);
+		return true;
+	}
+
+#endif //DEBUG
+
+	void UpdateZoneParametersFromDiff(const TJBox_PropertyDiff& iDiff, TGUISampleParameters& ioZP) {
+
+		const TJBox_Float64 numberDouble = JBox_GetNumber(iDiff.fCurrentValue);
+		const TJBox_Int8 numberInt8 = static_cast<TJBox_Int8>(numberDouble);
+		const TJBox_UInt8 numberUInt8 = static_cast<TJBox_UInt8>(numberDouble);
+		switch (iDiff.fPropertyTag) {
+		case kJBox_UserSampleRootKey:
+			ioZP.fRootNote = numberUInt8;
+			break;
+		case kJBox_UserSampleTuneCents:
+			ioZP.fTuneCents = numberInt8 - 50;
+			break;
+		case kJBox_UserSamplePlayRangeStart:
+			ioZP.fPlayRangeStart = numberDouble;
+			break;
+		case kJBox_UserSamplePlayRangeEnd:
+			ioZP.fPlayRangeEnd = numberDouble;
+			break;
+		case kJBox_UserSampleLoopMode:
+			ioZP.fLoopMode = numberUInt8;
+			break;
+		case kJBox_UserSampleLoopRangeStart:
+			ioZP.fLoopRangeStart = numberDouble;
+			break;
+		case kJBox_UserSampleLoopRangeEnd:
+			ioZP.fLoopRangeEnd = numberDouble;
+			break;
+		case kJBox_UserSamplePreviewVolumeLevel:
+			ioZP.fVolumeLevel = numberUInt8;
+			break;
+		default:
+			JBOX_ASSERT(false);
+	}
+}
+
+} // namespace
+
+TJBox_Int64 CImperfector::TagToInt(const TJBox_Tag iTag) const
+{
+	const TJBox_Value& jboxValue = JBox_LoadMOMPropertyByTag(fMotherBoardCustomPropertiesRef, iTag);
+	const TJBox_Float64& valueFloat = JBox_GetNumber(jboxValue);
+	const TJBox_Int64& value = static_cast<TJBox_Int64>(valueFloat);
+	return value;
+}
+
+TJBox_Float64 CImperfector::TagToFloat(const TJBox_Tag iTag) const
+{
+	const TJBox_Value& jboxValue = JBox_LoadMOMPropertyByTag(fMotherBoardCustomPropertiesRef, iTag);
+	return JBox_GetNumber(jboxValue);
+
+}
+
+TJBox_Bool CImperfector::TagToBool(const TJBox_Tag iTag) const
+{
+	const TJBox_Value& jboxValue = JBox_LoadMOMPropertyByTag(fMotherBoardCustomPropertiesRef, iTag);
+	return JBox_GetBoolean(jboxValue);
+	return TJBox_Bool();
+}
+
+
+CImperfector::CImperfector(TJBox_Float64 iSampleRate) 
+	:
+	fIsPlaying(false),
+	fSampleRate(iSampleRate),
+	fLastNumeratorNote(kInvalidNoteNumber),
+	fLastDenominatorNote(kInvalidNoteNumber),
+	fLastPosition(0)
+{
+	CustomPropertiesRef = JBox_GetMotherboardObjectRef("/custom_properties");
+	fTransportRef = JBox_GetMotherboardObjectRef("/transport");
+	fNoteStates = JBox_GetMotherboardObjectRef("/note_states");
+	fEnvironmenRef = JBox_GetMotherboardObjectRef("/environment");
+
+	// CV inputs
+	TJBox_ObjectRef numeratorNoteCVRef = JBox_GetMotherboardObjectRef("/cv_inputs/numerator_note_cv");
+	fNumeratorNoteCVInputRef = JBox_MakePropertyRef(numeratorNoteCVRef, "value");
+	fNumeratorNoteCVConnectedRef = JBox_MakePropertyRef(numeratorNoteCVRef, "connected");
+	TJBox_ObjectRef denominatorNoteCVRef = JBox_GetMotherboardObjectRef("/cv_inputs/denominator_note_cv");
+	fDenominatorNoteCVInputRef = JBox_MakePropertyRef(denominatorNoteCVRef, "value");
+	fDenominatorNoteCVConnectedRef = JBox_MakePropertyRef(denominatorNoteCVRef, "connected");
+
+}
+
+void CImperfector::RenderBatch(const TJBox_PropertyDiff iPropertyDiffs[], TJBox_UInt32 iDiffCount) {
+}
+
+void CImperfector::HandleDiffs(const TJBox_PropertyDiff iPropertyDiffs[], TJBox_UInt32 iDiffCount)
+{
+	for (TJBox_UInt32 i = 0; i < iDiffCount; ++i) {
+		const TJBox_PropertyDiff& diff = iPropertyDiffs[i];
+
+		if (diff.fPropertyRef.fObject == fTransportRef && diff.fPropertyTag == kJBox_TransportPlaying)
+		{
+			fIsPlaying = JBox_GetBoolean(diff.fCurrentValue);
+		}
+		else if (diff.fPropertyRef.fObject == fTransportRef && diff.fPropertyTag == kJBox_TransportLoopEnabled)
+		{
+			fIsLooping = JBox_GetBoolean(diff.fCurrentValue);
+		}
+		else if (diff.fPropertyRef.fObject == fTransportRef && diff.fPropertyTag == kJBox_TransportTempo)
+		{
+			fTempo = JBox_GetNumber(diff.fCurrentValue);
+		}
+		else if (diff.fPropertyRef.fObject == fEnvironmenRef && diff.fPropertyTag == kJBox_EnvironmentPlayerBypassed)
+		{
+			fIsBypassedByHost = JBox_GetBoolean(diff.fCurrentValue);
+		}
+		else if (diff.fPropertyRef.fObject == fCustomPropertiesRef && diff.fPropertyTag == kOnOffTag)
+		{
+			fIsEnabled = JBox_GetBoolean(diff.fCurrentValue);
+		}
+	}
+}
+
+void CImperfector::FlashNoteOnLamp()
+{
+}
+
+void CImperfector::HandleNoteOnLampTurnOff()
+{
+}
+
+void CImperfector::ResetIfRequested()
+{
+}

+ 79 - 0
CPPbegin/Imperfector.h

@@ -0,0 +1,79 @@
+#pragma once
+#ifndef IMPERFECTORSTATE_H
+#define IMPERFECTORSTATE_H
+
+#include "Jukebox.h"
+#include <utility>
+
+
+/*
+include guards: In basic sample they uses this to check if this guard is define, if not, it`s starts define it  
+*/
+
+
+
+class CImperfector 
+{
+public: explicit CImperfector();
+
+	  // No destructor since this class is allocated by JBox_Export_CreateNativeObject,
+	  //	which means that the destructor would never be called anyway (though any memory we allocated will be automatically deallocated)
+  //	public: ~CVerySimpleSampler();
+	  /**
+	   * @brief Checks incoming diffs to see if they're note on:s/note offs (i.e. MIDI notes) and if so, add voices to the voice pool
+	   * also checks any changes of the sample parameters
+	   */
+private: void HandleDiffs(const TJBox_PropertyDiff iPropertyDiffs[], TJBox_UInt32 iDiffCount);
+private: TJBox_Int64 TagToInt(const TJBox_Tag iTag) const;
+private: TJBox_Bool TagToBool(const TJBox_Tag iTag) const;
+private: TJBox_Float64 TagToFloat(const TJBox_Tag iTag) const;
+public: void FlashNoteOnLamp();
+public: void HandleNoteOnLampTurnOff();
+public: void ResetIfRequested();
+
+	  /**
+	   * @brief	Main starting point for rendering audio
+	   * @details	One of the first thing you'll stumble upon as a rack extension developer is if properties should be
+	   *			fetched using "diffs" or by use of Jukebox SDK functions such as JBox_LoadMOMProperty. You have both
+	   *			options and they have their pros and cons. In this example most properties are fetched using
+	   *			JBox_LoadMOMProperty, but note diffs are fetched through iPropertyDiffs. In order to get these diffs
+	   *			you have to set them up in realtime_controller.lua/rt_input_setup/notify .
+	   **/
+public: void RenderBatch(const TJBox_PropertyDiff iPropertyDiffs[], TJBox_UInt32 iDiffCount);
+
+	  // State created in CreateNativeObject, references to different kind of properties in host
+private: TJBox_ObjectRef fEnvironmentRef;
+private: TJBox_ObjectRef fDeviceHostRef;
+private: TJBox_ObjectRef fTransportRef;
+private: TJBox_ObjectRef fNoteStates;
+private: TJBox_ObjectRef fMotherBoardCustomPropertiesRef;
+
+	   // VerySimpleSampler specific property references
+private: TJBox_ObjectRef fAudioOutLeftObjectRef;
+private: TJBox_ObjectRef fAudioOutRightObjectRef;
+private: TJBox_PropertyRef fNoteOnPropertyRef;
+
+private: TJBox_PropertyRef fSampleDataStringPropertyRef;
+
+	   // State only valid during a RenderBatch call
+private: TJBox_Float64 fSampleRate;
+
+	   // State to be used between calls (remembering last values)
+private: TJBox_Float64 fLastRequestResetCounter;
+private: TJBox_Float64 fSecondsBeforeNoteOnTurnOff;
+
+//	   // References to the native objects containing samples
+//private: NSUtil::StaticVector<TJBox_PropertyRef, kNumberOfSampleZones> fSampleNativeObjectRefs;
+//	   // The current sample parameters for each zone
+//private: NSUtil::StaticVector<TGUISampleParameters, kNumberOfSampleZones> fSampleZoneParameters;
+//	   // References to each sample parameter for each zone
+//private: NSUtil::StaticVector<TJBox_ObjectRef, kNumberOfSampleZones> fSampleZoneObjectRefs;
+//	   // Our main pool of voices that render audio data
+//private: CVoicePool fVoicePool;
+private: bool fSampleDisplayNeedsUpdate;
+private: std::size_t fLastSampleZoneIndex;
+
+};
+
+
+#endif

+ 45 - 0
CPPbegin/StdInclude.h

@@ -0,0 +1,45 @@
+#pragma once
+
+
+#ifdef _MSC_VER
+	// This is just a dummy to get intellisense for JukeBox stuff
+	#include "../JukeboxSDK/SDK/API/Jukebox.h"
+	#include "../JukeboxSDK/SDK/API/JukeboxTypes.h" 
+	#ifndef JUKEBOX_VISUALDEBUG
+		// We still want to be able to compile VisualDebug configuration
+		static_assert(false, "This shouldnt be compiled with Visual Studio");
+	#endif //JUKEBOX_VISUALDEBUG
+
+#else
+	#include "Jukebox.h"
+#endif
+
+#ifndef DEBUG
+	#ifdef NDEBUG
+		#define DEBUG 0
+	#else
+		#define DEBUG 1
+	#endif
+#endif
+
+
+#if DEBUG
+	#define CHECKINVARIANT() CheckInvariant(__FUNCTION__)
+	#define CHECKINVARIANT_OTHER() iOther.CheckInvariant("iOther")
+	#define IF_DEBUG(x) x
+	#define ASSERT JBOX_ASSERT
+	#define ASSERT_INVARIANT(x) JBOX_ASSERT_MESSAGE(x, iFunctionName)
+	#define ASSERT_MSG JBOX_ASSERT_MESSAGE
+#else
+	#define CHECKINVARIANT()
+	#define CHECKINVARIANT_OTHER()
+	#define IF_DEBUG(x)
+	#define ASSERT(x)
+	#define ASSERT_INVARIANT(x)
+	#define ASSERT_MSG(x, y)
+#endif
+
+#include <cstring>
+#include <cstdint>
+#include <cmath>
+

BIN
GUI/Intermediate/Filmstrips/Reason_GUI_ONOFF maker x5 002.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_Panel_back.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_back_Fold.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_big_knob-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_front_Fold.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_horizontal_button-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_horizontal_switch-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_small_knob-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_small_knob_switch-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_GUI_vertical_button-reframed.png


BIN
GUI/Intermediate/Filmstrips/Reason_Icon_Snapshot_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Reason_Navigator_Snapshot_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Reason_Navigator_Snapshot_front_Fold.png


BIN
GUI/Intermediate/Filmstrips/Reason_Palette_Snapshot_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Reason_TrackListIcon_Snapshot_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Snapshot_Panel_front.png


BIN
GUI/Intermediate/Filmstrips/Snapshot_front_Fold.png


BIN
GUI/Intermediate/cropframe361r385x.png


BIN
GUI/Intermediate/cropframe5fikrvgn.png


BIN
GUI/Intermediate/cropframed_p69zw7.png


BIN
GUI/Intermediate/cropframeibprxap4.png


BIN
GUI/Intermediate/cropframeiz9y3hsr.png


BIN
GUI/Intermediate/cropframeku89b9gv.png


BIN
GUI/Intermediate/cropframetd5qif4_.png


+ 150 - 0
GUI/Intermediate/gui.lua

@@ -0,0 +1,150 @@
+format_version = "4.0"
+front = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_Panel_front"},
+	widgets = {
+		jbox.analog_knob{
+			transform = {37,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob_switch-reframed", frames = 3},
+			value = "/custom_properties/randomize_lfo_shape",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {90,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_speed",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {624,119},
+			animation = jbox.image_sequence{path = "Reason_GUI_vertical_button-reframed", frames = 3},
+			value = "/custom_properties/randomize_lfo_sync",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {146,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_shift",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {202,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.zero_snap_knob{
+			transform = {274,44},
+			animation = jbox.image_sequence{path = "Reason_GUI_big_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {341,144},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_switch-reframed", frames = 3},
+			value = "/custom_properties/randomize_mode",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {672,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob_switch-reframed", frames = 3},
+			value = "/custom_properties/stringize_lfo_shape",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {619,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_speed",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {93,119},
+			animation = jbox.image_sequence{path = "Reason_GUI_vertical_button-reframed", frames = 3},
+			value = "/custom_properties/stringize_lfo_sync",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {563,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_shift",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {507,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.zero_snap_knob{
+			transform = {393,44},
+			animation = jbox.image_sequence{path = "Reason_GUI_big_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {393,144},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_switch-reframed", frames = 3},
+			value = "/custom_properties/stringize_mode",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {703,157},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_button-reframed", frames = 2},
+			value = "/custom_properties/imperfector_direction",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.toggle_button{
+			transform = {30,4},
+			background = jbox.image_sequence{path = "Reason_GUI_ONOFF maker x5 002", frames = 4},
+			value = "/custom_properties/OnOff",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.patch_name{
+			transform = {127,10},
+			center = false,
+			fg_color = { 96, 96, 96 },
+			height = 16,
+			loader_alt_color = { 0, 0, 0 },
+			text_style = "Arial medium font",
+			width = 114,
+		},
+	}
+}
+
+folded_front = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_front_Fold"},
+	widgets = {
+	}
+}
+
+back = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_Panel_back"},
+	widgets = {
+		jbox.placeholder{
+			transform = {420,40},
+		},
+	}
+}
+
+folded_back = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_back_Fold"},
+	cable_origin = {377,15},
+	widgets = {
+	}
+}
+

BIN
GUI/Intermediate/panelbg5z36xpe9.png


BIN
GUI/Intermediate/panelbgcompnd5mgso5.png


BIN
GUI/Intermediate/panelbgcompv3s1ybtk.png


BIN
GUI/Intermediate/panelbgwfeyn69q.png


BIN
GUI/Intermediate/panelbgz5ok_gwe.png


BIN
GUI/Output/DeviceIcon.png


BIN
GUI/Output/DeviceNavigator.png


BIN
GUI/Output/DeviceNavigatorFolded.png


BIN
GUI/Output/DevicePaletteImage.png


BIN
GUI/Output/DeviceTrackListThumbnail.png


BIN
GUI/Output/Reason_GUI_ONOFF maker x5 002.png


BIN
GUI/Output/Reason_GUI_Panel_back.png


BIN
GUI/Output/Reason_GUI_Panel_front.png


BIN
GUI/Output/Reason_GUI_back_Fold.png


BIN
GUI/Output/Reason_GUI_big_knob-reframed.png


BIN
GUI/Output/Reason_GUI_front_Fold.png


BIN
GUI/Output/Reason_GUI_horizontal_button-reframed.png


BIN
GUI/Output/Reason_GUI_horizontal_switch-reframed.png


BIN
GUI/Output/Reason_GUI_small_knob-reframed.png


BIN
GUI/Output/Reason_GUI_small_knob_switch-reframed.png


BIN
GUI/Output/Reason_GUI_vertical_button-reframed.png


+ 150 - 0
GUI/Output/gui.lua

@@ -0,0 +1,150 @@
+format_version = "4.0"
+front = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_Panel_front"},
+	widgets = {
+		jbox.analog_knob{
+			transform = {37,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob_switch-reframed", frames = 3},
+			value = "/custom_properties/randomize_lfo_shape",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {90,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_speed",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {624,119},
+			animation = jbox.image_sequence{path = "Reason_GUI_vertical_button-reframed", frames = 3},
+			value = "/custom_properties/randomize_lfo_sync",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {146,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_shift",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {202,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_lfo_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.zero_snap_knob{
+			transform = {274,44},
+			animation = jbox.image_sequence{path = "Reason_GUI_big_knob-reframed", frames = 72},
+			value = "/custom_properties/randomize_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {341,144},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_switch-reframed", frames = 3},
+			value = "/custom_properties/randomize_mode",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {672,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob_switch-reframed", frames = 3},
+			value = "/custom_properties/stringize_lfo_shape",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {619,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_speed",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {93,119},
+			animation = jbox.image_sequence{path = "Reason_GUI_vertical_button-reframed", frames = 3},
+			value = "/custom_properties/stringize_lfo_sync",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {563,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_shift",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {507,55},
+			animation = jbox.image_sequence{path = "Reason_GUI_small_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_lfo_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.zero_snap_knob{
+			transform = {393,44},
+			animation = jbox.image_sequence{path = "Reason_GUI_big_knob-reframed", frames = 72},
+			value = "/custom_properties/stringize_amount",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {393,144},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_switch-reframed", frames = 3},
+			value = "/custom_properties/stringize_mode",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.analog_knob{
+			transform = {703,157},
+			animation = jbox.image_sequence{path = "Reason_GUI_horizontal_button-reframed", frames = 2},
+			value = "/custom_properties/imperfector_direction",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.toggle_button{
+			transform = {30,4},
+			background = jbox.image_sequence{path = "Reason_GUI_ONOFF maker x5 002", frames = 4},
+			value = "/custom_properties/OnOff",
+			show_remote_box = true,
+			show_automation_rect = true,
+		},
+		jbox.patch_name{
+			transform = {127,10},
+			center = false,
+			fg_color = { 96, 96, 96 },
+			height = 16,
+			loader_alt_color = { 0, 0, 0 },
+			text_style = "Arial medium font",
+			width = 114,
+		},
+	}
+}
+
+folded_front = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_front_Fold"},
+	widgets = {
+	}
+}
+
+back = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_Panel_back"},
+	widgets = {
+		jbox.placeholder{
+			transform = {420,40},
+		},
+	}
+}
+
+folded_back = jbox.panel{
+	backdrop = jbox.image{path="Reason_GUI_back_Fold"},
+	cable_origin = {377,15},
+	widgets = {
+	}
+}
+

+ 282 - 0
GUI/RE2DRender.log

@@ -0,0 +1,282 @@
+
+RE2DRender 2.0.9d9
+
+Processing GUI at 1/5 scale...
+
+OS says system has 12 logical cores
+Deleting Intermediate folder
+Deleting Output folder
+
+Reading device_2D.lua
+Validating image files
+Progress: [###############]
+          [###############] - Done.
+    "small_knob.png"
+    "Panel_front.png"
+    "vertical_button.png"
+    "PatchBrowseGroup.png"
+    "ONOFF maker x5 002.png"
+    "horizontal_button.png"
+    "big_knob.png"
+    "horizontal_switch.png"
+    size = { 570, 81 }
+    "small_knob_switch.png"
+    "front_Fold.png"
+    "Placeholder.png"
+    "Panel_back.png"
+    "back_Fold.png"
+
+Panel 'front' uses background image 'Panel_front'
+Panel 'folded_front' uses background image 'front_Fold'
+Panel 'back' uses background image 'Panel_back'
+Panel 'folded_back' uses background image 'back_Fold'
+
+Device is 3U rack units
+
+Panels in device scenegraph:
+
+---- Panel 'front':
+
+Node "Bg" is visual "Panel_front" at offset = { 0, 0 } 
+Node "Imperfector_Direction" is visual "horizontal_button-reframed" at offset = { 3514, 784 } 
+Node "OnOff" is visual "ONOFF maker x5 002" at offset = { 150, 20 } 
+Node "PatchBrowseGroup" is visual "PatchBrowseGroup" at offset = { 0, 0 } 
+Node "PatchNameSurface" is empty visual [size = { 570, 81 }] at offset = { 635, 50 } 
+Node "Randomize_Amount" is visual "big_knob-reframed" at offset = { 1371, 221 } 
+Node "Randomize_LFO_Amount" is visual "small_knob-reframed" at offset = { 1010, 276 } 
+Node "Randomize_LFO_Shape" is visual "small_knob_switch-reframed" at offset = { 186, 276 } 
+Node "Randomize_LFO_Shift" is visual "small_knob-reframed" at offset = { 729, 276 } 
+Node "Randomize_LFO_Speed" is visual "small_knob-reframed" at offset = { 449, 276 } 
+Node "Randomize_LFO_Sync" is visual "vertical_button-reframed" at offset = { 3122, 595 } 
+Node "Randomize_Mode" is visual "horizontal_switch-reframed" at offset = { 1707, 718 } 
+Node "Stringize_Amount" is visual "big_knob-reframed" at offset = { 1963, 221 } 
+Node "Stringize_LFO_Amount" is visual "small_knob-reframed" at offset = { 2535, 276 } 
+Node "Stringize_LFO_Shape" is visual "small_knob_switch-reframed" at offset = { 3360, 276 } 
+Node "Stringize_LFO_Shift" is visual "small_knob-reframed" at offset = { 2816, 276 } 
+Node "Stringize_LFO_Speed" is visual "small_knob-reframed" at offset = { 3096, 276 } 
+Node "Stringize_LFO_Sync" is visual "vertical_button-reframed" at offset = { 466, 595 } 
+Node "Stringize_Mode" is visual "horizontal_switch-reframed" at offset = { 1963, 718 } 
+
+---- Panel 'folded_front':
+
+Node "Bg" is visual "front_Fold" at offset = { 0, 0 } 
+
+---- Panel 'back':
+
+Node "Bg" is visual "Panel_back" at offset = { 0, 0 } 
+Node "Placeholder" is visual "Placeholder" at offset = { 2100, 200 } 
+
+---- Panel 'folded_back':
+
+Node "Bg" is visual "back_Fold" at offset = { 0, 0 } 
+
+Node "CableOrigin" is invisible
+
+-----------------------------------------------------------------------------
+
+Reading hdgui_2D.lua
+Reading widgets for panel 'front'
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for zero_snap_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for zero_snap_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for analog_knob
+        value: OK!
+    Checking settings for toggle_button
+        value: OK!
+    Checking settings for patch_name
+        text_style: OK!
+        center: OK!
+        loader_alt_color: OK!
+        fg_color: OK!
+Reading widgets for panel 'folded_front'
+Reading widgets for panel 'back'
+    Checking settings for placeholder
+Reading widgets for panel 'folded_back'
+
+Processing GUI definition
+
+    Panel 'front'
+    Detecting unsupported overlaps if any...
+    It was fine.
+    Checking if all nodes are contained in the panel bounds...
+    It was fine.
+
+    Panel 'folded_front'
+    Detecting unsupported overlaps if any...
+    It was fine.
+    Checking if all nodes are contained in the panel bounds...
+    It was fine.
+
+    Panel 'back'
+    Detecting unsupported overlaps if any...
+    It was fine.
+    Checking if all nodes are contained in the panel bounds...
+    It was fine.
+
+    Panel 'folded_back'
+    Detecting unsupported overlaps if any...
+    It was fine.
+    Checking if all nodes are contained in the panel bounds...
+    It was fine.
+
+Validating any custom_display backgrounds...
+None found.
+
+-----------------------------------------------------------------------------
+
+Exporting gui.lua
+Panel 'front'
+Panel 'folded_front'
+Panel 'back'
+Panel 'folded_back'
+
+Compositing background image for each panel
+compositing image 'PatchBrowseGroup' onto background image 'Panel_front'
+
+Scaling images and filmstrips to target resolution
+'small_knob-reframed.png'
+'horizontal_switch-reframed.png'
+'big_knob-reframed.png'
+'vertical_button-reframed.png'
+'horizontal_button-reframed.png'
+'small_knob_switch-reframed.png'
+'ONOFF maker x5 002.png'
+'Panel_front.png'
+'front_Fold.png'
+'Panel_back.png'
+'back_Fold.png'
+Progress: [###############]
+          [###############] - Done.
+
+Gathering snapshots for navigator, icons, etc.
+No thumb snapshots supplied - generating...
+
+Generating full snapshot of panel 'front'
+
+Node order (from hdgui_2D.lua):
+    Randomize_LFO_Shape
+    Randomize_LFO_Speed
+    Randomize_LFO_Sync
+    Randomize_LFO_Shift
+    Randomize_LFO_Amount
+    Randomize_Amount
+    Randomize_Mode
+    Stringize_LFO_Shape
+    Stringize_LFO_Speed
+    Stringize_LFO_Sync
+    Stringize_LFO_Shift
+    Stringize_LFO_Amount
+    Stringize_Amount
+    Stringize_Mode
+    Imperfector_Direction
+    OnOff
+    PatchNameSurface
+
+cropping in first frame of filmstrip 'small_knob_switch-reframed'
+
+cropping in first frame of filmstrip 'small_knob-reframed'
+
+cropping in first frame of filmstrip 'vertical_button-reframed'
+
+cropping in first frame of filmstrip 'big_knob-reframed'
+
+cropping in first frame of filmstrip 'horizontal_switch-reframed'
+
+cropping in first frame of filmstrip 'horizontal_button-reframed'
+
+cropping in first frame of filmstrip 'ONOFF maker x5 002'
+Progress: [###############]
+          [###############] - Done.
+compositing image 'PatchBrowseGroup' onto background image 'Panel_front'
+compositing image 'small_knob_switch-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'vertical_button-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'big_knob-reframed' onto background image 'Panel_front'
+compositing image 'horizontal_switch-reframed' onto background image 'Panel_front'
+compositing image 'small_knob_switch-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'vertical_button-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'small_knob-reframed' onto background image 'Panel_front'
+compositing image 'big_knob-reframed' onto background image 'Panel_front'
+compositing image 'horizontal_switch-reframed' onto background image 'Panel_front'
+compositing image 'horizontal_button-reframed' onto background image 'Panel_front'
+compositing image 'ONOFF maker x5 002' onto background image 'Panel_front'
+compositing, path is 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\panelbgcompnd5mgso5.png'
+
+Generating full snapshot of panel 'folded_front'
+path is 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI2D\front_Fold.png'
+
+Copying GUI filmstrips from 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips' to 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output'
+Copying 'Reason_GUI_back_Fold.png'
+Copying 'Reason_GUI_big_knob-reframed.png'
+Copying 'Reason_GUI_front_Fold.png'
+Copying 'Reason_GUI_horizontal_button-reframed.png'
+Copying 'Reason_GUI_horizontal_switch-reframed.png'
+Copying 'Reason_GUI_ONOFF maker x5 002.png'
+Copying 'Reason_GUI_Panel_back.png'
+Copying 'Reason_GUI_Panel_front.png'
+Copying 'Reason_GUI_small_knob-reframed.png'
+Copying 'Reason_GUI_small_knob_switch-reframed.png'
+Copying 'Reason_GUI_vertical_button-reframed.png'
+Done.
+
+Copying panel snapshots from 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips' to 'C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output'
+Copying 'Reason_TrackListIcon_Snapshot_Panel_front.png' to 'DeviceTrackListThumbnail.png'
+Copying 'Reason_Navigator_Snapshot_Panel_front.png' to 'DeviceNavigator.png'
+Copying 'Reason_Navigator_Snapshot_front_Fold.png' to 'DeviceNavigatorFolded.png'
+Copying 'Reason_Palette_Snapshot_Panel_front.png' to 'DevicePaletteImage.png'
+Done.
+
+Making DeviceIcon.png ...
+C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\GraphicsMagick\Win64\gm.exe conjure -sourcepath C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips\Reason_Icon_Snapshot_Panel_front.png C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\DeviceIcon.msl
+Done.
+
+Fitting Reason_GUI_Panel_front.png onto rack rails ...
+C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\GraphicsMagick\Win64\gm.exe conjure -backdrop C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips\Reason_GUI_Panel_front.png -rail_L C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip01.png -rail_R C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip02.png -result C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output\Reason_GUI_Panel_front.png C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\RackRails.msl
+Done.
+Fitting Reason_GUI_Panel_back.png onto rack rails ...
+C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\GraphicsMagick\Win64\gm.exe conjure -backdrop C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips\Reason_GUI_Panel_back.png -rail_L C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip06.png -rail_R C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip07.png -result C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output\Reason_GUI_Panel_back.png C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\RackRails.msl
+Done.
+Fitting Reason_GUI_front_Fold.png onto rack rails ...
+C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\GraphicsMagick\Win64\gm.exe conjure -backdrop C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips\Reason_GUI_front_Fold.png -rail_L C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip01.png -rail_R C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip02.png -result C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output\Reason_GUI_front_Fold.png C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\RackRails.msl
+Done.
+Fitting Reason_GUI_back_Fold.png onto rack rails ...
+C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\GraphicsMagick\Win64\gm.exe conjure -backdrop C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Intermediate\Filmstrips\Reason_GUI_back_Fold.png -rail_L C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip06.png -rail_R C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\ReasonBitmaps\RackGenRackStrip07.png -result C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\GUI\Output\Reason_GUI_back_Fold.png C:\Users\jkolp\Desktop\Imperf\ImperfectorRebuild\RE2DRender\PostProcess\RackRails.msl
+Done.
+
+The following images have unsupported frame bounds and a corrected copy was used instead.
+
+    "small_knob.png" - see corrected file named "small_knob-reframed.png"
+    "vertical_button.png" - see corrected file named "vertical_button-reframed.png"
+    "horizontal_button.png" - see corrected file named "horizontal_button-reframed.png"
+    "big_knob.png" - see corrected file named "big_knob-reframed.png"
+    "horizontal_switch.png" - see corrected file named "horizontal_switch-reframed.png"
+    "small_knob_switch.png" - see corrected file named "small_knob_switch-reframed.png"

BIN
GUI2D/Knob_Blue.png


BIN
GUI2D/Knob_Green.png


BIN
GUI2D/Knob_Orange.png


BIN
GUI2D/ONOFF maker x5 002.png


BIN
GUI2D/Panel_back.png


BIN
GUI2D/Panel_front.png


BIN
GUI2D/PatchBrowseGroup.png


BIN
GUI2D/Placeholder.png


+ 17 - 0
GUI2D/RE2DRender.log

@@ -0,0 +1,17 @@
+
+RE2DRender 2.0.9d9
+
+Processing GUI at 1/5 scale...
+
+OS says system has 12 logical cores
+Deleting Output folder
+
+Reading device_2D.lua
+Traceback (most recent call last):
+  File "C:\stuff\scm_p4\Projects\RE2D\RE2DRender\Dev\Source\RE2DRenderStart.py", line 81, in RE2DRender
+  File "C:\stuff\scm_p4\Projects\RE2D\RE2DRender\Dev\Source\Process2DGUI.py", line 732, in Process2DGUI
+  File "C:\stuff\scm_p4\Projects\RE2D\RE2DRender\Dev\Source\Process2DGUI.py", line 367, in Process2DGUIAtScale
+  File "C:\stuff\scm_p4\Projects\RE2D\RE2DRender\Dev\Source\Device2D.py", line 689, in ReadAndValidateDevice2DDefFromDir
+  File "C:\stuff\scm_p4\Projects\RE2D\RE2DRender\Dev\Source\Device2D.py", line 350, in ReadDevice2DFromDirAndMakeFlat
+FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\jkolp\\Desktop\\Imperf\\ImperfectorRebuild\\GUI\\device_2D.lua'
+

BIN
GUI2D/SharedCVJack.png


BIN
GUI2D/back_Fold.png


BIN
GUI2D/big_knob-reframed.png


BIN
GUI2D/big_knob.png


+ 70 - 0
GUI2D/device_2D.lua

@@ -0,0 +1,70 @@
+format_version = "2.0"
+
+re_edit = { version = "1.1.0" }
+
+--------------------------------------------------------------------------
+-- front
+--------------------------------------------------------------------------
+front = {}
+
+-- Main panel
+front["Panel_front_bg"] = { { path = "Panel_front" } }
+
+-- Decals
+re_edit.front = { decals = {} }
+front[1] = { offset = { 320, 30 }, { path = "PatchBrowseGroup" } } -- PatchBrowseGroup
+re_edit.front.decals[1] = "PatchBrowseGroup"
+
+-- Widgets
+front["Randomize_LFO_Shape"] = { offset = { 186, 276 }, { path = "small_knob_switch", frames = 3 } }
+front["Randomize_LFO_Speed"] = { offset = { 449, 276 }, { path = "small_knob", frames = 72 } }
+front["Randomize_LFO_Sync"] = { offset = { 3122, 595 }, { path = "vertical_button", frames = 3 } }
+front["Randomize_LFO_Shift"] = { offset = { 729, 276 }, { path = "small_knob", frames = 72 } }
+front["Randomize_LFO_Amount"] = { offset = { 1010, 276 }, { path = "small_knob", frames = 72 } }
+front["Randomize_Amount"] = { offset = { 1371, 221 }, { path = "big_knob", frames = 72 } }
+front["Randomize_Mode"] = { offset = { 1707, 718 }, { path = "horizontal_switch", frames = 3 } }
+front["Stringize_LFO_Shape"] = { offset = { 3360, 276 }, { path = "small_knob_switch", frames = 3 } }
+front["Stringize_LFO_Speed"] = { offset = { 3096, 276 }, { path = "small_knob", frames = 72 } }
+front["Stringize_LFO_Sync"] = { offset = { 466, 595 }, { path = "vertical_button", frames = 3 } }
+front["Stringize_LFO_Shift"] = { offset = { 2816, 276 }, { path = "small_knob", frames = 72 } }
+front["Stringize_LFO_Amount"] = { offset = { 2535, 276 }, { path = "small_knob", frames = 72 } }
+front["Stringize_Amount"] = { offset = { 1963, 221 }, { path = "big_knob", frames = 72 } }
+front["Stringize_Mode"] = { offset = { 1963, 718 }, { path = "horizontal_switch", frames = 3 } }
+front["Imperfector_Direction"] = { offset = { 3514, 784 }, { path = "horizontal_button", frames = 2 } }
+front["OnOff"] = { offset = { 170, 20 }, { path = "ONOFF maker x5 002", frames = 4 } }
+front["PatchNameSurface"] = { offset = { 635, 40 }, { size = { 570, 81 } } }
+
+--------------------------------------------------------------------------
+-- back
+--------------------------------------------------------------------------
+back = {}
+
+-- Main panel
+back["Panel_back_bg"] = { { path = "Panel_back" } }
+
+-- Widgets
+back["Placeholder"] = { offset = { 2100, 200 }, { path = "Placeholder" } }
+
+--------------------------------------------------------------------------
+-- folded_front
+--------------------------------------------------------------------------
+folded_front = {}
+
+-- Main panel
+folded_front["Panel_folded_front_bg"] = { { path = "front_Fold" } }
+
+-- Widgets
+
+--------------------------------------------------------------------------
+-- folded_back
+--------------------------------------------------------------------------
+folded_back = {}
+
+-- Main panel
+folded_back["Panel_folded_back_bg"] = { { path = "back_Fold" } }
+
+-- Widgets
+
+-- Cable Origin
+folded_back["CableOrigin"] = { offset = { 1885, 75 } }
+

BIN
GUI2D/front_Fold.png


+ 120 - 0
GUI2D/hdgui_2D.lua

@@ -0,0 +1,120 @@
+format_version = "2.0"
+
+re_edit = { version = "1.1.0" }
+
+--------------------------------------------------------------------------
+-- front
+--------------------------------------------------------------------------
+front_widgets = {}
+-- Randomize_LFO_Shape
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_LFO_Shape" },
+  value = "/custom_properties/randomize_lfo_shape"
+}
+-- Randomize_LFO_Speed
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_LFO_Speed" },
+  value = "/custom_properties/randomize_lfo_speed"
+}
+-- Randomize_LFO_Sync
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_LFO_Sync" },
+  value = "/custom_properties/randomize_lfo_sync"
+}
+-- Randomize_LFO_Shift
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_LFO_Shift" },
+  value = "/custom_properties/randomize_lfo_shift"
+}
+-- Randomize_LFO_Amount
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_LFO_Amount" },
+  value = "/custom_properties/randomize_lfo_amount"
+}
+-- Randomize_Amount
+front_widgets[#front_widgets + 1] = jbox.zero_snap_knob {
+  graphics = { node = "Randomize_Amount" },
+  value = "/custom_properties/randomize_amount"
+}
+-- Randomize_Mode
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Randomize_Mode" },
+  value = "/custom_properties/randomize_mode"
+}
+-- Stringize_LFO_Shape
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_LFO_Shape" },
+  value = "/custom_properties/stringize_lfo_shape"
+}
+-- Stringize_LFO_Speed
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_LFO_Speed" },
+  value = "/custom_properties/stringize_lfo_speed"
+}
+-- Stringize_LFO_Sync
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_LFO_Sync" },
+  value = "/custom_properties/stringize_lfo_sync"
+}
+-- Stringize_LFO_Shift
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_LFO_Shift" },
+  value = "/custom_properties/stringize_lfo_shift"
+}
+-- Stringize_LFO_Amount
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_LFO_Amount" },
+  value = "/custom_properties/stringize_lfo_amount"
+}
+-- Stringize_Amount
+front_widgets[#front_widgets + 1] = jbox.zero_snap_knob {
+  graphics = { node = "Stringize_Amount" },
+  value = "/custom_properties/stringize_amount"
+}
+-- Stringize_Mode
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Stringize_Mode" },
+  value = "/custom_properties/stringize_mode"
+}
+-- Imperfector_Direction
+front_widgets[#front_widgets + 1] = jbox.analog_knob {
+  graphics = { node = "Imperfector_Direction" },
+  value = "/custom_properties/imperfector_direction"
+}
+-- OnOff
+front_widgets[#front_widgets + 1] = jbox.toggle_button {
+  graphics = { node = "OnOff" },
+  value = "/custom_properties/OnOff"
+}
+-- PatchNameSurface
+front_widgets[#front_widgets + 1] = jbox.patch_name {
+  graphics = { node = "PatchNameSurface" },
+  text_style = "Arial medium font",
+  fg_color = {96,96,96},
+  loader_alt_color = {0,0,0},
+  center = false
+}
+front = jbox.panel{ graphics = { node = "Panel_front_bg" }, widgets = front_widgets }
+
+--------------------------------------------------------------------------
+-- back
+--------------------------------------------------------------------------
+back_widgets = {}
+-- Placeholder
+back_widgets[#back_widgets + 1] = jbox.placeholder {
+  graphics = { node = "Placeholder" }
+}
+back = jbox.panel{ graphics = { node = "Panel_back_bg" }, widgets = back_widgets }
+
+--------------------------------------------------------------------------
+-- folded_front
+--------------------------------------------------------------------------
+folded_front_widgets = {}
+folded_front = jbox.panel{ graphics = { node = "Panel_folded_front_bg" }, widgets = folded_front_widgets }
+
+--------------------------------------------------------------------------
+-- folded_back
+--------------------------------------------------------------------------
+folded_back_widgets = {}
+folded_back = jbox.panel{ graphics = { node = "Panel_folded_back_bg" }, cable_origin = { node = "CableOrigin" }, widgets = folded_back_widgets }
+

BIN
GUI2D/horizontal_button-reframed.png


BIN
GUI2D/horizontal_button.png


BIN
GUI2D/horizontal_switch-reframed.png


BIN
GUI2D/horizontal_switch.png


BIN
GUI2D/small_knob-reframed.png


BIN
GUI2D/small_knob.png


BIN
GUI2D/small_knob_switch-reframed.png


BIN
GUI2D/small_knob_switch-reframed0002.png


BIN
GUI2D/small_knob_switch.png


BIN
GUI2D/vertical_button-reframed.png


BIN
GUI2D/vertical_button.png


+ 14 - 0
JukeboxABI.plist

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>clang_version</key>
+<string>clang version 7.0.0 (ssh://bitbucket.org/propellerheadsoftware/jbox-clang.git b2f7fe821444aab3d34050d8ec5d7907ca7673d9) (ssh://bitbucket.org/propellerheadsoftware/jbox-llvm.git 982a00617442e6cb8fcc64509f6ae3737cb572de)</string>
+ <key>files</key>
+ <array>
+ </array>
+ <key>diagnostics</key>
+ <array>
+ </array>
+</dict>
+</plist>

+ 9 - 0
Jukebox_Exports.cpp

@@ -0,0 +1,9 @@
+#include "Jukebox.h"
+
+void* JBox_Export_CreateNativeObject(const char iOperation[], const TJBox_Value iParams[], TJBox_UInt32 iCount) {
+	return nullptr;
+}
+
+void JBox_Export_RenderRealtime(void* privateState, const TJBox_PropertyDiff iPropertyDiffs[], TJBox_UInt32 iDiffCount) {
+
+}

+ 14 - 0
Jukebox_Exports.plist

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>clang_version</key>
+<string>clang version 7.0.0 (ssh://bitbucket.org/propellerheadsoftware/jbox-clang.git b2f7fe821444aab3d34050d8ec5d7907ca7673d9) (ssh://bitbucket.org/propellerheadsoftware/jbox-llvm.git 982a00617442e6cb8fcc64509f6ae3737cb572de)</string>
+ <key>files</key>
+ <array>
+ </array>
+ <key>diagnostics</key>
+ <array>
+ </array>
+</dict>
+</plist>

+ 6 - 0
Resources/English/texts.lua

@@ -0,0 +1,6 @@
+format_version = "1.0"
+
+texts = {
+	["text_Imperfector"] = "Imperfector",
+	["text_RandomizeAmount"] = "Randomize_Amount",
+}

+ 20 - 0
motherboard_def.lua

@@ -0,0 +1,20 @@
+format_version = "3.0"
+
+custom_properties = jbox.property_set{
+	
+	rt_owner = {
+		properties = {
+			Imperfector = jbox.boolean{
+				property_tag = 11,
+				default = false,
+				ui_name = jbox.ui_text("text_Imperfector"),
+				ui_type = jbox.ui_linear({min=0, max=1, units={{decimals=0}}}),
+			}
+		}
+	},
+	rtc_owner = {
+		properties = {
+			instance = jbox.native_object{},
+		}
+	},
+}

+ 14 - 0
picolibc.plist

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>clang_version</key>
+<string>clang version 7.0.0 (ssh://bitbucket.org/propellerheadsoftware/jbox-clang.git b2f7fe821444aab3d34050d8ec5d7907ca7673d9) (ssh://bitbucket.org/propellerheadsoftware/jbox-llvm.git 982a00617442e6cb8fcc64509f6ae3737cb572de)</string>
+ <key>files</key>
+ <array>
+ </array>
+ <key>diagnostics</key>
+ <array>
+ </array>
+</dict>
+</plist>

+ 33 - 0
realtime_controller.lua

@@ -0,0 +1,33 @@
+format_version = "1.0"
+
+rtc_bindings = {
+	{ source = "/environment/system_sample_rate", dest = "/global_rtc/init_instance" },
+	{ source = "/environment/instance_id", dest = "/global_rtc/init_instance" },
+}
+
+global_rtc = {
+	init_instance = function(source_property_path, instance_id)
+		end,
+}
+
+sample_rate_setup = {
+	native = {
+		22050,
+		44100,
+		48000,
+		88200,
+		96000,
+		192000
+	},
+}
+
+rt_input_setup = {
+	notify = {
+		"/note_states/*",
+		"/custom_properties/*",
+	},
+}
+
+
+
+