Переглянути джерело

Merge branch 'main' of https://github.com/polimi-cmls-2025/Chill-Music-Low-Stress
pulled from mai

n

Farnoosh Rad 7 місяців тому
батько
коміт
462988528b
64 змінених файлів з 1562 додано та 0 видалено
  1. 64 0
      JUCE/CMLSProject/CMLSProject.jucer
  2. 50 0
      JUCE/CMLSProject/JuceLibraryCode/JuceHeader.h
  3. 162 0
      JUCE/CMLSProject/JuceLibraryCode/JucePluginDefines.h
  4. 12 0
      JUCE/CMLSProject/JuceLibraryCode/ReadMe.txt
  5. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_basics.cpp
  6. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_basics.mm
  7. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_devices.cpp
  8. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_devices.mm
  9. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_formats.cpp
  10. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_formats.mm
  11. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp
  12. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm
  13. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX_utils.cpp
  14. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_ARA.cpp
  15. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm
  16. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm
  17. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm
  18. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp
  19. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_LV2.mm
  20. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_Standalone.cpp
  21. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_Unity.cpp
  22. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp
  23. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST2.mm
  24. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp
  25. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST3.mm
  26. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors.cpp
  27. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors.mm
  28. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors_ara.cpp
  29. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
  30. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_utils.cpp
  31. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_utils.mm
  32. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_core.cpp
  33. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_core.mm
  34. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_core_CompilationTime.cpp
  35. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_data_structures.cpp
  36. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_data_structures.mm
  37. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_dsp.cpp
  38. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_dsp.mm
  39. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_events.cpp
  40. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_events.mm
  41. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics.cpp
  42. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics.mm
  43. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
  44. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics_Sheenbidi.c
  45. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_basics.cpp
  46. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_basics.mm
  47. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_extra.cpp
  48. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_extra.mm
  49. 8 0
      JUCE/CMLSProject/JuceLibraryCode/include_juce_osc.cpp
  50. 96 0
      JUCE/CMLSProject/Source/CMLSChorus.cpp
  51. 47 0
      JUCE/CMLSProject/Source/CMLSChorus.h
  52. 94 0
      JUCE/CMLSProject/Source/CMLSDelay.cpp
  53. 48 0
      JUCE/CMLSProject/Source/CMLSDelay.h
  54. 56 0
      JUCE/CMLSProject/Source/CMLSReverb.cpp
  55. 24 0
      JUCE/CMLSProject/Source/CMLSReverb.h
  56. 127 0
      JUCE/CMLSProject/Source/PluginEditor.cpp
  57. 58 0
      JUCE/CMLSProject/Source/PluginEditor.h
  58. 216 0
      JUCE/CMLSProject/Source/PluginProcessor.cpp
  59. 81 0
      JUCE/CMLSProject/Source/PluginProcessor.h
  60. BIN
      JUCE/JUCE_UML_Updated_20250504.png
  61. 25 0
      resources for sc and juce/midi_receiver_example.scd
  62. BIN
      resources for sc and juce/osc addresses and values for iDraw OSC.pdf
  63. BIN
      resources for sc and juce/osc addresses and values.pdf
  64. 42 0
      resources for sc and juce/osc_receiver_example.scd

+ 64 - 0
JUCE/CMLSProject/CMLSProject.jucer

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<JUCERPROJECT id="ougwI9" name="CMLSProject" projectType="audioplug" useAppConfig="0"
+              addUsingNamespaceToJuceHeader="0" jucerFormatVersion="1">
+  <MAINGROUP id="bDrKfu" name="CMLSProject">
+    <GROUP id="{9A19DFE9-F67B-A609-08B1-BAA813C4BBCC}" name="Source">
+      <FILE id="YzbLqG" name="CMLSDelay.cpp" compile="1" resource="0" file="Source/CMLSDelay.cpp"/>
+      <FILE id="dKLbRF" name="CMLSDelay.h" compile="0" resource="0" file="Source/CMLSDelay.h"/>
+      <FILE id="NtDDbW" name="CMLSReverb.h" compile="0" resource="0" file="Source/CMLSReverb.h"/>
+      <FILE id="GkC6e8" name="CMLSReverb.cpp" compile="1" resource="0" file="Source/CMLSReverb.cpp"/>
+      <FILE id="bwFEof" name="CMLSChorus.h" compile="0" resource="0" file="Source/CMLSChorus.h"/>
+      <FILE id="bQT4r6" name="CMLSChorus.cpp" compile="1" resource="0" file="Source/CMLSChorus.cpp"/>
+      <FILE id="btN2Dl" name="PluginProcessor.cpp" compile="1" resource="0"
+            file="Source/PluginProcessor.cpp"/>
+      <FILE id="PEr8mi" name="PluginProcessor.h" compile="0" resource="0"
+            file="Source/PluginProcessor.h"/>
+      <FILE id="CoXUbE" name="PluginEditor.cpp" compile="1" resource="0"
+            file="Source/PluginEditor.cpp"/>
+      <FILE id="m5gbym" name="PluginEditor.h" compile="0" resource="0" file="Source/PluginEditor.h"/>
+    </GROUP>
+  </MAINGROUP>
+  <MODULES>
+    <MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_audio_plugin_client" showAllCode="1" useLocalCopy="0"
+            useGlobalPath="1"/>
+    <MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+    <MODULE id="juce_osc" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
+  </MODULES>
+  <JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_VST3_CAN_REPLACE_VST2="0"/>
+  <EXPORTFORMATS>
+    <VS2022 targetFolder="Builds/VisualStudio2022">
+      <CONFIGURATIONS>
+        <CONFIGURATION isDebug="1" name="Debug" targetName="CMLSProject"/>
+        <CONFIGURATION isDebug="0" name="Release" targetName="CMLSProject"/>
+      </CONFIGURATIONS>
+      <MODULEPATHS>
+        <MODULEPATH id="juce_audio_basics" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_audio_devices" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_audio_formats" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_audio_plugin_client" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_audio_processors" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_audio_utils" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_core" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_data_structures" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_events" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_graphics" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_gui_basics" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_gui_extra" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_dsp" path="../JUCE/modules"/>
+        <MODULEPATH id="juce_osc" path="../JUCE/modules"/>
+      </MODULEPATHS>
+    </VS2022>
+  </EXPORTFORMATS>
+</JUCERPROJECT>

+ 50 - 0
JUCE/CMLSProject/JuceLibraryCode/JuceHeader.h

@@ -0,0 +1,50 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+    This is the header file that your files should include in order to get all the
+    JUCE library headers. You should avoid including the JUCE headers directly in
+    your own source files, because that wouldn't pick up the correct configuration
+    options for your app.
+
+*/
+
+#pragma once
+
+
+#include <juce_audio_basics/juce_audio_basics.h>
+#include <juce_audio_devices/juce_audio_devices.h>
+#include <juce_audio_formats/juce_audio_formats.h>
+#include <juce_audio_plugin_client/juce_audio_plugin_client.h>
+#include <juce_audio_processors/juce_audio_processors.h>
+#include <juce_audio_utils/juce_audio_utils.h>
+#include <juce_core/juce_core.h>
+#include <juce_data_structures/juce_data_structures.h>
+#include <juce_dsp/juce_dsp.h>
+#include <juce_events/juce_events.h>
+#include <juce_graphics/juce_graphics.h>
+#include <juce_gui_basics/juce_gui_basics.h>
+#include <juce_gui_extra/juce_gui_extra.h>
+#include <juce_osc/juce_osc.h>
+
+
+#if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION
+ /** If you've hit this error then the version of the Projucer that was used to generate this project is
+     older than the version of the JUCE modules being included. To fix this error, re-save your project
+     using the latest version of the Projucer or, if you aren't using the Projucer to manage your project,
+     remove the JUCE_PROJUCER_VERSION define.
+ */
+ #error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error."
+#endif
+
+
+#if ! JUCE_DONT_DECLARE_PROJECTINFO
+namespace ProjectInfo
+{
+    const char* const  projectName    = "CMLSProject";
+    const char* const  companyName    = "";
+    const char* const  versionString  = "1.0.0";
+    const int          versionNumber  = 0x10000;
+}
+#endif

+ 162 - 0
JUCE/CMLSProject/JuceLibraryCode/JucePluginDefines.h

@@ -0,0 +1,162 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#pragma once
+
+//==============================================================================
+// Audio plugin settings..
+
+#ifndef  JucePlugin_Build_VST
+ #define JucePlugin_Build_VST              0
+#endif
+#ifndef  JucePlugin_Build_VST3
+ #define JucePlugin_Build_VST3             1
+#endif
+#ifndef  JucePlugin_Build_AU
+ #define JucePlugin_Build_AU               1
+#endif
+#ifndef  JucePlugin_Build_AUv3
+ #define JucePlugin_Build_AUv3             0
+#endif
+#ifndef  JucePlugin_Build_AAX
+ #define JucePlugin_Build_AAX              0
+#endif
+#ifndef  JucePlugin_Build_Standalone
+ #define JucePlugin_Build_Standalone       1
+#endif
+#ifndef  JucePlugin_Build_Unity
+ #define JucePlugin_Build_Unity            0
+#endif
+#ifndef  JucePlugin_Build_LV2
+ #define JucePlugin_Build_LV2              0
+#endif
+#ifndef  JucePlugin_Enable_IAA
+ #define JucePlugin_Enable_IAA             0
+#endif
+#ifndef  JucePlugin_Enable_ARA
+ #define JucePlugin_Enable_ARA             0
+#endif
+#ifndef  JucePlugin_Name
+ #define JucePlugin_Name                   "CMLSProject"
+#endif
+#ifndef  JucePlugin_Desc
+ #define JucePlugin_Desc                   "CMLSProject"
+#endif
+#ifndef  JucePlugin_Manufacturer
+ #define JucePlugin_Manufacturer           "yourcompany"
+#endif
+#ifndef  JucePlugin_ManufacturerWebsite
+ #define JucePlugin_ManufacturerWebsite    "www.yourcompany.com"
+#endif
+#ifndef  JucePlugin_ManufacturerEmail
+ #define JucePlugin_ManufacturerEmail      ""
+#endif
+#ifndef  JucePlugin_ManufacturerCode
+ #define JucePlugin_ManufacturerCode       0x4d616e75
+#endif
+#ifndef  JucePlugin_PluginCode
+ #define JucePlugin_PluginCode             0x4f756777
+#endif
+#ifndef  JucePlugin_IsSynth
+ #define JucePlugin_IsSynth                0
+#endif
+#ifndef  JucePlugin_WantsMidiInput
+ #define JucePlugin_WantsMidiInput         0
+#endif
+#ifndef  JucePlugin_ProducesMidiOutput
+ #define JucePlugin_ProducesMidiOutput     0
+#endif
+#ifndef  JucePlugin_IsMidiEffect
+ #define JucePlugin_IsMidiEffect           0
+#endif
+#ifndef  JucePlugin_EditorRequiresKeyboardFocus
+ #define JucePlugin_EditorRequiresKeyboardFocus  0
+#endif
+#ifndef  JucePlugin_Version
+ #define JucePlugin_Version                1.0.0
+#endif
+#ifndef  JucePlugin_VersionCode
+ #define JucePlugin_VersionCode            0x10000
+#endif
+#ifndef  JucePlugin_VersionString
+ #define JucePlugin_VersionString          "1.0.0"
+#endif
+#ifndef  JucePlugin_VSTUniqueID
+ #define JucePlugin_VSTUniqueID            JucePlugin_PluginCode
+#endif
+#ifndef  JucePlugin_VSTCategory
+ #define JucePlugin_VSTCategory            kPlugCategEffect
+#endif
+#ifndef  JucePlugin_Vst3Category
+ #define JucePlugin_Vst3Category           "Fx"
+#endif
+#ifndef  JucePlugin_AUMainType
+ #define JucePlugin_AUMainType             'aufx'
+#endif
+#ifndef  JucePlugin_AUSubType
+ #define JucePlugin_AUSubType              JucePlugin_PluginCode
+#endif
+#ifndef  JucePlugin_AUExportPrefix
+ #define JucePlugin_AUExportPrefix         CMLSProjectAU
+#endif
+#ifndef  JucePlugin_AUExportPrefixQuoted
+ #define JucePlugin_AUExportPrefixQuoted   "CMLSProjectAU"
+#endif
+#ifndef  JucePlugin_AUManufacturerCode
+ #define JucePlugin_AUManufacturerCode     JucePlugin_ManufacturerCode
+#endif
+#ifndef  JucePlugin_CFBundleIdentifier
+ #define JucePlugin_CFBundleIdentifier     com.yourcompany.CMLSProject
+#endif
+#ifndef  JucePlugin_AAXIdentifier
+ #define JucePlugin_AAXIdentifier          com.yourcompany.CMLSProject
+#endif
+#ifndef  JucePlugin_AAXManufacturerCode
+ #define JucePlugin_AAXManufacturerCode    JucePlugin_ManufacturerCode
+#endif
+#ifndef  JucePlugin_AAXProductId
+ #define JucePlugin_AAXProductId           JucePlugin_PluginCode
+#endif
+#ifndef  JucePlugin_AAXCategory
+ #define JucePlugin_AAXCategory            0
+#endif
+#ifndef  JucePlugin_AAXDisableBypass
+ #define JucePlugin_AAXDisableBypass       0
+#endif
+#ifndef  JucePlugin_AAXDisableMultiMono
+ #define JucePlugin_AAXDisableMultiMono    0
+#endif
+#ifndef  JucePlugin_IAAType
+ #define JucePlugin_IAAType                0x61757278
+#endif
+#ifndef  JucePlugin_IAASubType
+ #define JucePlugin_IAASubType             JucePlugin_PluginCode
+#endif
+#ifndef  JucePlugin_IAAName
+ #define JucePlugin_IAAName                "yourcompany: CMLSProject"
+#endif
+#ifndef  JucePlugin_VSTNumMidiInputs
+ #define JucePlugin_VSTNumMidiInputs       16
+#endif
+#ifndef  JucePlugin_VSTNumMidiOutputs
+ #define JucePlugin_VSTNumMidiOutputs      16
+#endif
+#ifndef  JucePlugin_ARAContentTypes
+ #define JucePlugin_ARAContentTypes        0
+#endif
+#ifndef  JucePlugin_ARATransformationFlags
+ #define JucePlugin_ARATransformationFlags  0
+#endif
+#ifndef  JucePlugin_ARAFactoryID
+ #define JucePlugin_ARAFactoryID           "com.yourcompany.CMLSProject.factory"
+#endif
+#ifndef  JucePlugin_ARADocumentArchiveID
+ #define JucePlugin_ARADocumentArchiveID   "com.yourcompany.CMLSProject.aradocumentarchive.1.0.0"
+#endif
+#ifndef  JucePlugin_ARACompatibleArchiveIDs
+ #define JucePlugin_ARACompatibleArchiveIDs  ""
+#endif

+ 12 - 0
JUCE/CMLSProject/JuceLibraryCode/ReadMe.txt

@@ -0,0 +1,12 @@
+
+ Important Note!!
+ ================
+
+The purpose of this folder is to contain files that are auto-generated by the Projucer,
+and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
+the Projucer saves your project.
+
+Therefore, it's a bad idea to make any manual changes to the files in here, or to
+put any of your own files in here if you don't want to lose them. (Of course you may choose
+to add the folder's contents to your version-control system so that you can re-merge your own
+modifications after the Projucer has saved its changes).

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_basics.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_basics/juce_audio_basics.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_basics.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_basics/juce_audio_basics.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_devices.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_devices/juce_audio_devices.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_devices.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_devices/juce_audio_devices.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_formats.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_formats/juce_audio_formats.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_formats.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_formats/juce_audio_formats.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AAX_utils.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX_utils.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_ARA.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_ARA.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_LV2.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_LV2.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_Standalone.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_Unity.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST2.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_VST2.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_plugin_client_VST3.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_plugin_client/juce_audio_plugin_client_VST3.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_processors/juce_audio_processors.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_processors/juce_audio_processors.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors_ara.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_processors/juce_audio_processors_ara.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_processors/juce_audio_processors_lv2_libs.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_utils.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_utils/juce_audio_utils.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_audio_utils.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_audio_utils/juce_audio_utils.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_core.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_core/juce_core.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_core.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_core/juce_core.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_core_CompilationTime.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_core/juce_core_CompilationTime.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_data_structures.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_data_structures/juce_data_structures.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_data_structures.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_data_structures/juce_data_structures.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_dsp.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_dsp/juce_dsp.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_dsp.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_dsp/juce_dsp.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_events.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_events/juce_events.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_events.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_events/juce_events.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_graphics/juce_graphics.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_graphics/juce_graphics.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_graphics/juce_graphics_Harfbuzz.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_graphics_Sheenbidi.c

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_graphics/juce_graphics_Sheenbidi.c>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_basics.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_gui_basics/juce_gui_basics.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_basics.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_gui_basics/juce_gui_basics.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_extra.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_gui_extra/juce_gui_extra.cpp>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_gui_extra.mm

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_gui_extra/juce_gui_extra.mm>

+ 8 - 0
JUCE/CMLSProject/JuceLibraryCode/include_juce_osc.cpp

@@ -0,0 +1,8 @@
+/*
+
+    IMPORTANT! This file is auto-generated each time you save your
+    project - if you alter its contents, your changes may be overwritten!
+
+*/
+
+#include <juce_osc/juce_osc.cpp>

+ 96 - 0
JUCE/CMLSProject/Source/CMLSChorus.cpp

@@ -0,0 +1,96 @@
+/*
+  ==============================================================================
+
+    CMLSChorus.cpp
+    Created: 1 May 2025 11:04:18pm
+    Author:  Luigi
+
+  ==============================================================================
+*/
+
+#include "CMLSChorus.h"
+
+CMLSChorus::CMLSChorus() {
+    freqRange = new juce::NormalisableRange<float>(LFO_MIN_FREQ, LFO_MAX_FREQ);
+    depthRange = new juce::NormalisableRange<float>(LFO_MIN_DEPTH, LFO_MAX_DEPTH);
+}
+
+CMLSChorus::~CMLSChorus() {}
+
+void CMLSChorus::reset() {
+    delayLine1.reset();
+    delayLine2.reset();
+    dryWetMixer.reset();
+}
+
+void CMLSChorus::prepare(const juce::dsp::ProcessSpec& spec) {
+    delayLine1.prepare(spec);
+    delayLine2.prepare(spec);
+    delayLine1.setMix(1.0f);
+    delayLine2.setMix(1.0f);
+
+    delayLine1.setCentreDelay(DELAY_CENTER);
+    delayLine2.setCentreDelay(DELAY_CENTER);
+    delayLine1.setRate(LFO_MIN_FREQ);
+    delayLine1.setRate(LFO_MIN_FREQ + LFO_FREQ_DELTA);
+    delayLine1.setDepth(LFO_MIN_DEPTH);
+    delayLine2.setDepth(LFO_MIN_FREQ);
+
+    dryWetMixer.prepare(spec);
+    dryWetMixer.setMixingRule(juce::dsp::DryWetMixingRule::linear);
+}
+
+void CMLSChorus::process(const juce::dsp::ProcessContextReplacing<float>& context) {
+	auto audioBlock = context.getOutputBlock();
+	auto numChannels = audioBlock.getNumChannels();
+    const auto numSamples = audioBlock.getNumSamples();
+
+    // Initialize audio buffers
+    juce::AudioBuffer<float> firstStageWetBuffer(numChannels, numSamples);
+	juce::dsp::AudioBlock<float> firstStageWetBlock(firstStageWetBuffer);
+
+	juce::AudioBuffer<float> secondStageWetBuffer(numChannels, numSamples);
+	juce::dsp::AudioBlock<float> secondStageWetBlock(secondStageWetBuffer);
+
+    // Calculate wet signal
+    delayLine1.process(
+        juce::dsp::ProcessContextNonReplacing<float>(audioBlock, firstStageWetBlock)
+    );
+	delayLine2.process(
+		juce::dsp::ProcessContextNonReplacing<float>(audioBlock, secondStageWetBlock)
+	);
+
+    secondStageWetBlock += firstStageWetBlock;
+
+	// Apply the dry/wet mix
+    dryWetMixer.pushDrySamples(audioBlock);
+    dryWetMixer.mixWetSamples(secondStageWetBlock);
+
+    for (int channel = 0; channel < numChannels; ++channel) {
+        for (int sample = 0; sample < numSamples; ++sample) {
+            audioBlock.setSample(channel, sample, secondStageWetBlock.getSample(channel, sample));
+        }
+    }
+}
+
+void CMLSChorus::setDryWet(float value) {
+    dryWetMixer.setWetMixProportion(value);
+}
+
+void CMLSChorus::setAmount(float value) {
+    float freq = freqRange->convertFrom0to1(value);
+    float depth = depthRange->convertFrom0to1(value);
+
+    delayLine1.setRate(freq);
+    delayLine2.setRate(freq); //+ LFO_FREQ_DELTA
+    delayLine1.setDepth(0.2);
+    delayLine2.setDepth(0.2);
+}
+
+const float CMLSChorus::getDryWet() {
+	return this->dryWetProp;
+}
+
+const float CMLSChorus::getAmount() {
+	return this->amount;
+}

+ 47 - 0
JUCE/CMLSProject/Source/CMLSChorus.h

@@ -0,0 +1,47 @@
+/*
+  ==============================================================================
+
+    CMLSChorus.h
+    Created: 1 May 2025 11:04:18pm
+    Author:  Luigi
+
+  ==============================================================================
+*/
+
+#pragma once
+
+#include <JuceHeader.h>
+
+#define DELAY_CENTER 0.015 // Center for delay in seconds
+#define LFO_MIN_FREQ 0.0f // Minimum frequency of the LFO
+#define LFO_MAX_FREQ 5.0f // Maximum frequency of the LFO
+#define LFO_FREQ_DELTA 0.3f // Frequency delta between the two LFOs
+#define LFO_MIN_DEPTH 0.0f // Minimum depth of the LFO
+#define LFO_MAX_DEPTH 5.0f // Maximum depth of the LFO
+
+class CMLSChorus : juce::dsp::ProcessorBase {
+    public:
+		CMLSChorus();
+		~CMLSChorus() override;
+
+        void reset() override;
+        void prepare(const juce::dsp::ProcessSpec&);
+        void process(const juce::dsp::ProcessContextReplacing<float>&);
+
+        // Parameter getters and setters
+        void setDryWet(float value);
+        void setAmount(float value);
+
+        const float getDryWet();
+        const float getAmount();
+
+    private:
+        float dryWetProp = 0.0;
+		    float amount = 0.0;
+
+        juce::dsp::Chorus<float> delayLine1; // 1st chorus delayline
+        juce::dsp::Chorus<float> delayLine2; // 2nd chorus delayline
+        juce::dsp::DryWetMixer<float> dryWetMixer; // Dry/Wet mixer
+        juce::NormalisableRange<float>* freqRange; // Range for LFOs frequencies
+        juce::NormalisableRange<float>* depthRange; // Range for LFOs depth
+};

+ 94 - 0
JUCE/CMLSProject/Source/CMLSDelay.cpp

@@ -0,0 +1,94 @@
+/*
+  ==============================================================================
+
+    CMLSDelay.cpp
+    Created: 3 May 2025 5:39:35pm
+    Author:  Luigi
+
+  ==============================================================================
+*/
+
+#include "CMLSDelay.h"
+
+CMLSDelay::CMLSDelay() {
+	delayLengthRange = new juce::NormalisableRange<float>(0, MAX_DELAY_LENGTH);
+	feedbackRange = new juce::NormalisableRange<float>(0, MAX_FEEDBACK);
+
+	this->delayLength = 0.0f;
+	this->feedback = 0.75f;
+	this->delayBufferLength = 1;
+
+	this->delayReadPosition = 0;
+	this->delayWritePosition = 0;
+}
+
+CMLSDelay::~CMLSDelay() {}
+
+void CMLSDelay::reset() {
+}
+
+void CMLSDelay::prepare(const juce::dsp::ProcessSpec& spec) {
+	this->delayBufferLength = (int) 2.0 * spec.sampleRate;
+	
+	if (this->delayBufferLength < 1) {
+		this->delayBufferLength = 1;
+	}
+
+	this->delayBuffer.setSize(spec.numChannels, this->delayBufferLength);
+	this->delayBuffer.clear();
+
+	this->delayReadPosition = (int)(this->delayWritePosition - (this->delayLength * spec.sampleRate) + this->delayBufferLength) % this->delayBufferLength;
+}
+
+void CMLSDelay::process(const juce::dsp::ProcessContextReplacing<float>& context) {
+	auto audioBlock = context.getOutputBlock();
+	auto numChannels = audioBlock.getNumChannels();
+	const auto numSamples = audioBlock.getNumSamples();
+
+	int dpr, dpw;
+
+	for (int channel = 0; channel < numChannels; ++channel) {
+		float* channelData = audioBlock.getChannelPointer(channel);
+		float* delayData = this->delayBuffer.getWritePointer(juce::jmin(channel, this->delayBuffer.getNumChannels() - 1));
+
+		dpr = this->delayReadPosition;
+		dpw = this->delayWritePosition;
+
+		for (int sample = 0; sample < numSamples; sample++) {
+			const float in = channelData[sample];
+			float out = 0.0f;
+
+			out = ((1-this->dryWetProp) * in + this->dryWetProp * delayData[dpr]);
+			delayData[dpw] = in + (this->feedback * delayData[dpr]);
+
+			if (++dpr >= this->delayBufferLength) {
+				dpr = 0;
+			}
+			if (++dpw >= this->delayBufferLength) {
+				dpw = 0;
+			}
+
+			channelData[sample] = out;
+		}
+	}
+
+	this->delayReadPosition = dpr;
+	this->delayWritePosition = dpw;
+}
+
+void CMLSDelay::setDryWet(float value) {
+	this->dryWetProp = value;
+}
+
+void CMLSDelay::setAmount(float value) {
+	this->delayLength = this->delayLengthRange->convertFrom0to1(value);
+	this->feedback = this->delayLengthRange->convertFrom0to1(value);
+}
+
+const float CMLSDelay::getDryWet() {
+	return this->dryWetProp;
+}
+
+const float CMLSDelay::getAmount() {
+	return this->amount;
+}

+ 48 - 0
JUCE/CMLSProject/Source/CMLSDelay.h

@@ -0,0 +1,48 @@
+/*
+  ==============================================================================
+
+    CMLSDelay.h
+    Created: 3 May 2025 5:39:35pm
+    Author:  Luigi
+	Ref. https://github.com/flipbug/simple-delay/tree/master
+
+  ==============================================================================
+*/
+
+#pragma once
+#include <JuceHeader.h>
+
+#define MAX_DELAY_LENGTH 1.0f // Maximum delay time in seconds
+#define MAX_FEEDBACK 1.0f
+
+class CMLSDelay : public juce::dsp::ProcessorBase
+{
+	public:
+		CMLSDelay();
+		~CMLSDelay() override;
+
+		void reset() override;
+		void prepare(const juce::dsp::ProcessSpec&) override;
+		void process(const juce::dsp::ProcessContextReplacing<float>&) override;
+	
+		// Parameter getters and setters
+		void setDryWet(float value);
+		void setAmount(float value);
+		const float getDryWet();
+		const float getAmount();
+
+	private:
+		float dryWetProp = 0.0f;
+		float amount = 0.0f;
+
+		float delayLength;
+		float feedback;
+
+		juce::AudioSampleBuffer delayBuffer;
+		int delayBufferLength;
+		int delayReadPosition;
+		int delayWritePosition;
+
+		juce::NormalisableRange<float>* delayLengthRange;
+		juce::NormalisableRange<float>* feedbackRange;
+};

+ 56 - 0
JUCE/CMLSProject/Source/CMLSReverb.cpp

@@ -0,0 +1,56 @@
+#include "CMLSReverb.h";
+
+CMLSReverb::CMLSReverb()
+{
+    // Default parameters declaration
+    this->reverbParams.dryLevel = 1.0f;
+	this->reverbParams.wetLevel = 0.0f;
+	this->reverbParams.roomSize = 0.0f;
+	this->reverbParams.damping = 0.5f;
+	this->reverbParams.width = 0.0f;
+
+	this->reverb.setParameters(this->reverbParams);
+}
+
+CMLSReverb::~CMLSReverb() {}
+
+void CMLSReverb::reset() {
+	this->reverb.reset();
+}
+
+void CMLSReverb::prepare(const juce::dsp::ProcessSpec& spec) {
+	this->reverb.setSampleRate(spec.sampleRate);
+}
+
+void CMLSReverb::process(const juce::dsp::ProcessContextReplacing<float>& context) {
+	juce::dsp::AudioBlock<float> buffer = context.getOutputBlock();
+    this->reverb.processStereo(buffer.getChannelPointer(0), buffer.getChannelPointer(1), buffer.getNumSamples());
+}
+
+void CMLSReverb::setDryWet(float value)
+{
+	// Set the dry/wet mix value
+	this->reverbParams.wetLevel = value;
+	this->reverbParams.dryLevel = 1.0f - value;
+    this->reverb.setParameters(this->reverbParams);
+}
+
+void CMLSReverb::setRoomSize(float value)
+{
+	// Set the room size value
+	this->reverbParams.roomSize = value;
+    this->reverbParams.width = value / 2;
+	this->reverb.setParameters(this->reverbParams);
+}
+
+const float CMLSReverb::getDryWet()
+{
+	// Get the dry/wet mix value
+	return this->reverbParams.wetLevel;
+}
+
+const float CMLSReverb::getRoomSize()
+{
+	// Get the room size value
+	return this->reverbParams.roomSize;
+}

+ 24 - 0
JUCE/CMLSProject/Source/CMLSReverb.h

@@ -0,0 +1,24 @@
+#pragma once
+
+#include <JuceHeader.h>
+
+class CMLSReverb : public juce::dsp::ProcessorBase {
+    public:
+        CMLSReverb();
+        ~CMLSReverb() override;
+
+	    void reset() override;
+        void prepare(const juce::dsp::ProcessSpec&) override;
+		void process(const juce::dsp::ProcessContextReplacing<float>&) override;
+
+        // Parameter setters
+        void setDryWet(float value);
+        void setRoomSize(float value);
+
+        // Parameter getters
+	    const float getDryWet();
+	    const float getRoomSize();
+    private:
+        juce::Reverb reverb;
+        juce::Reverb::Parameters reverbParams;
+};

+ 127 - 0
JUCE/CMLSProject/Source/PluginEditor.cpp

@@ -0,0 +1,127 @@
+/*
+  ==============================================================================
+
+    This file contains the basic framework code for a JUCE plugin editor.
+
+  ==============================================================================
+*/
+
+#include "PluginProcessor.h"
+#include "PluginEditor.h"
+
+//==============================================================================
+CMLSProjectAudioProcessorEditor::CMLSProjectAudioProcessorEditor (CMLSProjectAudioProcessor& p)
+    : AudioProcessorEditor (&p), audioProcessor (p)
+{
+    // Make sure that before the constructor has finished, you've set the
+    // editor's size to whatever you need it to be.
+    setSize (400, 300);
+
+	// Add aliders to the editor (Chorus)
+    this->chorusDryWetSlider.setRange(0.0, 1.0);
+    this->chorusDryWetSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->chorusDryWetSlider.addListener(this);
+    this->chorusDryWetLabel.setText("Chorus Dry/Wet", juce::dontSendNotification);
+
+    addAndMakeVisible(this->chorusDryWetSlider);
+    addAndMakeVisible(this->chorusDryWetLabel);
+
+    this->chorusAmountSlider.setRange(0.0, 1.0);
+    this->chorusAmountSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->chorusAmountSlider.addListener(this);
+    this->chorusAmountLabel.setText("Chorus Amount", juce::dontSendNotification);
+
+    addAndMakeVisible(this->chorusAmountSlider);
+    addAndMakeVisible(this->chorusAmountLabel);
+
+    // Add sliders to the editor (Reverb)
+    this->reverbDryWetSlider.setRange(0.0, 1.0);
+    this->reverbDryWetSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->reverbDryWetSlider.addListener(this);
+    this->reverbDryWetLabel.setText("Reverb Dry/Wet", juce::dontSendNotification);
+
+    addAndMakeVisible(this->reverbDryWetSlider);
+    addAndMakeVisible(this->reverbDryWetLabel);
+
+    this->reverbRoomSizeSlider.setRange(0.0, 1.0);
+    this->reverbRoomSizeSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->reverbRoomSizeSlider.addListener(this);
+    this->reverbRoomSizeLabel.setText("Reverb Room Size", juce::dontSendNotification);
+
+    addAndMakeVisible(this->reverbRoomSizeSlider);
+    addAndMakeVisible(this->reverbRoomSizeLabel);
+
+	// Add sliders to the editor (Delay)
+    this->delayDryWetSlider.setRange(0.0, 1.0);
+    this->delayDryWetSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->delayDryWetSlider.addListener(this);
+    this->delayDryWetLabel.setText("Delay Dry/Wet", juce::dontSendNotification);
+
+    addAndMakeVisible(this->delayDryWetSlider);
+    addAndMakeVisible(this->delayDryWetLabel);
+
+    this->delayAmountSlider.setRange(0.0, 1.0);
+    this->delayAmountSlider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 100, 20);
+    this->delayAmountSlider.addListener(this);
+    this->delayAmountLabel.setText("Delay Amount", juce::dontSendNotification);
+
+    addAndMakeVisible(this->delayAmountSlider);
+    addAndMakeVisible(this->delayAmountLabel);
+}
+
+CMLSProjectAudioProcessorEditor::~CMLSProjectAudioProcessorEditor()
+{
+}
+
+//==============================================================================
+void CMLSProjectAudioProcessorEditor::paint (juce::Graphics& g)
+{
+    // (Our component is opaque, so we must completely fill the background with a solid colour)
+    g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));
+}
+
+void CMLSProjectAudioProcessorEditor::resized()
+{
+	//titleLabel.setBounds(10, 10, getWidth() - 20, 20);
+	chorusDryWetSlider.setBounds(130, 10, getWidth() - 130, 20);
+    chorusDryWetLabel.setBounds(10, 10, 100, 20);
+    chorusAmountSlider.setBounds(130, 30, getWidth() - 130, 20);
+	chorusAmountLabel.setBounds(10, 30, 100, 20);
+
+    reverbDryWetSlider.setBounds(130, 70, getWidth() - 130, 20);
+	reverbDryWetLabel.setBounds(10, 70, 100, 20);
+    reverbRoomSizeSlider.setBounds(130, 90, getWidth() - 130, 20);
+	reverbRoomSizeLabel.setBounds(10, 90, 100, 20);
+
+    delayDryWetSlider.setBounds(130, 130, getWidth() - 130, 20);
+	delayDryWetLabel.setBounds(10, 130, 100, 20);
+    delayAmountSlider.setBounds(130, 150, getWidth() - 130, 20);
+	delayAmountLabel.setBounds(10, 150, 100, 20);
+}
+
+void CMLSProjectAudioProcessorEditor::sliderValueChanged(juce::Slider* slider){
+	if (slider == &this->chorusDryWetSlider)
+	{
+		this->audioProcessor.setChorusDryWet(slider->getValue());
+	}
+	else if (slider == &this->chorusAmountSlider)
+	{
+		this->audioProcessor.setChorusAmount(slider->getValue());
+	}
+	else if (slider == &this->reverbDryWetSlider)
+	{
+		this->audioProcessor.setReverbDryWet(slider->getValue());
+	}
+	else if (slider == &this->reverbRoomSizeSlider)
+	{
+		this->audioProcessor.setReverbRoomSize(slider->getValue());
+	}
+	else if (slider == &this->delayDryWetSlider)
+	{
+		this->audioProcessor.setDelayDryWet(slider->getValue());
+	}
+	else if (slider == &this->delayAmountSlider)
+	{
+		this->audioProcessor.setDelayAmount(slider->getValue());
+	}
+}

+ 58 - 0
JUCE/CMLSProject/Source/PluginEditor.h

@@ -0,0 +1,58 @@
+/*
+  ==============================================================================
+
+    This file contains the basic framework code for a JUCE plugin editor.
+
+  ==============================================================================
+*/
+
+#pragma once
+
+#include <JuceHeader.h>
+#include "PluginProcessor.h"
+
+//==============================================================================
+/**
+*/
+class CMLSProjectAudioProcessorEditor  : public juce::AudioProcessorEditor,
+                                         public juce::Slider::Listener
+{
+public:
+    CMLSProjectAudioProcessorEditor (CMLSProjectAudioProcessor&);
+    ~CMLSProjectAudioProcessorEditor() override;
+
+    //==============================================================================
+    void paint (juce::Graphics&) override;
+    void resized() override;
+
+private:
+    // This reference is provided as a quick way for your editor to
+    // access the processor object that created it.
+    CMLSProjectAudioProcessor& audioProcessor;
+
+    // Title
+	juce::Label titleLabel;
+
+    // Chorus
+    juce::Slider chorusDryWetSlider;
+    juce::Label chorusDryWetLabel;
+    juce::Slider chorusAmountSlider;
+    juce::Label chorusAmountLabel;
+
+    // Reverb
+	juce::Slider reverbDryWetSlider;
+	juce::Label reverbDryWetLabel;
+	juce::Slider reverbRoomSizeSlider;
+	juce::Label reverbRoomSizeLabel;
+
+	// Delay
+	juce::Slider delayDryWetSlider;
+	juce::Label delayDryWetLabel;
+	juce::Slider delayAmountSlider;
+	juce::Label delayAmountLabel;
+
+    // Method to call when the slider value changes
+    void sliderValueChanged(juce::Slider* slider) override;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CMLSProjectAudioProcessorEditor)
+};

+ 216 - 0
JUCE/CMLSProject/Source/PluginProcessor.cpp

@@ -0,0 +1,216 @@
+/*
+  ==============================================================================
+
+    This file contains the basic framework code for a JUCE plugin processor.
+
+  ==============================================================================
+*/
+
+#include "PluginProcessor.h"
+#include "PluginEditor.h"
+
+//==============================================================================
+CMLSProjectAudioProcessor::CMLSProjectAudioProcessor()
+#ifndef JucePlugin_PreferredChannelConfigurations
+     : AudioProcessor (BusesProperties()
+                     #if ! JucePlugin_IsMidiEffect
+                      #if ! JucePlugin_IsSynth
+                       .withInput  ("Input",  juce::AudioChannelSet::stereo(), true)
+                      #endif
+                       .withOutput ("Output", juce::AudioChannelSet::stereo(), true)
+                     #endif
+                       )
+#endif
+{
+    // Chaining the effects
+    this->processorChain.reset();
+    //this->processorChain.addNode<CMLSDelay>(2);
+}
+
+CMLSProjectAudioProcessor::~CMLSProjectAudioProcessor()
+{
+}
+
+//==============================================================================
+const juce::String CMLSProjectAudioProcessor::getName() const
+{
+    return JucePlugin_Name;
+}
+
+bool CMLSProjectAudioProcessor::acceptsMidi() const
+{
+   #if JucePlugin_WantsMidiInput
+    return true;
+   #else
+    return false;
+   #endif
+}
+
+bool CMLSProjectAudioProcessor::producesMidi() const
+{
+   #if JucePlugin_ProducesMidiOutput
+    return true;
+   #else
+    return false;
+   #endif
+}
+
+bool CMLSProjectAudioProcessor::isMidiEffect() const
+{
+   #if JucePlugin_IsMidiEffect
+    return true;
+   #else
+    return false;
+   #endif
+}
+
+double CMLSProjectAudioProcessor::getTailLengthSeconds() const
+{
+    return 0.0;
+}
+
+int CMLSProjectAudioProcessor::getNumPrograms()
+{
+    return 1;   // NB: some hosts don't cope very well if you tell them there are 0 programs,
+                // so this should be at least 1, even if you're not really implementing programs.
+}
+
+int CMLSProjectAudioProcessor::getCurrentProgram()
+{
+    return 0;
+}
+
+void CMLSProjectAudioProcessor::setCurrentProgram (int index)
+{
+}
+
+const juce::String CMLSProjectAudioProcessor::getProgramName (int index)
+{
+    return {};
+}
+
+void CMLSProjectAudioProcessor::changeProgramName (int index, const juce::String& newName)
+{
+}
+
+//==============================================================================
+void CMLSProjectAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
+{
+    // Use this method as the place to do any pre-playback
+    // initialisation that you need..
+    juce::dsp::ProcessSpec spec;
+    spec.maximumBlockSize = samplesPerBlock;
+    spec.numChannels = getTotalNumOutputChannels();
+    spec.sampleRate = sampleRate;
+
+	this->processorChain.prepare(spec);
+}
+
+void CMLSProjectAudioProcessor::releaseResources()
+{
+    // When playback stops, you can use this as an opportunity to free up any
+    // spare memory, etc.
+}
+
+#ifndef JucePlugin_PreferredChannelConfigurations
+bool CMLSProjectAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
+{
+  #if JucePlugin_IsMidiEffect
+    juce::ignoreUnused (layouts);
+    return true;
+  #else
+    // This is the place where you check if the layout is supported.
+    // In this template code we only support mono or stereo.
+    // Some plugin hosts, such as certain GarageBand versions, will only
+    // load plugins that support stereo bus layouts.
+    if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono()
+     && layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo())
+        return false;
+
+    // This checks if the input layout matches the output layout
+   #if ! JucePlugin_IsSynth
+    if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())
+        return false;
+   #endif
+
+    return true;
+  #endif
+}
+#endif
+
+void CMLSProjectAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages)
+{
+    juce::ScopedNoDenormals noDenormals;
+    auto totalNumInputChannels  = getTotalNumInputChannels();
+    auto totalNumOutputChannels = getTotalNumOutputChannels();
+
+    const auto numChannels = juce::jmax(totalNumInputChannels, totalNumOutputChannels);
+
+    auto audioBlock = juce::dsp::AudioBlock<float>(buffer).getSubsetChannelBlock(0, (int)numChannels);
+    auto context = juce::dsp::ProcessContextReplacing<float>(audioBlock);
+
+    /* Processing */
+	this->processorChain.process(context);
+}
+
+//==============================================================================
+bool CMLSProjectAudioProcessor::hasEditor() const
+{
+    return true; // (change this to false if you choose to not supply an editor)
+}
+
+juce::AudioProcessorEditor* CMLSProjectAudioProcessor::createEditor()
+{
+    return new CMLSProjectAudioProcessorEditor (*this);
+}
+
+//==============================================================================
+void CMLSProjectAudioProcessor::getStateInformation (juce::MemoryBlock& destData)
+{
+    // You should use this method to store your parameters in the memory block.
+    // You could do that either as raw data, or use the XML or ValueTree classes
+    // as intermediaries to make it easy to save and load complex data.
+}
+
+void CMLSProjectAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
+{
+    // You should use this method to restore your parameters from this memory block,
+    // whose contents will have been created by the getStateInformation() call.
+}
+
+void CMLSProjectAudioProcessor::setChorusDryWet(float value) {
+    auto& instance = this->processorChain.template get<0>();
+	instance.setDryWet(value);
+}
+
+void CMLSProjectAudioProcessor::setChorusAmount(float value) {
+	auto& instance = this->processorChain.template get<0>();
+	instance.setAmount(value);
+}
+
+void CMLSProjectAudioProcessor::setReverbDryWet(float value) {
+	auto& instance = this->processorChain.template get<1>();
+	instance.setDryWet(value);
+}
+
+void CMLSProjectAudioProcessor::setReverbRoomSize(float value) {
+	auto& instance = this->processorChain.template get<1>();
+	instance.setRoomSize(value);
+}
+
+void CMLSProjectAudioProcessor::setDelayDryWet(float value) {
+	auto& instance = this->processorChain.template get<2>();
+	instance.setDryWet(value);
+}
+
+void CMLSProjectAudioProcessor::setDelayAmount(float value) {
+	auto& instance = this->processorChain.template get<2>();
+	instance.setAmount(value);
+}
+
+//==============================================================================
+// This creates new instances of the plugin..
+juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
+{
+    return new CMLSProjectAudioProcessor();
+}

+ 81 - 0
JUCE/CMLSProject/Source/PluginProcessor.h

@@ -0,0 +1,81 @@
+/*
+  ==============================================================================
+
+    This file contains the basic framework code for a JUCE plugin processor.
+
+  ==============================================================================
+*/
+
+#pragma once
+
+#include <JuceHeader.h>
+#include "CMLSReverb.h"
+#include "CMLSDelay.h"
+#include "CMLSChorus.h"
+
+//==============================================================================
+/**
+*/
+class CMLSProjectAudioProcessor  : public juce::AudioProcessor
+{
+public:
+    //==============================================================================
+    CMLSProjectAudioProcessor();
+    ~CMLSProjectAudioProcessor() override;
+
+    //==============================================================================
+    void prepareToPlay (double sampleRate, int samplesPerBlock) override;
+    void releaseResources() override;
+
+   #ifndef JucePlugin_PreferredChannelConfigurations
+    bool isBusesLayoutSupported (const BusesLayout& layouts) const override;
+   #endif
+
+    void processBlock (juce::AudioBuffer<float>&, juce::MidiBuffer&) override;
+
+    //==============================================================================
+    juce::AudioProcessorEditor* createEditor() override;
+    bool hasEditor() const override;
+
+    //==============================================================================
+    const juce::String getName() const override;
+
+    bool acceptsMidi() const override;
+    bool producesMidi() const override;
+    bool isMidiEffect() const override;
+    double getTailLengthSeconds() const override;
+
+    //==============================================================================
+    int getNumPrograms() override;
+    int getCurrentProgram() override;
+    void setCurrentProgram (int index) override;
+    const juce::String getProgramName (int index) override;
+    void changeProgramName (int index, const juce::String& newName) override;
+
+    //==============================================================================
+    void getStateInformation (juce::MemoryBlock& destData) override;
+    void setStateInformation (const void* data, int sizeInBytes) override;
+
+    // Parameter controls
+	void setChorusDryWet(float value);
+	void setChorusAmount(float value);
+
+	void setReverbDryWet(float value);
+	void setReverbRoomSize(float value);
+
+	void setDelayDryWet(float value);
+	void setDelayAmount(float value);
+
+private:
+    //==============================================================================
+    
+    // OSC message receiver
+	juce::OSCReceiver oscReceiver;
+
+    // Buffer for the incoming audio from the generators
+
+    // Effects processing chain
+	juce::dsp::ProcessorChain<CMLSChorus, CMLSReverb, CMLSDelay> processorChain;
+
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CMLSProjectAudioProcessor)
+};

BIN
JUCE/JUCE_UML_Updated_20250504.png


+ 25 - 0
resources for sc and juce/midi_receiver_example.scd

@@ -0,0 +1,25 @@
+s.boot;
+
+// Make sure MIDI is initialized
+MIDIClient.init;
+
+// List available MIDI sources
+MIDIIn.connectAll;
+
+// Create a function to handle MIDI messages
+(
+MIDIdef.noteOn(\printNoteOn, { |vel, num, chan, src|
+    "Note On - Channel: %, Note: %, Velocity: %, Source: %"
+    .format(chan, num, vel, src).postln;
+});
+
+MIDIdef.noteOff(\printNoteOff, { |vel, num, chan, src|
+    "Note Off - Channel: %, Note: %, Velocity: %, Source: %"
+    .format(chan, num, vel, src).postln;
+});
+
+MIDIdef.cc(\printCC, { |val, num, chan, src|
+    "Control Change - Channel: %, Controller: %, Value: %, Source: %"
+    .format(chan, num, val, src).postln;
+});
+)

BIN
resources for sc and juce/osc addresses and values for iDraw OSC.pdf


BIN
resources for sc and juce/osc addresses and values.pdf


+ 42 - 0
resources for sc and juce/osc_receiver_example.scd

@@ -0,0 +1,42 @@
+s.boot;
+s.reboot;
+
+
+(
+// Define a custom function that listens on a given port
+~startOSCListener = { |port, oscAddress|
+
+    // Create a NetAddr for the server to bind to
+    var udpIn, listener;
+
+    // Start listening on the port
+    udpIn = NetAddr.langPort(port); // binds to this port
+
+    // Define the listener
+    listener = OSCdef.new(
+        key: "myOSCListener",  // unique identifier
+        func: { |msg, time, addr, recvPort|
+            var val;
+
+            val = msg[1]; // assuming single float argument
+
+			// Print in the console (just for debugging)
+            ["[OSC RECEIVED]", msg, "from", addr].postln;
+
+
+            // Example: do something with `val`
+            // You could control a Synth here
+
+
+        },
+        path: oscAddress,
+        srcID: nil,  // nil = accept from any IP
+        recvPort: port
+    );
+
+    "Listening for OSC on port % at address '%'\n".format(port, oscAddress).postln;
+};
+)
+
+// Start the listener
+~startOSCListener.(port: 8000, oscAddress: "/touchX"); // Change the oscAddress depending on what you want to receive