├── example ├── bin │ └── data │ │ ├── .gitkeep │ │ └── AudioUnitPresets │ │ ├── chain1 │ │ ├── wiggly │ │ │ ├── My_Filter.aupreset │ │ │ ├── My_Reverb.aupreset │ │ │ └── My_Synth.aupreset │ │ └── rhythmic │ │ │ ├── My_Filter.aupreset │ │ │ ├── My_Reverb.aupreset │ │ │ └── My_Synth.aupreset │ │ ├── chain2 │ │ └── broken │ │ │ ├── Filter_2.aupreset │ │ │ ├── Filter_3.aupreset │ │ │ ├── Reverb_2.aupreset │ │ │ └── Noise_2.aupreset │ │ ├── Main_Compressor.aupreset │ │ └── Mixer.aupreset ├── addons.make ├── example.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── example Debug.xcscheme │ │ └── example Release.xcscheme ├── src │ ├── main.cpp │ ├── ofApp.h │ └── ofApp.cpp ├── Makefile ├── Project.xcconfig ├── openFrameworks-Info.plist └── config.make ├── images ├── finder.png └── ofxAudioUnitManager.png ├── ofxaddons_thumbnail.png ├── src ├── AudioUnitManagement │ ├── aumManagedAudioUnitMixer.cpp │ ├── aumManagedAudioUnitMixer.h │ ├── aumMonitorableAudioUnit.h │ ├── aumMonitorableAudioUnit.cpp │ ├── aumManagedAudioUnit.h │ ├── aumAudioUnitChain.h │ ├── aumManagedAudioUnit.cpp │ └── aumAudioUnitChain.cpp ├── aumUtils.h ├── Handlers │ ├── aumMidi.cpp │ ├── aumMidi.h │ ├── aumUserInterface.h │ ├── aumPresets.h │ ├── aumUserInterface.cpp │ └── aumPresets.cpp ├── Params │ ├── aumParams.h │ ├── aum_TALNoiseMaker_Params.h │ └── aum_Massive_Params.h ├── aumUtils.cpp ├── ofxAudioUnitManager.h ├── AudioUnits │ ├── aumUnit_AULowPassFilter.h │ ├── aumUnit_AUMatrixReverb.h │ ├── aumUnit_Generic.h │ ├── aumUnit_TALNoiseMaker.h │ └── aumUnit_Massive.h └── ofxAudioUnitManager.cpp ├── .gitignore └── README.md /example/bin/data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/addons.make: -------------------------------------------------------------------------------- 1 | ofxAudioUnit 2 | ofxAudioUnitManager 3 | ofxBpm 4 | ofxMidi 5 | -------------------------------------------------------------------------------- /images/finder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxAudioUnitManager/HEAD/images/finder.png -------------------------------------------------------------------------------- /ofxaddons_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxAudioUnitManager/HEAD/ofxaddons_thumbnail.png -------------------------------------------------------------------------------- /images/ofxAudioUnitManager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxAudioUnitManager/HEAD/images/ofxAudioUnitManager.png -------------------------------------------------------------------------------- /example/example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumManagedAudioUnitMixer.cpp: -------------------------------------------------------------------------------- 1 | #include "aumManagedAudioUnitMixer.h" 2 | 3 | void aumManagedAudioUnitMixer::setup(string _name){ 4 | name = _name; 5 | } 6 | 7 | string aumManagedAudioUnitMixer::getName(){ 8 | return name; 9 | } 10 | 11 | ofxAudioUnitMixer* aumManagedAudioUnitMixer::getUnit(){ 12 | return &unit; 13 | } 14 | -------------------------------------------------------------------------------- /src/aumUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumMidi.h" 4 | 5 | class aumUtils { 6 | 7 | public: 8 | void setup(); 9 | string executeMidiCommand(string command, ofxMidiOut *midi); 10 | int midiNote(string arg); 11 | protected: 12 | void loadNotesMap(); 13 | int octave, note; 14 | map notes; 15 | }; 16 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumManagedAudioUnitMixer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | 4 | #ifdef __APPLE__ 5 | #include "ofxAudioUnit.h" 6 | #endif 7 | 8 | class aumManagedAudioUnitMixer { 9 | 10 | public: 11 | void setup(string _name); 12 | string getName(); 13 | ofxAudioUnitMixer* getUnit(); 14 | protected: 15 | ofxAudioUnitMixer unit; 16 | string name; 17 | }; 18 | -------------------------------------------------------------------------------- /src/Handlers/aumMidi.cpp: -------------------------------------------------------------------------------- 1 | #include "aumMidi.h" 2 | 3 | void aumMidi::setup(ofxAudioUnit* synth, ofxMidiOut* midiOut, string midiPortId){ 4 | this->synth = synth; 5 | 6 | midiReceiver.createMidiDestination(midiPortId); 7 | midiReceiver.routeMidiTo(*this->synth); 8 | midiOut->openPort(midiPortId); 9 | } 10 | 11 | void aumMidi::exit(){ 12 | //midiOut->closePort(); 13 | } 14 | -------------------------------------------------------------------------------- /example/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofApp.h" 3 | 4 | //======================================================================== 5 | int main( ){ 6 | ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context 7 | 8 | // this kicks off the running of my app 9 | // can be OF_WINDOW or OF_FULLSCREEN 10 | // pass in width and height too: 11 | ofRunApp(new ofApp()); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /example/Makefile: -------------------------------------------------------------------------------- 1 | # Attempt to load a config.make file. 2 | # If none is found, project defaults in config.project.make will be used. 3 | ifneq ($(wildcard config.make),) 4 | include config.make 5 | endif 6 | 7 | # make sure the the OF_ROOT location is defined 8 | ifndef OF_ROOT 9 | OF_ROOT=$(realpath ../../..) 10 | endif 11 | 12 | # call the project makefile! 13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk 14 | -------------------------------------------------------------------------------- /src/Handlers/aumMidi.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "ofxAudioUnitMidi.h" 4 | #include "ofxMidi.h" 5 | 6 | #ifdef __APPLE__ 7 | #include "ofxAudioUnit.h" 8 | #endif 9 | 10 | class aumMidi{ 11 | 12 | public: 13 | void setup(ofxAudioUnit* synth, ofxMidiOut* midiOut, string midiPortId); 14 | ofxMidiOut* midi(); 15 | void exit(); 16 | protected: 17 | ofxAudioUnit* synth; 18 | ofxAudioUnitMidiReceiver midiReceiver; 19 | ofxMidiOut* midiOut; 20 | }; 21 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumMonitorableAudioUnit.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumManagedAudioUnit.h" 4 | 5 | class aumMonitorableAudioUnit : public aumManagedAudioUnit { 6 | 7 | public: 8 | void update(); 9 | void printParamChanges(); 10 | void startPrintingParamChanges(); 11 | void stopPrintingParamChanges(); 12 | 13 | protected: 14 | bool isMonitoringParams = false; 15 | 16 | virtual void doPrintChanges() = 0; 17 | virtual void doRecordParams() = 0; 18 | void compareAndPrint(string paramName, AudioUnitParameterValue previousValue, AudioUnitParameterValue currentValue); 19 | }; 20 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/wiggly/My_Filter.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAACAAAAAEXXoAAAAAABQaAAAA== 8 | 9 | manufacturer 10 | 1634758764 11 | name 12 | Untitled 13 | subtype 14 | 1819304307 15 | type 16 | 1635083896 17 | version 18 | 0 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain2/broken/Filter_2.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAACAAAAAEXXoAAAAAABAAAAAA== 8 | 9 | manufacturer 10 | 1634758764 11 | name 12 | Untitled 13 | subtype 14 | 1819304307 15 | type 16 | 1635083896 17 | version 18 | 0 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain2/broken/Filter_3.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAACAAAAAEXXoAAAAAABAAAAAA== 8 | 9 | manufacturer 10 | 1634758764 11 | name 12 | Untitled 13 | subtype 14 | 1819304307 15 | type 16 | 1635083896 17 | version 18 | 0 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/rhythmic/My_Filter.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAACAAAAAEXXoAAAAAABQaAAAA== 8 | 9 | manufacturer 10 | 1634758764 11 | name 12 | Untitled 13 | subtype 14 | 1819304307 15 | type 16 | 1635083896 17 | version 18 | 0 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_CFLAGS = $(OF_CORE_CFLAGS) 17 | OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) 18 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 19 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/Main_Compressor.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ThresholdOK 6 | 1 7 | data 8 | 9 | AAAAAAAAAAAAAAAKAAAAAMIMAAAAAAABQfAAAAAAAAI/gAAAAAAAA8LIAAAAAAAEPPXC 10 | jwAAAAU89cKPAAAABgAAAAAAAAPoAAAAAAAAB9DC8AAAAAALuMLwAAA= 11 | 12 | manufacturer 13 | 1634758764 14 | name 15 | Fast and Smooth 16 | subtype 17 | 1684237680 18 | type 19 | 1635083896 20 | version 21 | 0 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/wiggly/My_Reverb.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAARAAAAAELIAAAAAAABQgwAAAAAAAI8cZUDAAAAAz17fpEAAAAEPHSH 8 | /QAAAAU6gxJvAAAABj8nrhQAAAAHPy4UewAAAAg/FcKPAAAACT9AAAAAAAAKPyP3zwAA 9 | AAs+yoy9AAAADD+dfJoAAAANPszMzQAAAA5ESAAAAAAAD0BAAAAAAAAQAAAAAA== 10 | 11 | manufacturer 12 | 1634758764 13 | name 14 | Medium Hall 3 15 | render-quality 16 | 127 17 | subtype 18 | 1836213622 19 | type 20 | 1635083896 21 | version 22 | 0 23 | 24 | 25 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain2/broken/Reverb_2.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAARAAAAAELIAAAAAAABQgwAAAAAAAI8cZUDAAAAAz17fpEAAAAEPHSH 8 | /QAAAAU6gxJvAAAABj8nrhQAAAAHPy4UewAAAAg/FcKPAAAACT9AAAAAAAAKPyP3zwAA 9 | AAs+yoy9AAAADD+dfJoAAAANPszMzQAAAA5ESAAAAAAAD0BAAAAAAAAQAAAAAA== 10 | 11 | manufacturer 12 | 1634758764 13 | name 14 | Medium Hall 3 15 | render-quality 16 | 127 17 | subtype 18 | 1836213622 19 | type 20 | 1635083896 21 | version 22 | 0 23 | 24 | 25 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/rhythmic/My_Reverb.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAAARAAAAAELIAAAAAAABQgwAAAAAAAI8cZUDAAAAAz17fpEAAAAEPHSH 8 | /QAAAAU6gxJvAAAABj8nrhQAAAAHPy4UewAAAAg/FcKPAAAACT9AAAAAAAAKPyP3zwAA 9 | AAs+yoy9AAAADD+dfJoAAAANPszMzQAAAA5ESAAAAAAAD0BAAAAAAAAQAAAAAA== 10 | 11 | manufacturer 12 | 1634758764 13 | name 14 | Medium Hall 3 15 | render-quality 16 | 127 17 | subtype 18 | 1836213622 19 | type 20 | 1635083896 21 | version 22 | 0 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumMonitorableAudioUnit.cpp: -------------------------------------------------------------------------------- 1 | #include "aumMonitorableAudioUnit.h" 2 | 3 | void aumMonitorableAudioUnit::update() { 4 | if(isMonitoringParams) { 5 | if(ofGetFrameNum() > 0) { 6 | doPrintChanges(); 7 | } 8 | doRecordParams(); 9 | } 10 | } 11 | 12 | void aumMonitorableAudioUnit::printParamChanges() { 13 | startPrintingParamChanges(); 14 | } 15 | 16 | void aumMonitorableAudioUnit::startPrintingParamChanges() { 17 | isMonitoringParams = true; 18 | } 19 | 20 | void aumMonitorableAudioUnit::stopPrintingParamChanges() { 21 | isMonitoringParams = false; 22 | } 23 | 24 | void aumMonitorableAudioUnit::compareAndPrint(string paramName, AudioUnitParameterValue previousValue, AudioUnitParameterValue currentValue) { 25 | if(previousValue != currentValue) { 26 | cout << paramName << " changed from " << previousValue << " to " << currentValue << endl; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /example/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | cc.openFrameworks.ofapp 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | NSCameraUsageDescription 22 | This app needs to access the camera 23 | NSMicrophoneUsageDescription 24 | This app needs to access the microphone 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/Params/aumParams.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aum_TALNoiseMaker_Params.h" 3 | #include "aum_Massive_Params.h" 4 | 5 | enum aumAudioUnitDevice { 6 | AUDIOUNIT_TALNOISEMAKER, 7 | AUDIOUNIT_MASSIVE 8 | }; 9 | 10 | class aumParams { 11 | 12 | public: 13 | vector getAudioUnitOSTypes(aumAudioUnitDevice device) { 14 | vector osTypes; 15 | switch(device){ 16 | case AUDIOUNIT_TALNOISEMAKER: 17 | osTypes.push_back('aumu'); 18 | osTypes.push_back('ncut'); 19 | osTypes.push_back('TOGU'); 20 | break; 21 | case AUDIOUNIT_MASSIVE: 22 | osTypes.push_back('aumu'); 23 | osTypes.push_back('NiMa'); 24 | osTypes.push_back('-NI-'); 25 | break; 26 | default: 27 | osTypes.push_back('aumu'); 28 | osTypes.push_back('ncut'); 29 | osTypes.push_back('TOGU'); 30 | break; 31 | } 32 | return osTypes; 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/Mixer.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAQAAAAAAAAADAAAAAD+AAAAAAAABP4AAAAAAAAIAAAAAAAAAAQAAAAEAAAADAAAA 8 | AD+AAAAAAAABP4AAAAAAAAIAAAAAAAAAAQAAAAIAAAADAAAAAD+AAAAAAAABP4AAAAAA 9 | AAIAAAAAAAAAAQAAAAMAAAADAAAAAD+AAAAAAAABP4AAAAAAAAIAAAAAAAAAAQAAAAQA 10 | AAADAAAAAD+AAAAAAAABP4AAAAAAAAIAAAAAAAAAAQAAAAUAAAADAAAAAD+AAAAAAAAB 11 | P4AAAAAAAAIAAAAAAAAAAQAAAAYAAAADAAAAAD+AAAAAAAABP4AAAAAAAAIAAAAAAAAA 12 | AQAAAAcAAAADAAAAAD+AAAAAAAABP4AAAAAAAAIAAAAAAAAAAgAAAAAAAAADAAAAAD+A 13 | AAAAAAACAAAAAAAAAGQAAAAA 14 | 15 | manufacturer 16 | 1634758764 17 | name 18 | Untitled 19 | render-quality 20 | 64 21 | subtype 22 | 1835232632 23 | type 24 | 1635085688 25 | version 26 | 0 27 | 28 | 29 | -------------------------------------------------------------------------------- /example/src/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxAudioUnit.h" 5 | #include "ofxAudioUnitManager.h" 6 | #include "aumUnit_TALNoiseMaker.h" 7 | #include "aumUnit_AULowPassFilter.h" 8 | #include "aumUnit_AUMatrixReverb.h" 9 | #include "aumUnit_Generic.h" 10 | #include "ofxBpm.h" 11 | 12 | class ofApp : public ofBaseApp{ 13 | 14 | public: 15 | void setup(); 16 | void update(); 17 | void draw(); 18 | void play(); 19 | void togglePlaying(); 20 | 21 | void keyPressed(int key); 22 | void keyReleased(int key); 23 | void mouseMoved(int x, int y ); 24 | void mouseDragged(int x, int y, int button); 25 | void mousePressed(int x, int y, int button); 26 | void mouseReleased(int x, int y, int button); 27 | void windowResized(int w, int h); 28 | void dragEvent(ofDragInfo dragInfo); 29 | void gotMessage(ofMessage msg); 30 | 31 | ofxAudioUnitManager manager; 32 | aumAudioUnitChain myChain, chain2, chain3; 33 | aumUnit_TALNoiseMaker mySynth, noiseMaker2; 34 | aumUnit_AULowPassFilter myFilter, filter2, filter3; 35 | aumUnit_AUMatrixReverb myReverb, reverb2; 36 | 37 | bool playing, on; 38 | int note; 39 | }; 40 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumManagedAudioUnit.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumParams.h" 4 | 5 | #ifdef __APPLE__ 6 | #include "ofxAudioUnit.h" 7 | #endif 8 | 9 | enum AudioUnitType { 10 | AU_TYPE_SYNTH, 11 | AU_TYPE_UNIT 12 | }; 13 | 14 | class aumManagedAudioUnit { 15 | 16 | public: 17 | void setup(string _unitName, aumAudioUnitDevice device, string _className=""); 18 | void setup(string _unitName, OSType _osType, OSType _osSubType, OSType _osManufacturer=kAudioUnitManufacturer_Apple, string _className=""); 19 | void update(ofEventArgs& args); 20 | virtual void update() = 0; 21 | 22 | void showUI(string chainName, int chainIndex, int numChains, int unitIndex, int numUnits); 23 | AudioUnitParameterValue get(int param); 24 | void set(int param, float value); 25 | void set(int param1, int param2, ofVec2f value); 26 | void set(int param1, int param2, int param3, ofVec3f value); 27 | ofxAudioUnit* getUnit(); 28 | AudioUnitType getType(); 29 | string getUnitName(); 30 | string getUnitSlug(); 31 | string getClassName(); 32 | bool isSynth(); 33 | protected: 34 | string stringify(OSType _osType, OSType _osSubType, OSType _osManufacturer); 35 | string stringify(OSType code); 36 | OSType osType, osSubType, osManufacturer; 37 | ofxAudioUnit unit; 38 | AudioUnitType type; 39 | aumParams audioUnitParams; 40 | string className, unitName, unitSlug; 41 | int x, y; 42 | }; 43 | -------------------------------------------------------------------------------- /src/aumUtils.cpp: -------------------------------------------------------------------------------- 1 | #include "aumUtils.h" 2 | 3 | void aumUtils::setup() { 4 | loadNotesMap(); 5 | } 6 | 7 | /* Format can be either: "60 ON", "60 OFF" etc, or 8 | "C#5 ON", "C#5 OFF" etc */ 9 | string aumUtils::executeMidiCommand(string command, ofxMidiOut *midi) { 10 | vector args = ofSplitString(command, " "); 11 | if(args.size() == 2) { 12 | int parsedNote = midiNote(args.at(0)); 13 | if(args.at(1) == "ON") { 14 | cout << "Sending MIDI ON: " << parsedNote << endl; 15 | midi->sendNoteOn(1, parsedNote); 16 | } else { 17 | cout << "Sending MIDI OFF: " << parsedNote << endl; 18 | midi->sendNoteOff(1, parsedNote); 19 | } 20 | return args.at(1); 21 | } 22 | return NULL; 23 | } 24 | 25 | int aumUtils::midiNote(string arg) { 26 | if(arg.length() > 1 && ofToInt(arg) == 0) { 27 | octave = ofToInt(arg.substr(arg.length() - 1, arg.length())); 28 | note = notes[arg.substr(0, arg.length() - 1)]; 29 | return note + 12 * octave; 30 | } 31 | return ofToInt(arg); 32 | } 33 | 34 | void aumUtils::loadNotesMap() { 35 | notes["C"] = 0; 36 | notes["C#"] = 1; 37 | notes["D"] = 2; 38 | notes["D#"] = 3; 39 | notes["E"] = 4; 40 | notes["F"] = 5; 41 | notes["F#"] = 6; 42 | notes["G"] = 7; 43 | notes["G#"] = 8; 44 | notes["A"] = 9; 45 | notes["A#"] = 10; 46 | notes["B"] = 11; 47 | } 48 | -------------------------------------------------------------------------------- /src/Handlers/aumUserInterface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumAudioUnitChain.h" 4 | 5 | class aumUserInterface{ 6 | 7 | public: 8 | void setup(); 9 | void setFocus(bool _isFocused); 10 | void addChain(); 11 | void drawControls(); 12 | void drawChains(vector chains); 13 | void drawWaveforms(aumAudioUnitChain* chain, float positionX); 14 | void drawChainReport(aumAudioUnitChain* chain, ofVec2f position, int chainNumber); 15 | void drawMidiReport(aumAudioUnitChain* chain, float positionX, int index); 16 | protected: 17 | void drawDebugBox(int x, int y, int width, int height, ofColor color=ofColor(255, 255, 255, 32)); 18 | ofVec2f getControlsPositions(); 19 | ofColor getBackgroundColor(aumAudioUnitChain* chain); 20 | ofColor getTextColor(aumAudioUnitChain* chain); 21 | string controlsReport(); 22 | string chainReport(aumAudioUnitChain* chain, int number); 23 | string midiReport(aumAudioUnitChain* chain, int index); 24 | 25 | ofxAudioUnitTap* tap; 26 | bool isFocused; 27 | ofPolyline leftWaveform, rightWaveform; 28 | int padding, midiReceiptTimeout; 29 | string tempMidiReport; 30 | vector reports; 31 | vector lastMidiRecieved; 32 | 33 | ofVec2f midiInfoPositions, midiInfoDimensions; 34 | ofVec2f chainInfoPositions, chainInfoDimensions; 35 | ofVec2f controlsPositions, controlsDimensions; 36 | ofVec2f waveformsPositions, waveformsDimensions; 37 | }; 38 | -------------------------------------------------------------------------------- /src/Handlers/aumPresets.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumManagedAudioUnit.h" 4 | 5 | class aumPresets{ 6 | 7 | public: 8 | void setup(string _chainName, ofxAudioUnitMixer* _mixer, aumManagedAudioUnit* _compressor); 9 | void load(int index); 10 | void add(aumManagedAudioUnit* unit); 11 | void saveNew(); 12 | void saveOverwrite(); 13 | void rename(); 14 | void trash(); 15 | void increment(); 16 | void decrement(); 17 | void select(); 18 | void deselect(); 19 | int currentIndex(); 20 | string report(); 21 | 22 | protected: 23 | int indexOf(string presetName); 24 | void ensureValidIndex(); 25 | void readFromDisk(); 26 | void loadPresetsInChainOrder(string presetName); 27 | vector dirContents(string path, string extensions); 28 | void clearPresets(); 29 | string path(string presetName); 30 | string newTrashPath(string presetName); 31 | string filename(string unitSlug); 32 | string trim(string presetName); 33 | void ensureDirectories(); 34 | bool validateName(string newPresetName, int alertDialogException=-1); 35 | void save(string presetName); 36 | void saveMasterUnits(); 37 | void loadMasterUnits(); 38 | 39 | vector presetNames; 40 | vector units; 41 | vector unitSlugs; 42 | vector< vector > presets; 43 | ofxAudioUnitMixer* mixer; 44 | aumManagedAudioUnit* compressor; 45 | 46 | string chainName, storageDir, storagePath, trashDir, mixerName; 47 | int currentPreset, lastSaved, lastSaveTimer, lastSaveTimeout; 48 | bool selected; 49 | 50 | ofDirectory dir; 51 | string anyExtension, presetExtension; 52 | }; 53 | -------------------------------------------------------------------------------- /src/ofxAudioUnitManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumAudioUnitChain.h" 4 | #include "aumUnit_Generic.h" 5 | #include "aumManagedAudioUnitMixer.h" 6 | #include "ofxBpm.h" 7 | #include "aumUserInterface.h" 8 | #include "aumParams.h" 9 | 10 | class ofxAudioUnitManager { 11 | public: 12 | void setup(); 13 | void setupDark(); 14 | void onlyFocusOnCommand(); 15 | aumAudioUnitChain& createChain(aumAudioUnitChain *chain, string name="", aumManagedAudioUnitMixer* altMixer=NULL, ofColor color=ofColor::blue); 16 | void addUnmanagedUnit(ofxAudioUnit* unit); 17 | void loadPresets(aumAudioUnitChain* chain); 18 | void draw(ofEventArgs& args); 19 | void exit(ofEventArgs& args); 20 | void keyPressed(ofKeyEventArgs& args); 21 | void toggleDebugUI(); 22 | void enableDebugUI(bool show); 23 | void incrementSelectedChain(); 24 | void decrementSelectedChain(); 25 | ofxAudioUnitMixer* getMixer(); 26 | vector allChains(); 27 | aumAudioUnitChain* getChain(int chainId); 28 | ofxBpm bpm; 29 | 30 | protected: 31 | void selectChain(int index); 32 | void selectChain(aumAudioUnitChain *chain); 33 | void showSelectedChainUI(); 34 | void showAllSynthUIs(); 35 | void showAllUIs(); 36 | void showMixerUI(); 37 | void showCompressorUI(); 38 | int nextMixerBusIndex(ofxAudioUnitMixer* mixer); 39 | 40 | aumUserInterface userInterface; 41 | ofxAudioUnitMixer mixer; 42 | aumUnit_Generic compressor; 43 | ofxAudioUnitOutput output; 44 | vector chains; 45 | aumAudioUnitChain* selectedChain; 46 | bool showDebugUI, drawDarkOverlay, focusOnCommand, isFocused; 47 | int selectedChainIndex, numUnmanagedInputs; 48 | map mixersToBusCounts; 49 | }; 50 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumAudioUnitChain.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "aumPresets.h" 4 | #include "aumUtils.h" 5 | #include "aumMidi.h" 6 | #include "aumManagedAudioUnit.h" 7 | 8 | #ifdef __APPLE__ 9 | #include "ofxAudioUnit.h" 10 | #endif 11 | 12 | class aumAudioUnitChain { 13 | 14 | public: 15 | virtual void setup(string _chainName, ofxAudioUnitMixer* _mixer, aumManagedAudioUnit* _compressor, int _mixerChannel, ofColor _waveColor); 16 | void loadPresets(); 17 | void exit(); 18 | aumAudioUnitChain& toMixer(ofxAudioUnit* chainEndpoint); 19 | aumAudioUnitChain& toMixer(); 20 | aumAudioUnitChain& link(aumManagedAudioUnit* unit); 21 | aumAudioUnitChain& to(aumManagedAudioUnit* unit); 22 | void showUI(int chainIndex, int numChains); 23 | void showSynthUI(int chainIndex, int numChains); 24 | bool isSelected(); 25 | void select(); 26 | void deselect(); 27 | void sendMidiOn(int midiNum); 28 | void sendMidiOff(int midiNum); 29 | void sendNoteOn(string note); 30 | void sendNoteOff(string note); 31 | ofxAudioUnitTap* tap(); 32 | aumPresets* presets(); 33 | string getUnitReport(); 34 | string getMidiReport(); 35 | string getClassName(); 36 | string getName(); 37 | ofColor getColor(); 38 | ofxMidiOut midi; 39 | 40 | protected: 41 | void loadUnit(aumManagedAudioUnit* unit); 42 | void loadSynth(aumManagedAudioUnit* synth); 43 | 44 | ofxAudioUnitTap tapUnit; 45 | ofPolyline waveform1, waveform2; 46 | vector units; 47 | ofxAudioUnit* unitEndpoint; 48 | ofxAudioUnitMixer* mixer; 49 | aumManagedAudioUnit* compressor; 50 | int mixerChannel; 51 | vector midiEvents; 52 | 53 | aumPresets presetsHandler; 54 | aumUtils utils; 55 | aumMidi midiHandler; 56 | ofColor waveColor; 57 | bool selected; 58 | string chainName, className, report; 59 | }; 60 | -------------------------------------------------------------------------------- /src/AudioUnits/aumUnit_AULowPassFilter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aumMonitorableAudioUnit.h" 3 | 4 | /******************************************************************************/ 5 | /* WARNING: THIS CLASS WAS GENERATED BY THE FOLLOWING FUNCTION: */ 6 | /* */ 7 | /* aumUnit_Generic::generateClassFileForAudioUnit(string deviceName); */ 8 | /* */ 9 | /* IF YOU EDIT THIS FILE, YOU RISK HAVING YOUR CHANGES OVERWRITTEN THE NEXT */ 10 | /* TIME THE FILE IS RE-WRITTEN BY THIS FUNCTION. TO EDIT THIS FILE, PLEASE */ 11 | /* COPY IT TO ANY OTHER FOLDER, RENAME THE CLASS, AND THEN MAKE EDITS. */ 12 | /******************************************************************************/ 13 | 14 | class aumUnit_AULowPassFilter : public aumMonitorableAudioUnit 15 | { 16 | public: 17 | //Cutoff Frequency 18 | //min: 10, max: 21829.5, default: 6900 19 | const static int cutoff_frequency = 0; 20 | 21 | //Resonance 22 | //min: -20, max: 40, default: 0 23 | const static int resonance = 1; 24 | 25 | //These variables store the most recenty recorded values 26 | //of each of the parameters, for recording and detection 27 | AudioUnitParameterValue previous_cutoff_frequency; 28 | AudioUnitParameterValue previous_resonance; 29 | 30 | void setup(string _unitName) { 31 | aumManagedAudioUnit::setup(_unitName, 'aufx', 'lpas', 'appl', "aumUnit_AULowPassFilter"); 32 | } 33 | 34 | void doPrintChanges() { 35 | compareAndPrint("cutoff_frequency", previous_cutoff_frequency, get(cutoff_frequency)); 36 | compareAndPrint("resonance", previous_resonance, get(resonance)); 37 | } 38 | 39 | void doRecordParams() { 40 | previous_cutoff_frequency = get(cutoff_frequency); 41 | previous_resonance = get(resonance); 42 | } 43 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .trash 2 | dump 3 | 4 | ######################### 5 | # openFrameworks patterns 6 | ######################### 7 | 8 | # build files 9 | openFrameworks.a 10 | openFrameworksDebug.a 11 | openFrameworksUniversal.a 12 | libs/openFrameworksCompiled/lib/*/* 13 | !libs/openFrameworksCompiled/lib/*/.gitkeep 14 | 15 | # apothecary 16 | scripts/apothecary/build 17 | 18 | # rule to avoid non-official addons going into git 19 | # see addons/.gitignore 20 | addons/* 21 | 22 | # rule to avoid non-official apps going into git 23 | # see apps/.gitignore 24 | apps/* 25 | 26 | # also, see examples/.gitignore 27 | 28 | ######################### 29 | # general 30 | ######################### 31 | 32 | [Bb]uild/ 33 | [Oo]bj/ 34 | *.o 35 | [Dd]ebug*/ 36 | [Rr]elease*/ 37 | *.mode* 38 | *.app/ 39 | *.pyc 40 | .svn/ 41 | *.log 42 | *.cpp.eep 43 | *.cpp.elf 44 | *.cpp.hex 45 | 46 | ######################### 47 | # IDE 48 | ######################### 49 | 50 | # XCode 51 | *.pbxuser 52 | *.perspective 53 | *.perspectivev3 54 | *.mode1v3 55 | *.mode2v3 56 | # XCode 4 57 | xcuserdata 58 | *.xcworkspace 59 | 60 | # Code::Blocks 61 | *.depend 62 | *.layout 63 | 64 | # Visual Studio 65 | *.sdf 66 | *.opensdf 67 | *.suo 68 | *.pdb 69 | *.ilk 70 | *.aps 71 | ipch/ 72 | 73 | # Eclipse 74 | .metadata 75 | local.properties 76 | .externalToolBuilders 77 | 78 | ######################### 79 | # operating system 80 | ######################### 81 | 82 | # Linux 83 | *~ 84 | # KDE 85 | .directory 86 | .AppleDouble 87 | 88 | # OSX 89 | .DS_Store 90 | *.swp 91 | *~.nib 92 | # Thumbnails 93 | ._* 94 | 95 | # Windows 96 | # Windows image file caches 97 | Thumbs.db 98 | # Folder config file 99 | Desktop.ini 100 | 101 | # Android 102 | .csettings 103 | /libs/openFrameworksCompiled/project/android/paths.make 104 | 105 | # Android Studio 106 | *.iml 107 | 108 | ######################### 109 | # miscellaneous 110 | ######################### 111 | 112 | .mailmap 113 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumManagedAudioUnit.cpp: -------------------------------------------------------------------------------- 1 | #include "aumManagedAudioUnit.h" 2 | 3 | void aumManagedAudioUnit::setup(string _unitName, aumAudioUnitDevice device, string _className) { 4 | vector osTypes = audioUnitParams.getAudioUnitOSTypes(device); 5 | setup(_unitName, osTypes.at(0), osTypes.at(1), osTypes.at(2), _className); 6 | } 7 | 8 | void aumManagedAudioUnit::setup(string _unitName, OSType _osType, OSType _osSubType, OSType _osManufacturer, string _className) { 9 | unitName = _unitName; 10 | unitSlug = _unitName; 11 | ofStringReplace(unitSlug, " ", "_"); 12 | 13 | osType = _osType; 14 | osSubType = _osSubType; 15 | osManufacturer = _osManufacturer; 16 | unit = ofxAudioUnit(osType, osSubType, osManufacturer); 17 | this->type = stringify(osType) == "aumu" ? AU_TYPE_SYNTH : AU_TYPE_UNIT; 18 | 19 | className = _className; 20 | if(className == "") { 21 | className = stringify(_osType, _osSubType, _osManufacturer); 22 | } 23 | 24 | ofAddListener(ofEvents().update, this, &aumManagedAudioUnit::update); 25 | } 26 | 27 | void aumManagedAudioUnit::update(ofEventArgs& args){ 28 | update(); 29 | } 30 | 31 | void aumManagedAudioUnit::showUI(string chainName, int chainIndex, int numChains, int unitIndex, int numUnits) { 32 | x = ofMap(chainIndex, 0, numChains - 1, 0, ofGetScreenWidth() * 0.5); 33 | y = ofMap(unitIndex, 0, numUnits - 1, 0, ofGetScreenHeight() * 0.5); 34 | unit.showUI(chainName + ": " + 35 | unitName + (unitName.length() > 0 ? " " : "") + 36 | className, x, y); 37 | } 38 | 39 | AudioUnitParameterValue aumManagedAudioUnit::get(int param) { 40 | AudioUnitParameterValue value = 0; 41 | AudioUnitGetParameter(unit.getUnit(), param, kAudioUnitScope_Global, 0, &value); 42 | return value; 43 | } 44 | 45 | void aumManagedAudioUnit::set(int param, float value) { 46 | AudioUnitSetParameter(unit.getUnit(), param, kAudioUnitScope_Global, 0, value, 0); 47 | } 48 | 49 | void aumManagedAudioUnit::set(int param1, int param2, ofVec2f value) { 50 | set(param1, value.x); 51 | set(param2, value.y); 52 | } 53 | 54 | void aumManagedAudioUnit::set(int param1, int param2, int param3, ofVec3f value) { 55 | set(param1, value.x); 56 | set(param2, value.y); 57 | set(param3, value.z); 58 | } 59 | 60 | ofxAudioUnit* aumManagedAudioUnit::getUnit() { 61 | return &unit; 62 | } 63 | 64 | AudioUnitType aumManagedAudioUnit::getType() { 65 | return type; 66 | } 67 | 68 | string aumManagedAudioUnit::getUnitName() { 69 | return unitName; 70 | } 71 | 72 | string aumManagedAudioUnit::getUnitSlug() { 73 | return unitSlug; 74 | } 75 | 76 | string aumManagedAudioUnit::getClassName() { 77 | return className; 78 | } 79 | 80 | bool aumManagedAudioUnit::isSynth() { 81 | return type == AU_TYPE_SYNTH; 82 | } 83 | 84 | string aumManagedAudioUnit::stringify(OSType _osType, OSType _osSubType, OSType _osManufacturer) { 85 | return stringify(_osType) + "-" + stringify(_osSubType) + "-" + stringify(_osManufacturer); 86 | } 87 | 88 | string aumManagedAudioUnit::stringify(OSType code) { 89 | char char4 = code&0xFF; 90 | char char3 = (code>>8)&0xFF; 91 | char char2 = (code>>16)&0xFF; 92 | char char1 = (code>>24)&0xFF; 93 | return ofToString(char1) + ofToString(char2) + ofToString(char3) + ofToString(char4); 94 | } 95 | -------------------------------------------------------------------------------- /example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /example/src/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | void ofApp::setup(){ 4 | playing = false; 5 | on = true; 6 | note = 60; 7 | 8 | //Setup the manager, and since this is a demo, let's start 9 | //with the debug UI toggled on 10 | manager.setup(); 11 | manager.toggleDebugUI(); 12 | 13 | //For each chain: 14 | //-------------- 15 | //1. Setup some units 16 | mySynth.setup("My Synth"); 17 | myFilter.setup("My Filter"); 18 | myReverb.setup("My Reverb"); 19 | mySynth.printParamChanges(); 20 | myFilter.printParamChanges(); 21 | myReverb.printParamChanges(); 22 | 23 | //myFilter.generateClassFileForAudioUnit("AULowPassFilter"); 24 | 25 | //2. Have the manager init the chain with a name 26 | manager.createChain(&myChain) 27 | .link(&mySynth) 28 | .to(&myFilter) 29 | .to(&myReverb) 30 | .toMixer(); 31 | 32 | //That's it! 33 | 34 | //Now repeat for every chain you want to create 35 | noiseMaker2.setup("Noise 2"); 36 | filter2.setup("Filter 2"); 37 | filter3.setup("Filter 3"); 38 | reverb2.setup("Reverb 2"); 39 | 40 | manager.createChain(&chain2) 41 | .link(&noiseMaker2) 42 | .to(&filter2) //Note you can have two units of 43 | .to(&filter3) //the same type in the same chain 44 | .to(&reverb2) 45 | .toMixer(); 46 | 47 | //Use ofxBpm to regularly schedule MIDI events 48 | ofAddListener(manager.bpm.beatEvent, this, &ofApp::play); 49 | manager.bpm.start(); 50 | } 51 | 52 | void ofApp::play(void){ 53 | if(playing) { 54 | if(on) { 55 | myChain.sendMidiOn(note); 56 | on = false; 57 | } else { 58 | chain2.sendMidiOn(note); 59 | on = true; 60 | } 61 | } 62 | } 63 | 64 | void ofApp::togglePlaying() { 65 | playing = !playing; 66 | if(!playing) { 67 | myChain.sendMidiOff(note); 68 | chain2.sendMidiOff(note); 69 | } 70 | } 71 | 72 | void ofApp::update(){ 73 | 74 | } 75 | 76 | void ofApp::draw(){ 77 | //When you use this in your projects, you may be drawing 78 | //your own stuff, like this: 79 | /*ofBackground(ofColor::black); 80 | ofSetLineWidth(30); 81 | ofSetColor(ofColor::white, 40); 82 | int size = 4000; 83 | 84 | ofRotateZ(45); 85 | for(int i = -size; i < size; i+=50) { 86 | ofLine(i, -size, i, size); 87 | } 88 | ofRotateZ(-90); 89 | for(int i = -size; i < size; i+=50) { 90 | ofLine(i, -size, i, size); 91 | } 92 | ofRotateZ(45);*/ 93 | } 94 | 95 | void ofApp::keyPressed(int key){ 96 | if(key == ' ') { 97 | togglePlaying(); 98 | } else if(key == '[') { 99 | togglePlaying(); 100 | note--; 101 | togglePlaying(); 102 | } else if(key == ']') { 103 | togglePlaying(); 104 | note++; 105 | togglePlaying(); 106 | } 107 | } 108 | 109 | void ofApp::keyReleased(int key){ 110 | 111 | } 112 | 113 | void ofApp::mouseMoved(int x, int y ){ 114 | 115 | } 116 | 117 | void ofApp::mouseDragged(int x, int y, int button){ 118 | 119 | } 120 | 121 | void ofApp::mousePressed(int x, int y, int button){ 122 | 123 | } 124 | 125 | void ofApp::mouseReleased(int x, int y, int button){ 126 | 127 | } 128 | 129 | void ofApp::windowResized(int w, int h){ 130 | 131 | } 132 | 133 | void ofApp::gotMessage(ofMessage msg){ 134 | 135 | } 136 | 137 | void ofApp::dragEvent(ofDragInfo dragInfo){ 138 | 139 | } 140 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain2/broken/Noise_2.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAABcAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAAEAAAA 8 | AAAAAAUAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAgAAAAAAAAACQAAAAAAAAAKAAAAAAAA 9 | AAsAAAAAAAAADAAAAAAAAAANAAAAAAAAAA4AAAAAAAAADwAAAAAAAAAQAAAAAAAAABEA 10 | AAAAAAAAEgAAAAAAAAATAAAAAAAAABQAAAAAAAAAFQAAAAAAAAAWAAAAAAAAABcAAAAA 11 | AAAAGAAAAAAAAAAZAAAAAAAAABoAAAAAAAAAGwAAAAAAAAAcAAAAAAAAAB0AAAAAAAAA 12 | HgAAAAAAAAAfAAAAAAAAACAAAAAAAAAAIQAAAAAAAAAiAAAAAAAAACMAAAAAAAAAJAAA 13 | AAAAAAAlAAAAAAAAACYAAAAAAAAAJwAAAAAAAAAoAAAAAAAAACkAAAAAAAAAKgAAAAAA 14 | AAArAAAAAAAAACwAAAAAAAAALQAAAAAAAAAuAAAAAAAAAC8AAAAAAAAAMAAAAAAAAAAx 15 | AAAAAAAAADIAAAAAAAAAMwAAAAAAAAA0AAAAAAAAADUAAAAAAAAANgAAAAAAAAA3AAAA 16 | AAAAADgAAAAAAAAAOQAAAAAAAAA6AAAAAAAAADsAAAAAAAAAPAAAAAAAAAA9AAAAAAAA 17 | AD4AAAAAAAAAPwAAAAAAAABAAAAAAAAAAEEAAAAAAAAAQgAAAAAAAABDAAAAAAAAAEQA 18 | AAAAAAAARQAAAAAAAABGAAAAAAAAAEcAAAAAAAAASAAAAAAAAABJAAAAAAAAAEoAAAAA 19 | AAAASwAAAAAAAABMAAAAAAAAAE0AAAAAAAAATgAAAAAAAABPAAAAAAAAAFAAAAAAAAAA 20 | UQAAAAAAAABSAAAAAAAAAFMAAAAAAAAAVAAAAAAAAABVAAAAAAAAAFYAAAAAAAAAVwAA 21 | AAAAAABYAAAAAAAAAFkAAAAAAAAAWgAAAAAAAABbAAAAAA== 22 | 23 | jucePluginState 24 | 25 | VkMyIUgGAAA8dGFsIGN1cnByb2dyYW09IjAiIHZlcnNpb249IjEuNyI+PHByb2dyYW1z 26 | Pjxwcm9ncmFtIHByb2dyYW1uYW1lPSIhIFN0YXJ0dXAgSnVubyBPc2MgVEFMIiB2b2x1 27 | bWU9IjAuMzUyMDAwMDI4IiBmaWx0ZXJ0eXBlPSIwIiBjdXRvZmY9IjEiIHJlc29uYW5j 28 | ZT0iMCIgb3NjMXZvbHVtZT0iMC44MDAwMDAwMTIiIG9zYzJ2b2x1bWU9IjEiIG9zYzN2 29 | b2x1bWU9IjAuODAwMDAwMDEyIiBvc2Mxd2F2ZWZvcm09IjEiIG9zYzJ3YXZlZm9ybT0i 30 | MC4yNSIgb3Njc3luYz0iMCIgb3NjbWFzdGVydHVuZT0iMC41IiBvc2MxdHVuZT0iMC44 31 | NTQwMDAwMzIiIG9zYzJ0dW5lPSIwLjMwNDAwMDAyIiBvc2MxZmluZXR1bmU9IjAuNSIg 32 | b3NjMmZpbmV0dW5lPSIwLjUiIHBvcnRhbWVudG89IjAiIGtleWZvbGxvdz0iMCIgZmls 33 | dGVyY29udG91cj0iMC41IiBmaWx0ZXJhdHRhY2s9IjAiIGZpbHRlcmRlY2F5PSIwIiBm 34 | aWx0ZXJzdXN0YWluPSIxIiBmaWx0ZXJyZWxlYXNlPSIwIiBhbXBhdHRhY2s9IjAiIGFt 35 | cGRlY2F5PSIwIiBhbXBzdXN0YWluPSIxIiBhbXByZWxlYXNlPSIwIiB2b2ljZXM9IjAi 36 | IHBvcnRhbWVudG9tb2RlPSIwIiBsZm8xd2F2ZWZvcm09IjAiIGxmbzJ3YXZlZm9ybT0i 37 | MCIgbGZvMXJhdGU9IjAiIGxmbzJyYXRlPSIwIiBsZm8xYW1vdW50PSIwLjUiIGxmbzJh 38 | bW91bnQ9IjAuNSIgbGZvMWRlc3RpbmF0aW9uPSIwIiBsZm8yZGVzdGluYXRpb249IjAi 39 | IGxmbzFwaGFzZT0iMCIgbGZvMnBoYXNlPSIwIiBvc2MxcHc9IjAuNSIgb3NjMmZtPSIw 40 | IiBvc2MxcGhhc2U9IjAuNSIgb3NjMnBoYXNlPSIwIiB0cmFuc3Bvc2U9IjAuNSIgZnJl 41 | ZWFkYXR0YWNrPSIwIiBmcmVlYWRkZWNheT0iMCIgZnJlZWFkYW1vdW50PSIwIiBmcmVl 42 | YWRkZXN0aW5hdGlvbj0iMCIgbGZvMXN5bmM9IjAiIGxmbzFrZXl0cmlnZ2VyPSIwIiBs 43 | Zm8yc3luYz0iMCIgbGZvMmtleXRyaWdnZXI9IjAiIHZlbG9jaXR5dm9sdW1lPSIwIiB2 44 | ZWxvY2l0eWNvbnRvdXI9IjAiIHZlbG9jaXR5Y3V0b2ZmPSIwIiBwaXRjaHdoZWVsY3V0 45 | b2ZmPSIwIiBwaXRjaHdoZWVscGl0Y2g9IjAiIGhpZ2hwYXNzPSIwIiBkZXR1bmU9IjAi 46 | IHZpbnRhZ2Vub2lzZT0iMCIgcmluZ21vZHVsYXRpb249IjAiIGNob3J1czFlbmFibGU9 47 | IjAiIGNob3J1czJlbmFibGU9IjAiIHJldmVyYndldD0iMCIgcmV2ZXJiZGVjYXk9IjAu 48 | NSIgcmV2ZXJicHJlZGVsYXk9IjAiIHJldmVyYmhpZ2hjdXQ9IjAiIHJldmVyYmxvd2N1 49 | dD0iMSIgb3NjYml0Y3J1c2hlcj0iMSIgZmlsdGVyZHJpdmU9IjAiIGRlbGF5d2V0PSIw 50 | IiBkZWxheXRpbWU9IjAuNSIgZGVsYXlzeW5jPSIwIiBkZWxheWZhY3Rvcmw9IjAiIGRl 51 | bGF5ZmFjdG9ycj0iMCIgZGVsYXloaWdoc2hlbGY9IjAiIGRlbGF5bG93c2hlbGY9IjAi 52 | IGRlbGF5ZmVlZGJhY2s9IjAuNSIgZW52ZWxvcGVlZGl0b3JkZXN0MT0iMCIgZW52ZWxv 53 | cGVlZGl0b3JzcGVlZD0iMCIgZW52ZWxvcGVlZGl0b3JhbW91bnQ9IjAiIGVudmVsb3Bl 54 | b25lc2hvdD0iMCIgZW52ZWxvcGVmaXh0ZW1wbz0iMCIgdGFiMW9wZW49IjEiIHRhYjJv 55 | cGVuPSIwIiB0YWIzb3Blbj0iMCIgdGFiNG9wZW49IjEiPjxzcGxpbmVQb2ludHMvPjwv 56 | cHJvZ3JhbT48L3Byb2dyYW1zPjxtaWRpbWFwLz48L3RhbD4Arg== 57 | 58 | manufacturer 59 | 1414481749 60 | name 61 | Untitled 62 | subtype 63 | 1852011892 64 | type 65 | 1635085685 66 | version 67 | 0 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/AudioUnitManagement/aumAudioUnitChain.cpp: -------------------------------------------------------------------------------- 1 | #include "aumAudioUnitChain.h" 2 | 3 | void aumAudioUnitChain::setup(string _chainName, ofxAudioUnitMixer* _mixer, aumManagedAudioUnit* _compressor, int _mixerChannel, ofColor _waveColor){ 4 | chainName = _chainName; 5 | mixer = _mixer; 6 | compressor = _compressor; 7 | mixerChannel = _mixerChannel; 8 | waveColor = _waveColor; 9 | className = "aumAudioUnitChain"; 10 | selected = false; 11 | utils.setup(); 12 | } 13 | 14 | void aumAudioUnitChain::loadPresets(){ 15 | presetsHandler.setup(chainName, mixer, compressor); 16 | } 17 | 18 | void aumAudioUnitChain::exit() { 19 | midiHandler.exit(); 20 | } 21 | 22 | aumAudioUnitChain& aumAudioUnitChain::toMixer(ofxAudioUnit* chainEndpoint) { 23 | chainEndpoint->connectTo(tapUnit).connectTo(*mixer, mixerChannel); 24 | return *this; 25 | } 26 | 27 | aumAudioUnitChain& aumAudioUnitChain::toMixer() { 28 | ofxAudioUnit* unitEndpoint = units.at(0)->getUnit(); 29 | 30 | for(int i = 1; i < units.size(); i++) { 31 | unitEndpoint->connectTo(*units.at(i)->getUnit()); 32 | unitEndpoint = units.at(i)->getUnit(); 33 | } 34 | 35 | toMixer(unitEndpoint); 36 | loadPresets(); 37 | return *this; 38 | } 39 | 40 | aumAudioUnitChain& aumAudioUnitChain::link(aumManagedAudioUnit* unit) { 41 | unit->getType() == AU_TYPE_SYNTH ? 42 | loadSynth(unit) : loadUnit(unit); 43 | return *this; 44 | } 45 | 46 | aumAudioUnitChain& aumAudioUnitChain::to(aumManagedAudioUnit* unit) { 47 | return link(unit); 48 | } 49 | 50 | void aumAudioUnitChain::showUI(int chainIndex, int numChains){ 51 | for(int i = 0; i < units.size(); i++) { 52 | units.at(i)->showUI(chainName, chainIndex, numChains, i, units.size()); 53 | } 54 | } 55 | 56 | void aumAudioUnitChain::showSynthUI(int chainIndex, int numChains){ 57 | for(int i = 0; i < units.size(); i++) { 58 | if(units.at(i)->isSynth()){ 59 | units.at(i)->showUI(chainName, chainIndex, numChains, i, units.size()); 60 | } 61 | } 62 | } 63 | 64 | bool aumAudioUnitChain::isSelected() { 65 | return selected; 66 | } 67 | 68 | void aumAudioUnitChain::select() { 69 | selected = true; 70 | presetsHandler.select(); 71 | } 72 | 73 | void aumAudioUnitChain::deselect() { 74 | selected = false; 75 | presetsHandler.deselect(); 76 | } 77 | 78 | void aumAudioUnitChain::sendMidiOn(int midiNum) { 79 | midi.sendNoteOn(1, midiNum); 80 | midiEvents.push_back("[ON: " + ofToString(midiNum) + "]"); 81 | } 82 | 83 | void aumAudioUnitChain::sendMidiOff(int midiNum) { 84 | midi.sendNoteOff(1, midiNum); 85 | midiEvents.push_back("[OFF: " + ofToString(midiNum) + "]"); 86 | } 87 | 88 | void aumAudioUnitChain::sendNoteOn(string note) { 89 | utils.executeMidiCommand(note + " ON", &midi); 90 | midiEvents.push_back("[ON: " + ofToString(note) + "]"); 91 | } 92 | 93 | void aumAudioUnitChain::sendNoteOff(string note) { 94 | utils.executeMidiCommand(note + " OFF", &midi); 95 | midiEvents.push_back("[OFF: " + ofToString(note) + "]"); 96 | } 97 | 98 | ofxAudioUnitTap* aumAudioUnitChain::tap() { 99 | return &tapUnit; 100 | } 101 | 102 | aumPresets* aumAudioUnitChain::presets() { 103 | return &presetsHandler; 104 | } 105 | 106 | string aumAudioUnitChain::getUnitReport() { 107 | report = ""; 108 | for(int i = 0; i < units.size(); i++) { 109 | report += (i > 0 ? "" : "") + ("\"" + units.at(i)->getUnitName() + "\" ->\n"); 110 | } 111 | return report + " Compressor/Mixer"; 112 | } 113 | 114 | string aumAudioUnitChain::getMidiReport() { 115 | report = ""; 116 | for(int i = 0; i < midiEvents.size(); i++) { 117 | report += midiEvents.at(i) + " "; 118 | } 119 | midiEvents.clear(); 120 | return report; 121 | } 122 | 123 | string aumAudioUnitChain::getClassName() { 124 | return className; 125 | } 126 | 127 | string aumAudioUnitChain::getName() { 128 | return chainName; 129 | } 130 | 131 | ofColor aumAudioUnitChain::getColor() { 132 | return waveColor; 133 | } 134 | 135 | void aumAudioUnitChain::loadUnit(aumManagedAudioUnit* unit) { 136 | presetsHandler.add(unit); 137 | units.push_back(unit); 138 | } 139 | 140 | void aumAudioUnitChain::loadSynth(aumManagedAudioUnit* _synth) { 141 | loadUnit(_synth); 142 | midiHandler.setup(_synth->getUnit(), &midi, "openFrameworks: " + chainName); 143 | } 144 | -------------------------------------------------------------------------------- /src/Handlers/aumUserInterface.cpp: -------------------------------------------------------------------------------- 1 | #include "aumUserInterface.h" 2 | 3 | void aumUserInterface::setup() { 4 | midiReceiptTimeout = 15; 5 | padding = 10; 6 | controlsDimensions = ofVec2f(300, 340); 7 | chainInfoDimensions = ofVec2f(220, 340); 8 | waveformsDimensions = ofVec2f(220, 80); 9 | midiInfoDimensions = ofVec2f(220, 32); 10 | 11 | controlsPositions = getControlsPositions(); 12 | chainInfoPositions = ofVec2f(padding, padding); 13 | waveformsPositions = ofVec2f(padding, chainInfoPositions.y + chainInfoDimensions.y + 5); 14 | midiInfoPositions = ofVec2f(padding, waveformsPositions.y + waveformsDimensions.y + 5); 15 | 16 | isFocused = true; 17 | } 18 | 19 | void aumUserInterface::setFocus(bool _isFocused) { 20 | isFocused = _isFocused; 21 | } 22 | 23 | void aumUserInterface::addChain() { 24 | reports.push_back(""); 25 | lastMidiRecieved.push_back(midiReceiptTimeout + 1); 26 | } 27 | 28 | void aumUserInterface::drawControls() { 29 | controlsPositions = getControlsPositions(); 30 | drawDebugBox(controlsPositions.x, controlsPositions.y, controlsDimensions.x, controlsDimensions.y); 31 | ofSetColor(ofColor::white); 32 | ofDrawBitmapString(controlsReport(), controlsPositions.x + padding, controlsPositions.y + padding*2); 33 | } 34 | 35 | void aumUserInterface::drawChains(vector chains) { 36 | ofVec2f position; 37 | for(int i = 0; i < chains.size(); i++) { 38 | position.x = (chainInfoPositions.x * (i+1)) + (chainInfoDimensions.x * i); 39 | position.y = chainInfoPositions.y; 40 | drawWaveforms(chains.at(i), position.x); 41 | drawChainReport(chains.at(i), position, i+1); 42 | drawMidiReport(chains.at(i), position.x, i); 43 | } 44 | } 45 | 46 | void aumUserInterface::drawWaveforms(aumAudioUnitChain* chain, float positionX) { 47 | drawDebugBox(positionX, waveformsPositions.y, waveformsDimensions.x, waveformsDimensions.y, getBackgroundColor(chain)); 48 | chain->tap()->getStereoWaveform(leftWaveform, rightWaveform, waveformsDimensions.x, waveformsDimensions.y); 49 | ofSetColor(getTextColor(chain)); 50 | ofTranslate(positionX, waveformsPositions.y); 51 | leftWaveform.draw(); 52 | rightWaveform.draw(); 53 | ofTranslate(-positionX, -waveformsPositions.y); 54 | } 55 | 56 | void aumUserInterface::drawChainReport(aumAudioUnitChain* chain, ofVec2f position, int chainNumber) { 57 | drawDebugBox(position.x, position.y, chainInfoDimensions.x, chainInfoDimensions.y, getBackgroundColor(chain)); 58 | ofSetColor(getTextColor(chain)); 59 | ofDrawBitmapString(chainReport(chain, chainNumber), position.x + padding, position.y + padding*2); 60 | } 61 | 62 | void aumUserInterface::drawMidiReport(aumAudioUnitChain* chain, float positionX, int index) { 63 | drawDebugBox(positionX, midiInfoPositions.y, midiInfoDimensions.x, midiInfoDimensions.y, getBackgroundColor(chain)); 64 | ofDrawBitmapString(midiReport(chain, index), positionX + padding, midiInfoPositions.y + padding*2); 65 | } 66 | 67 | void aumUserInterface::drawDebugBox(int x, int y, int width, int height, ofColor color) { 68 | ofSetLineWidth(1); 69 | ofSetColor(color); 70 | ofFill(); 71 | ofDrawRectangle(x, y, width, height); 72 | ofSetColor(ofColor::white); 73 | ofNoFill(); 74 | ofDrawRectangle(x, y, width, height); 75 | } 76 | 77 | ofVec2f aumUserInterface::getControlsPositions() { 78 | return ofVec2f( 79 | ofGetWidth() - controlsDimensions.x - padding, 80 | ofGetHeight() - controlsDimensions.y - padding); 81 | } 82 | 83 | ofColor aumUserInterface::getBackgroundColor(aumAudioUnitChain* chain) { 84 | return chain->isSelected() ? 85 | ofColor(chain->getColor(), 128) : 86 | ofColor(chain->getColor(), 32); 87 | } 88 | 89 | ofColor aumUserInterface::getTextColor(aumAudioUnitChain* chain) { 90 | return chain->isSelected() ? 91 | ofColor(ofColor::white, 255) : 92 | ofColor(ofColor::white, 128); 93 | } 94 | 95 | string aumUserInterface::controlsReport() { 96 | stringstream report; 97 | 98 | if(isFocused) { 99 | report << " CONTROLS" 100 | << endl << "" 101 | << endl << " MANAGER" 102 | << endl << " ----------------------" 103 | << endl << " v: Toggle view overlay" 104 | << endl << " (upper) A: Show all UIs" 105 | << endl << " (lower) a: Show synth UIs" 106 | << endl << " m: Show mixer/compressor" 107 | << endl << "Left/right: Select chain" 108 | << endl << "" 109 | << endl << " SELECTED CHAIN [*]" 110 | << endl << " ----------------------" 111 | << endl << " u: Show audio unit UIs" 112 | << endl << " Up/down: Select preset" 113 | << endl << " (upper) S: Save current preset" 114 | << endl << " (lower) s: Save as new preset" 115 | << endl << " r: Rename current preset" 116 | << endl << " t: Send preset to trash" 117 | << endl << "" 118 | << endl << " EXAMPLE APP" 119 | << endl << " ----------------------" 120 | << endl << " SPACE: Start/stop playing" 121 | << endl << " [ / ]: Current note up / down"; 122 | } else { 123 | report << "Press Command key to set focus"; 124 | } 125 | return report.str(); 126 | } 127 | 128 | string aumUserInterface::chainReport(aumAudioUnitChain *chain, int number) { 129 | string underline(chain->getName().length(), '-'); 130 | stringstream report; 131 | report << "CHAIN " << number << " \"" << chain->getName() << "\"" 132 | << endl << "---------" << underline << "-" 133 | << endl << chain->getUnitReport() 134 | << endl << "" 135 | << endl << chain->presets()->report(); 136 | return report.str(); 137 | } 138 | 139 | string aumUserInterface::midiReport(aumAudioUnitChain *chain, int index) { 140 | tempMidiReport = chain->getMidiReport(); 141 | if(tempMidiReport.length() > 0) { 142 | reports[index] = tempMidiReport; 143 | lastMidiRecieved[index] = 0; 144 | } else { 145 | lastMidiRecieved[index]++; 146 | } 147 | ofSetColor(ofMap(lastMidiRecieved[index], 0, midiReceiptTimeout, 255, 0)); 148 | return reports[index]; 149 | } 150 | -------------------------------------------------------------------------------- /src/ofxAudioUnitManager.cpp: -------------------------------------------------------------------------------- 1 | #include "ofxAudioUnitManager.h" 2 | 3 | void ofxAudioUnitManager::setup() { 4 | showDebugUI = false; 5 | drawDarkOverlay = false; 6 | numUnmanagedInputs = 0; 7 | userInterface.setup(); 8 | compressor.setup("Main Compressor", kAudioUnitType_Effect, kAudioUnitSubType_DynamicsProcessor); 9 | mixer.connectTo(*compressor.getUnit()).connectTo(output); 10 | output.start(); 11 | focusOnCommand = false; 12 | isFocused = true; 13 | ofAddListener(ofEvents().draw, this, &ofxAudioUnitManager::draw); 14 | ofAddListener(ofEvents().exit, this, &ofxAudioUnitManager::exit); 15 | ofAddListener(ofEvents().keyPressed, this, &ofxAudioUnitManager::keyPressed); 16 | } 17 | 18 | void ofxAudioUnitManager::setupDark() { 19 | setup(); 20 | drawDarkOverlay = true; 21 | } 22 | 23 | void ofxAudioUnitManager::onlyFocusOnCommand() { 24 | focusOnCommand = true; 25 | isFocused = false; 26 | userInterface.setFocus(isFocused); 27 | } 28 | 29 | aumAudioUnitChain& ofxAudioUnitManager::createChain(aumAudioUnitChain *chain, string name, aumManagedAudioUnitMixer* altMixer, ofColor color) { 30 | userInterface.addChain(); 31 | chains.push_back(chain); 32 | name = name == "" ? "chain" + ofToString(chains.size()) : name; 33 | 34 | ofxAudioUnitMixer* targetMixer = altMixer == NULL ? &mixer : altMixer->getUnit(); 35 | int mixerBusIndex = nextMixerBusIndex(targetMixer); 36 | targetMixer->setInputBusCount(mixerBusIndex + 1); 37 | chain->setup(name, targetMixer, &compressor, mixerBusIndex, color); 38 | 39 | selectChain(chains.size() - 1); 40 | return *chain; 41 | } 42 | 43 | void ofxAudioUnitManager::addUnmanagedUnit(ofxAudioUnit* unit){ 44 | numUnmanagedInputs++; 45 | int mixerBusIndex = nextMixerBusIndex(&mixer); 46 | mixer.setInputBusCount(mixerBusIndex + 1); 47 | unit->connectTo(mixer, mixerBusIndex); 48 | } 49 | 50 | void ofxAudioUnitManager::loadPresets(aumAudioUnitChain *chain) { 51 | chain->loadPresets(); 52 | selectChain(chain); 53 | } 54 | 55 | void ofxAudioUnitManager::draw(ofEventArgs& args) { 56 | if(ofGetFrameNum() == 0) { 57 | selectChain(0); 58 | } 59 | if(showDebugUI) { 60 | if(drawDarkOverlay){ 61 | ofSetColor(ofColor::black, 180); 62 | ofFill(); 63 | ofDrawRectangle(0, 0, ofGetWidth(), ofGetHeight()); 64 | } 65 | userInterface.drawChains(chains); 66 | userInterface.drawControls(); 67 | } 68 | } 69 | 70 | void ofxAudioUnitManager::exit(ofEventArgs& args) { 71 | for(int i = 0; i < chains.size(); i++) { 72 | chains.at(i)->exit(); 73 | } 74 | } 75 | 76 | void ofxAudioUnitManager::keyPressed(ofKeyEventArgs& args) { 77 | //Toggle focus on command 78 | if(focusOnCommand && args.key == 4352) { 79 | isFocused = !isFocused; 80 | userInterface.setFocus(isFocused); 81 | } 82 | 83 | if((focusOnCommand && isFocused) || !focusOnCommand) { 84 | if (args.key == 'u') { 85 | showSelectedChainUI(); 86 | } else if (args.key == 'A') { 87 | showAllUIs(); 88 | } else if (args.key == 'a') { 89 | showAllSynthUIs(); 90 | } else if (args.key == 'm') { 91 | showMixerUI(); 92 | showCompressorUI(); 93 | } else if(args.key == 'v') { 94 | toggleDebugUI(); 95 | } else if(args.key == 'S') { 96 | selectedChain->presets()->saveOverwrite(); 97 | } else if(args.key == 's') { 98 | selectedChain->presets()->saveNew(); 99 | } else if(args.key == 'r') { 100 | selectedChain->presets()->rename(); 101 | } else if(args.key == 't') { 102 | selectedChain->presets()->trash(); 103 | } else if(args.key == OF_KEY_DOWN) { 104 | selectedChain->presets()->increment(); 105 | } else if(args.key == OF_KEY_UP) { 106 | selectedChain->presets()->decrement(); 107 | } else if(args.key == OF_KEY_RIGHT) { 108 | incrementSelectedChain(); 109 | } else if(args.key == OF_KEY_LEFT) { 110 | decrementSelectedChain(); 111 | } 112 | } 113 | } 114 | 115 | void ofxAudioUnitManager::toggleDebugUI() { 116 | showDebugUI = !showDebugUI; 117 | } 118 | 119 | void ofxAudioUnitManager::enableDebugUI(bool show) { 120 | showDebugUI = show; 121 | } 122 | 123 | void ofxAudioUnitManager::incrementSelectedChain() { 124 | int index = selectedChainIndex + 1 >= chains.size() ? 0 : selectedChainIndex + 1; 125 | selectChain(index); 126 | } 127 | 128 | void ofxAudioUnitManager::decrementSelectedChain() { 129 | int index = selectedChainIndex - 1 < 0 ? chains.size() - 1 : selectedChainIndex - 1; 130 | selectChain(index); 131 | } 132 | 133 | ofxAudioUnitMixer* ofxAudioUnitManager::getMixer() { 134 | return &mixer; 135 | } 136 | 137 | vector ofxAudioUnitManager::allChains() { 138 | return chains; 139 | } 140 | 141 | aumAudioUnitChain* ofxAudioUnitManager::getChain(int chainId) { 142 | return chains.at(chainId); 143 | } 144 | 145 | void ofxAudioUnitManager::selectChain(int index) { 146 | for(int i = 0; i < chains.size(); i++) { 147 | i == index ? chains.at(i)->select() : chains.at(i)->deselect(); 148 | } 149 | selectedChainIndex = index; 150 | selectedChain = chains.at(index); 151 | } 152 | 153 | void ofxAudioUnitManager::selectChain(aumAudioUnitChain *chain) { 154 | for(int i = 0; i < chains.size(); i++) { 155 | if(chains.at(i) == chain) { 156 | selectedChainIndex = i; 157 | } 158 | } 159 | chain->select(); 160 | selectedChain = chain; 161 | } 162 | 163 | void ofxAudioUnitManager::showSelectedChainUI() { 164 | selectedChain->showUI(selectedChainIndex, chains.size()); 165 | } 166 | 167 | void ofxAudioUnitManager::showAllSynthUIs() { 168 | for(int i = 0; i < chains.size(); i++) { 169 | chains.at(i)->showSynthUI(i, chains.size()); 170 | } 171 | } 172 | 173 | void ofxAudioUnitManager::showAllUIs() { 174 | for(int i = 0; i < chains.size(); i++) { 175 | chains.at(i)->showUI(i, chains.size()); 176 | } 177 | } 178 | 179 | void ofxAudioUnitManager::showMixerUI() { 180 | mixer.showUI("Mixer", ofGetScreenWidth() * 0.25, ofGetScreenHeight() * 0.25); 181 | } 182 | 183 | void ofxAudioUnitManager::showCompressorUI() { 184 | compressor.getUnit()->showUI("Compressor", ofGetScreenWidth() * 0.25, ofGetScreenHeight() * 0.5); 185 | } 186 | 187 | int ofxAudioUnitManager::nextMixerBusIndex(ofxAudioUnitMixer* mixer) { 188 | if(mixersToBusCounts.find(mixer) == mixersToBusCounts.end()) { 189 | mixersToBusCounts[mixer] = 0; 190 | } else { 191 | mixersToBusCounts[mixer]++; 192 | } 193 | return mixersToBusCounts[mixer]; 194 | } 195 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/wiggly/My_Synth.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAABcAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAAEAAAA 8 | AAAAAAUAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAgAAAAAAAAACQAAAAAAAAAKAAAAAAAA 9 | AAsAAAAAAAAADAAAAAAAAAANAAAAAAAAAA4AAAAAAAAADwAAAAAAAAAQAAAAAAAAABEA 10 | AAAAAAAAEgAAAAAAAAATAAAAAAAAABQAAAAAAAAAFQAAAAAAAAAWAAAAAAAAABcAAAAA 11 | AAAAGAAAAAAAAAAZAAAAAAAAABoAAAAAAAAAGwAAAAAAAAAcAAAAAAAAAB0AAAAAAAAA 12 | HgAAAAAAAAAfAAAAAAAAACAAAAAAAAAAIQAAAAAAAAAiAAAAAAAAACMAAAAAAAAAJAAA 13 | AAAAAAAlAAAAAAAAACYAAAAAAAAAJwAAAAAAAAAoAAAAAAAAACkAAAAAAAAAKgAAAAAA 14 | AAArAAAAAAAAACwAAAAAAAAALQAAAAAAAAAuAAAAAAAAAC8AAAAAAAAAMAAAAAAAAAAx 15 | AAAAAAAAADIAAAAAAAAAMwAAAAAAAAA0AAAAAAAAADUAAAAAAAAANgAAAAAAAAA3AAAA 16 | AAAAADgAAAAAAAAAOQAAAAAAAAA6AAAAAAAAADsAAAAAAAAAPAAAAAAAAAA9AAAAAAAA 17 | AD4AAAAAAAAAPwAAAAAAAABAAAAAAAAAAEEAAAAAAAAAQgAAAAAAAABDAAAAAAAAAEQA 18 | AAAAAAAARQAAAAAAAABGAAAAAAAAAEcAAAAAAAAASAAAAAAAAABJAAAAAAAAAEoAAAAA 19 | AAAASwAAAAAAAABMAAAAAAAAAE0AAAAAAAAATgAAAAAAAABPAAAAAAAAAFAAAAAAAAAA 20 | UQAAAAAAAABSAAAAAAAAAFMAAAAAAAAAVAAAAAAAAABVAAAAAAAAAFYAAAAAAAAAVwAA 21 | AAAAAABYAAAAAAAAAFkAAAAAAAAAWgAAAAAAAABbAAAAAA== 22 | 23 | jucePluginState 24 | 25 | VkMyIcsNAAA8dGFsIGN1cnByb2dyYW09IjAiIHZlcnNpb249IjEuNyI+PHByb2dyYW1z 26 | Pjxwcm9ncmFtIHByb2dyYW1uYW1lPSIhIFN0YXJ0dXAgSnVubyBPc2MgVEFMIiB2b2x1 27 | bWU9IjAuNDY4MDAwMDI1IiBmaWx0ZXJ0eXBlPSIwIiBjdXRvZmY9IjEiIHJlc29uYW5j 28 | ZT0iMCIgb3NjMXZvbHVtZT0iMC43MTYwMDAwMjEiIG9zYzJ2b2x1bWU9IjAuNTY0MDAw 29 | MDEiIG9zYzN2b2x1bWU9IjAuMjM2MDAwMDE2IiBvc2Mxd2F2ZWZvcm09IjAuNSIgb3Nj 30 | MndhdmVmb3JtPSIwIiBvc2NzeW5jPSIwIiBvc2NtYXN0ZXJ0dW5lPSIwLjUiIG9zYzF0 31 | dW5lPSIwLjI3ODAwMDAyNyIgb3NjMnR1bmU9IjAuNDUyMDAwMDIyIiBvc2MxZmluZXR1 32 | bmU9IjAuNjAwMDAwMDI0IiBvc2MyZmluZXR1bmU9IjAuNSIgcG9ydGFtZW50bz0iMCIg 33 | a2V5Zm9sbG93PSIwIiBmaWx0ZXJjb250b3VyPSIwLjUiIGZpbHRlcmF0dGFjaz0iMCIg 34 | ZmlsdGVyZGVjYXk9IjAiIGZpbHRlcnN1c3RhaW49IjEiIGZpbHRlcnJlbGVhc2U9IjAi 35 | IGFtcGF0dGFjaz0iMC40NDQwMDAwMzYiIGFtcGRlY2F5PSIwLjQ0ODAwMDAxNCIgYW1w 36 | c3VzdGFpbj0iMSIgYW1wcmVsZWFzZT0iMC40MDQwMDAwMTQiIHZvaWNlcz0iMCIgcG9y 37 | dGFtZW50b21vZGU9IjAiIGxmbzF3YXZlZm9ybT0iMCIgbGZvMndhdmVmb3JtPSIwIiBs 38 | Zm8xcmF0ZT0iMC40MDQwMDAwMTQiIGxmbzJyYXRlPSIwIiBsZm8xYW1vdW50PSIwLjg0 39 | NDAwMDA0MSIgbGZvMmFtb3VudD0iMC41MjQwMDAwNDkiIGxmbzFkZXN0aW5hdGlvbj0i 40 | MCIgbGZvMmRlc3RpbmF0aW9uPSIwIiBsZm8xcGhhc2U9IjAiIGxmbzJwaGFzZT0iMCIg 41 | b3NjMXB3PSIwLjQ1MjAwMDAyMiIgb3NjMmZtPSIwIiBvc2MxcGhhc2U9IjAuNSIgb3Nj 42 | MnBoYXNlPSIwLjU1NjAwMDA1NCIgdHJhbnNwb3NlPSIwLjY0NDAwMDA1MyIgZnJlZWFk 43 | YXR0YWNrPSIwLjMyNDAwMDAwMSIgZnJlZWFkZGVjYXk9IjAuMDQ4MDAwMDAwNCIgZnJl 44 | ZWFkYW1vdW50PSIwIiBmcmVlYWRkZXN0aW5hdGlvbj0iMCIgbGZvMXN5bmM9IjEiIGxm 45 | bzFrZXl0cmlnZ2VyPSIwIiBsZm8yc3luYz0iMCIgbGZvMmtleXRyaWdnZXI9IjAiIHZl 46 | bG9jaXR5dm9sdW1lPSIwIiB2ZWxvY2l0eWNvbnRvdXI9IjAiIHZlbG9jaXR5Y3V0b2Zm 47 | PSIwIiBwaXRjaHdoZWVsY3V0b2ZmPSIwIiBwaXRjaHdoZWVscGl0Y2g9IjAiIGhpZ2hw 48 | YXNzPSIwIiBkZXR1bmU9IjAiIHZpbnRhZ2Vub2lzZT0iMCIgcmluZ21vZHVsYXRpb249 49 | IjAiIGNob3J1czFlbmFibGU9IjEiIGNob3J1czJlbmFibGU9IjEiIHJldmVyYndldD0i 50 | MCIgcmV2ZXJiZGVjYXk9IjAuNSIgcmV2ZXJicHJlZGVsYXk9IjAiIHJldmVyYmhpZ2hj 51 | dXQ9IjAiIHJldmVyYmxvd2N1dD0iMSIgb3NjYml0Y3J1c2hlcj0iMC4zMjAwMDAwMjMi 52 | IGZpbHRlcmRyaXZlPSIwIiBkZWxheXdldD0iMC4yMDQwMDAwMTEiIGRlbGF5dGltZT0i 53 | MC41IiBkZWxheXN5bmM9IjAiIGRlbGF5ZmFjdG9ybD0iMCIgZGVsYXlmYWN0b3JyPSIw 54 | IiBkZWxheWhpZ2hzaGVsZj0iMCIgZGVsYXlsb3dzaGVsZj0iMCIgZGVsYXlmZWVkYmFj 55 | az0iMC41IiBlbnZlbG9wZWVkaXRvcmRlc3QxPSIwLjU3MTQyODU5NyIgZW52ZWxvcGVl 56 | ZGl0b3JzcGVlZD0iMC42MDAwMDAwMjQiIGVudmVsb3BlZWRpdG9yYW1vdW50PSIwLjY3 57 | NjAwMDA1OSIgZW52ZWxvcGVvbmVzaG90PSIwIiBlbnZlbG9wZWZpeHRlbXBvPSIwIiB0 58 | YWIxb3Blbj0iMSIgdGFiMm9wZW49IjAiIHRhYjNvcGVuPSIwIiB0YWI0b3Blbj0iMSI+ 59 | PHNwbGluZVBvaW50cz48c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIxIiBpc0VuZFBv 60 | aW50PSIwIiBjZW50ZXJQb2ludFg9IjAiIGNlbnRlclBvaW50WT0iMC41IiBjb250cm9s 61 | UG9pbnRMZWZ0WD0iMCIgY29udHJvbFBvaW50TGVmdFk9IjAuNSIgY29udHJvbFBvaW50 62 | UmlnaHRYPSIwLjEwMDAwMDAwMSIgY29udHJvbFBvaW50UmlnaHRZPSIwLjUiLz48c3Bs 63 | aW5lUG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0VuZFBvaW50PSIwIiBjZW50ZXJQb2lu 64 | dFg9IjAuMTMzMzMzMzQiIGNlbnRlclBvaW50WT0iMC4yOTUwMDAwMTciIGNvbnRyb2xQ 65 | b2ludExlZnRYPSIwLjAzMzMzMzMzODgiIGNvbnRyb2xQb2ludExlZnRZPSIwLjI5NTAw 66 | MDAxNyIgY29udHJvbFBvaW50UmlnaHRYPSIwLjIzMzMzMzM0OSIgY29udHJvbFBvaW50 67 | UmlnaHRZPSIwLjI5NTAwMDAxNyIvPjxzcGxpbmVQb2ludCBpc1N0YXJ0UG9pbnQ9IjAi 68 | IGlzRW5kUG9pbnQ9IjAiIGNlbnRlclBvaW50WD0iMC4yMjIyMjIyMjQiIGNlbnRlclBv 69 | aW50WT0iMC44NjUwMDAwMSIgY29udHJvbFBvaW50TGVmdFg9IjAuMTIyMjIyMjMiIGNv 70 | bnRyb2xQb2ludExlZnRZPSIwLjg2NTAwMDAxIiBjb250cm9sUG9pbnRSaWdodFg9IjAu 71 | MzIyMjIyMzUyIiBjb250cm9sUG9pbnRSaWdodFk9IjAuODY1MDAwMDEiLz48c3BsaW5l 72 | UG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0VuZFBvaW50PSIwIiBjZW50ZXJQb2ludFg9 73 | IjAuNDg4ODg4ODkiIGNlbnRlclBvaW50WT0iMC4xMDAwMDAwMjQiIGNvbnRyb2xQb2lu 74 | dExlZnRYPSIwLjM4ODg4ODg5NiIgY29udHJvbFBvaW50TGVmdFk9IjAuMTAwMDAwMDI0 75 | IiBjb250cm9sUG9pbnRSaWdodFg9IjAuNTg4ODg4OTQzIiBjb250cm9sUG9pbnRSaWdo 76 | dFk9IjAuMTAwMDAwMDI0Ii8+PHNwbGluZVBvaW50IGlzU3RhcnRQb2ludD0iMCIgaXNF 77 | bmRQb2ludD0iMCIgY2VudGVyUG9pbnRYPSIwLjYwMDAwMDAyNCIgY2VudGVyUG9pbnRZ 78 | PSIwLjcyNTAwMDAyNCIgY29udHJvbFBvaW50TGVmdFg9IjAuNSIgY29udHJvbFBvaW50 79 | TGVmdFk9IjAuNzI1MDAwMDI0IiBjb250cm9sUG9pbnRSaWdodFg9IjAuNzAwMDAwMDQ4 80 | IiBjb250cm9sUG9pbnRSaWdodFk9IjAuNzI1MDAwMDI0Ii8+PHNwbGluZVBvaW50IGlz 81 | U3RhcnRQb2ludD0iMCIgaXNFbmRQb2ludD0iMCIgY2VudGVyUG9pbnRYPSIwLjc0ODE0 82 | ODE0MyIgY2VudGVyUG9pbnRZPSIwLjIzNTAwMDAxNCIgY29udHJvbFBvaW50TGVmdFg9 83 | IjAuNjQ4MTQ4MTE5IiBjb250cm9sUG9pbnRMZWZ0WT0iMC4yMzUwMDAwMTQiIGNvbnRy 84 | b2xQb2ludFJpZ2h0WD0iMC44NDgxNDgxNjciIGNvbnRyb2xQb2ludFJpZ2h0WT0iMC4y 85 | MzUwMDAwMTQiLz48c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0VuZFBvaW50 86 | PSIwIiBjZW50ZXJQb2ludFg9IjAuODA3NDA3Mzc5IiBjZW50ZXJQb2ludFk9IjAuODk5 87 | OTk5OTc2IiBjb250cm9sUG9pbnRMZWZ0WD0iMC43MDc0MDczNTUiIGNvbnRyb2xQb2lu 88 | dExlZnRZPSIwLjg5OTk5OTk3NiIgY29udHJvbFBvaW50UmlnaHRYPSIwLjkwNzQwNzQw 89 | MyIgY29udHJvbFBvaW50UmlnaHRZPSIwLjg5OTk5OTk3NiIvPjxzcGxpbmVQb2ludCBp 90 | c1N0YXJ0UG9pbnQ9IjAiIGlzRW5kUG9pbnQ9IjEiIGNlbnRlclBvaW50WD0iMSIgY2Vu 91 | dGVyUG9pbnRZPSIwLjUiIGNvbnRyb2xQb2ludExlZnRYPSIwLjg5OTk5OTk3NiIgY29u 92 | dHJvbFBvaW50TGVmdFk9IjAuNSIgY29udHJvbFBvaW50UmlnaHRYPSIxIiBjb250cm9s 93 | UG9pbnRSaWdodFk9IjAuNSIvPjwvc3BsaW5lUG9pbnRzPjwvcHJvZ3JhbT48L3Byb2dy 94 | YW1zPjxtaWRpbWFwLz48L3RhbD4A/w== 95 | 96 | manufacturer 97 | 1414481749 98 | name 99 | Untitled 100 | subtype 101 | 1852011892 102 | type 103 | 1635085685 104 | version 105 | 0 106 | 107 | 108 | -------------------------------------------------------------------------------- /example/bin/data/AudioUnitPresets/chain1/rhythmic/My_Synth.aupreset: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | data 6 | 7 | AAAAAAAAAAAAAABcAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAAEAAAA 8 | AAAAAAUAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAgAAAAAAAAACQAAAAAAAAAKAAAAAAAA 9 | AAsAAAAAAAAADAAAAAAAAAANAAAAAAAAAA4AAAAAAAAADwAAAAAAAAAQAAAAAAAAABEA 10 | AAAAAAAAEgAAAAAAAAATAAAAAAAAABQAAAAAAAAAFQAAAAAAAAAWAAAAAAAAABcAAAAA 11 | AAAAGAAAAAAAAAAZAAAAAAAAABoAAAAAAAAAGwAAAAAAAAAcAAAAAAAAAB0AAAAAAAAA 12 | HgAAAAAAAAAfAAAAAAAAACAAAAAAAAAAIQAAAAAAAAAiAAAAAAAAACMAAAAAAAAAJAAA 13 | AAAAAAAlAAAAAAAAACYAAAAAAAAAJwAAAAAAAAAoAAAAAAAAACkAAAAAAAAAKgAAAAAA 14 | AAArAAAAAAAAACwAAAAAAAAALQAAAAAAAAAuAAAAAAAAAC8AAAAAAAAAMAAAAAAAAAAx 15 | AAAAAAAAADIAAAAAAAAAMwAAAAAAAAA0AAAAAAAAADUAAAAAAAAANgAAAAAAAAA3AAAA 16 | AAAAADgAAAAAAAAAOQAAAAAAAAA6AAAAAAAAADsAAAAAAAAAPAAAAAAAAAA9AAAAAAAA 17 | AD4AAAAAAAAAPwAAAAAAAABAAAAAAAAAAEEAAAAAAAAAQgAAAAAAAABDAAAAAAAAAEQA 18 | AAAAAAAARQAAAAAAAABGAAAAAAAAAEcAAAAAAAAASAAAAAAAAABJAAAAAAAAAEoAAAAA 19 | AAAASwAAAAAAAABMAAAAAAAAAE0AAAAAAAAATgAAAAAAAABPAAAAAAAAAFAAAAAAAAAA 20 | UQAAAAAAAABSAAAAAAAAAFMAAAAAAAAAVAAAAAAAAABVAAAAAAAAAFYAAAAAAAAAVwAA 21 | AAAAAABYAAAAAAAAAFkAAAAAAAAAWgAAAAAAAABbAAAAAA== 22 | 23 | jucePluginState 24 | 25 | VkMyIdENAAA8dGFsIGN1cnByb2dyYW09IjAiIHZlcnNpb249IjEuNyI+PHByb2dyYW1z 26 | Pjxwcm9ncmFtIHByb2dyYW1uYW1lPSIhIFN0YXJ0dXAgSnVubyBPc2MgVEFMIiB2b2x1 27 | bWU9IjAuNDgwMDAwMDE5IiBmaWx0ZXJ0eXBlPSIwIiBjdXRvZmY9IjEiIHJlc29uYW5j 28 | ZT0iMCIgb3NjMXZvbHVtZT0iMC42NzIwMDAwNTEiIG9zYzJ2b2x1bWU9IjAiIG9zYzN2 29 | b2x1bWU9IjAuMTk2MDAwMDEiIG9zYzF3YXZlZm9ybT0iMC41IiBvc2Myd2F2ZWZvcm09 30 | IjAuNSIgb3Njc3luYz0iMCIgb3NjbWFzdGVydHVuZT0iMC41IiBvc2MxdHVuZT0iMC4w 31 | NzYwMDAwMDUiIG9zYzJ0dW5lPSIwLjY0NDAwMDA1MyIgb3NjMWZpbmV0dW5lPSIwLjYw 32 | MDAwMDAyNCIgb3NjMmZpbmV0dW5lPSIwLjUiIHBvcnRhbWVudG89IjAiIGtleWZvbGxv 33 | dz0iMCIgZmlsdGVyY29udG91cj0iMC41IiBmaWx0ZXJhdHRhY2s9IjAiIGZpbHRlcmRl 34 | Y2F5PSIwLjAyODAwMDAwMDkiIGZpbHRlcnN1c3RhaW49IjEiIGZpbHRlcnJlbGVhc2U9 35 | IjAiIGFtcGF0dGFjaz0iMC40NDQwMDAwMzYiIGFtcGRlY2F5PSIwLjQ0ODAwMDAxNCIg 36 | YW1wc3VzdGFpbj0iMSIgYW1wcmVsZWFzZT0iMC4yMzYwMDAwMTYiIHZvaWNlcz0iMCIg 37 | cG9ydGFtZW50b21vZGU9IjAiIGxmbzF3YXZlZm9ybT0iMCIgbGZvMndhdmVmb3JtPSIw 38 | IiBsZm8xcmF0ZT0iMC4zODQwMDAwMDMiIGxmbzJyYXRlPSIwIiBsZm8xYW1vdW50PSIw 39 | LjY5NjAwMDA0IiBsZm8yYW1vdW50PSIwLjUyNDAwMDA0OSIgbGZvMWRlc3RpbmF0aW9u 40 | PSIwLjQyODU3MTQzMyIgbGZvMmRlc3RpbmF0aW9uPSIwIiBsZm8xcGhhc2U9IjAiIGxm 41 | bzJwaGFzZT0iMCIgb3NjMXB3PSIwLjQ1MjAwMDAyMiIgb3NjMmZtPSIwIiBvc2MxcGhh 42 | c2U9IjAuNSIgb3NjMnBoYXNlPSIwIiB0cmFuc3Bvc2U9IjAuNjQ0MDAwMDUzIiBmcmVl 43 | YWRhdHRhY2s9IjAuMjg0MDAwMDA5IiBmcmVlYWRkZWNheT0iMCIgZnJlZWFkYW1vdW50 44 | PSIwIiBmcmVlYWRkZXN0aW5hdGlvbj0iMC40MDAwMDAwMDYiIGxmbzFzeW5jPSIxIiBs 45 | Zm8xa2V5dHJpZ2dlcj0iMCIgbGZvMnN5bmM9IjAiIGxmbzJrZXl0cmlnZ2VyPSIwIiB2 46 | ZWxvY2l0eXZvbHVtZT0iMCIgdmVsb2NpdHljb250b3VyPSIwIiB2ZWxvY2l0eWN1dG9m 47 | Zj0iMCIgcGl0Y2h3aGVlbGN1dG9mZj0iMC41NzIwMDAwMjciIHBpdGNod2hlZWxwaXRj 48 | aD0iMCIgaGlnaHBhc3M9IjAiIGRldHVuZT0iMCIgdmludGFnZW5vaXNlPSIwIiByaW5n 49 | bW9kdWxhdGlvbj0iMCIgY2hvcnVzMWVuYWJsZT0iMSIgY2hvcnVzMmVuYWJsZT0iMSIg 50 | cmV2ZXJid2V0PSIwIiByZXZlcmJkZWNheT0iMC41IiByZXZlcmJwcmVkZWxheT0iMCIg 51 | cmV2ZXJiaGlnaGN1dD0iMCIgcmV2ZXJibG93Y3V0PSIxIiBvc2NiaXRjcnVzaGVyPSIx 52 | IiBmaWx0ZXJkcml2ZT0iMCIgZGVsYXl3ZXQ9IjAuMTg4MDAwMDA4IiBkZWxheXRpbWU9 53 | IjAuNjA4MDAwMDQiIGRlbGF5c3luYz0iMCIgZGVsYXlmYWN0b3JsPSIwIiBkZWxheWZh 54 | Y3RvcnI9IjAiIGRlbGF5aGlnaHNoZWxmPSIwIiBkZWxheWxvd3NoZWxmPSIwIiBkZWxh 55 | eWZlZWRiYWNrPSIwLjcyMDAwMDAyOSIgZW52ZWxvcGVlZGl0b3JkZXN0MT0iMC4yODU3 56 | MTQyOTgiIGVudmVsb3BlZWRpdG9yc3BlZWQ9IjAuNDAwMDAwMDA2IiBlbnZlbG9wZWVk 57 | aXRvcmFtb3VudD0iMCIgZW52ZWxvcGVvbmVzaG90PSIwIiBlbnZlbG9wZWZpeHRlbXBv 58 | PSIwIiB0YWIxb3Blbj0iMSIgdGFiMm9wZW49IjEiIHRhYjNvcGVuPSIwIiB0YWI0b3Bl 59 | bj0iMCI+PHNwbGluZVBvaW50cz48c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIxIiBp 60 | c0VuZFBvaW50PSIwIiBjZW50ZXJQb2ludFg9IjAiIGNlbnRlclBvaW50WT0iMC41IiBj 61 | b250cm9sUG9pbnRMZWZ0WD0iMCIgY29udHJvbFBvaW50TGVmdFk9IjAuNSIgY29udHJv 62 | bFBvaW50UmlnaHRYPSIwLjEwMDAwMDAwMSIgY29udHJvbFBvaW50UmlnaHRZPSIwLjUi 63 | Lz48c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0VuZFBvaW50PSIwIiBjZW50 64 | ZXJQb2ludFg9IjAuMTMzMzMzMzQiIGNlbnRlclBvaW50WT0iMC4yOTUwMDAwMTciIGNv 65 | bnRyb2xQb2ludExlZnRYPSIwLjAzMzMzMzMzODgiIGNvbnRyb2xQb2ludExlZnRZPSIw 66 | LjI5NTAwMDAxNyIgY29udHJvbFBvaW50UmlnaHRYPSIwLjIzMzMzMzM0OSIgY29udHJv 67 | bFBvaW50UmlnaHRZPSIwLjI5NTAwMDAxNyIvPjxzcGxpbmVQb2ludCBpc1N0YXJ0UG9p 68 | bnQ9IjAiIGlzRW5kUG9pbnQ9IjAiIGNlbnRlclBvaW50WD0iMC4yMjIyMjIyMjQiIGNl 69 | bnRlclBvaW50WT0iMC44NjUwMDAwMSIgY29udHJvbFBvaW50TGVmdFg9IjAuMTIyMjIy 70 | MjMiIGNvbnRyb2xQb2ludExlZnRZPSIwLjg2NTAwMDAxIiBjb250cm9sUG9pbnRSaWdo 71 | dFg9IjAuMzIyMjIyMzUyIiBjb250cm9sUG9pbnRSaWdodFk9IjAuODY1MDAwMDEiLz48 72 | c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0VuZFBvaW50PSIwIiBjZW50ZXJQ 73 | b2ludFg9IjAuNDg4ODg4ODkiIGNlbnRlclBvaW50WT0iMC4xMDAwMDAwMjQiIGNvbnRy 74 | b2xQb2ludExlZnRYPSIwLjM4ODg4ODg5NiIgY29udHJvbFBvaW50TGVmdFk9IjAuMTAw 75 | MDAwMDI0IiBjb250cm9sUG9pbnRSaWdodFg9IjAuNTg4ODg4OTQzIiBjb250cm9sUG9p 76 | bnRSaWdodFk9IjAuMTAwMDAwMDI0Ii8+PHNwbGluZVBvaW50IGlzU3RhcnRQb2ludD0i 77 | MCIgaXNFbmRQb2ludD0iMCIgY2VudGVyUG9pbnRYPSIwLjYwMDAwMDAyNCIgY2VudGVy 78 | UG9pbnRZPSIwLjcyNTAwMDAyNCIgY29udHJvbFBvaW50TGVmdFg9IjAuNSIgY29udHJv 79 | bFBvaW50TGVmdFk9IjAuNzI1MDAwMDI0IiBjb250cm9sUG9pbnRSaWdodFg9IjAuNzAw 80 | MDAwMDQ4IiBjb250cm9sUG9pbnRSaWdodFk9IjAuNzI1MDAwMDI0Ii8+PHNwbGluZVBv 81 | aW50IGlzU3RhcnRQb2ludD0iMCIgaXNFbmRQb2ludD0iMCIgY2VudGVyUG9pbnRYPSIw 82 | Ljc0ODE0ODE0MyIgY2VudGVyUG9pbnRZPSIwLjIzNTAwMDAxNCIgY29udHJvbFBvaW50 83 | TGVmdFg9IjAuNjQ4MTQ4MTE5IiBjb250cm9sUG9pbnRMZWZ0WT0iMC4yMzUwMDAwMTQi 84 | IGNvbnRyb2xQb2ludFJpZ2h0WD0iMC44NDgxNDgxNjciIGNvbnRyb2xQb2ludFJpZ2h0 85 | WT0iMC4yMzUwMDAwMTQiLz48c3BsaW5lUG9pbnQgaXNTdGFydFBvaW50PSIwIiBpc0Vu 86 | ZFBvaW50PSIwIiBjZW50ZXJQb2ludFg9IjAuODA3NDA3Mzc5IiBjZW50ZXJQb2ludFk9 87 | IjAuODk5OTk5OTc2IiBjb250cm9sUG9pbnRMZWZ0WD0iMC43MDc0MDczNTUiIGNvbnRy 88 | b2xQb2ludExlZnRZPSIwLjg5OTk5OTk3NiIgY29udHJvbFBvaW50UmlnaHRYPSIwLjkw 89 | NzQwNzQwMyIgY29udHJvbFBvaW50UmlnaHRZPSIwLjg5OTk5OTk3NiIvPjxzcGxpbmVQ 90 | b2ludCBpc1N0YXJ0UG9pbnQ9IjAiIGlzRW5kUG9pbnQ9IjEiIGNlbnRlclBvaW50WD0i 91 | MSIgY2VudGVyUG9pbnRZPSIwLjUiIGNvbnRyb2xQb2ludExlZnRYPSIwLjg5OTk5OTk3 92 | NiIgY29udHJvbFBvaW50TGVmdFk9IjAuNSIgY29udHJvbFBvaW50UmlnaHRYPSIxIiBj 93 | b250cm9sUG9pbnRSaWdodFk9IjAuNSIvPjwvc3BsaW5lUG9pbnRzPjwvcHJvZ3JhbT48 94 | L3Byb2dyYW1zPjxtaWRpbWFwLz48L3RhbD4AAA== 95 | 96 | manufacturer 97 | 1414481749 98 | name 99 | Untitled 100 | subtype 101 | 1852011892 102 | type 103 | 1635085685 104 | version 105 | 0 106 | 107 | 108 | -------------------------------------------------------------------------------- /src/AudioUnits/aumUnit_AUMatrixReverb.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aumMonitorableAudioUnit.h" 3 | 4 | /******************************************************************************/ 5 | /* WARNING: THIS CLASS WAS GENERATED BY THE FOLLOWING FUNCTION: */ 6 | /* */ 7 | /* aumUnit_Generic::generateClassFileForAudioUnit(string deviceName); */ 8 | /* */ 9 | /* IF YOU EDIT THIS FILE, YOU RISK HAVING YOUR CHANGES OVERWRITTEN THE NEXT */ 10 | /* TIME THE FILE IS RE-WRITTEN BY THIS FUNCTION. TO EDIT THIS FILE, PLEASE */ 11 | /* COPY IT TO ANY OTHER FOLDER, RENAME THE CLASS, AND THEN MAKE EDITS. */ 12 | /******************************************************************************/ 13 | 14 | class aumUnit_AUMatrixReverb : public aumMonitorableAudioUnit 15 | { 16 | public: 17 | //Dry/Wet Mix 18 | //min: 0, max: 100, default: 100 19 | const static int dry_wet_mix = 0; 20 | 21 | //Small/Large Mix 22 | //min: 0, max: 100, default: 72 23 | const static int small_large_mix = 1; 24 | 25 | //Small Size 26 | //min: 0.0001, max: 0.05, default: 0.026721 27 | const static int small_size = 2; 28 | 29 | //Large Size 30 | //min: 0.005, max: 0.15, default: 0.0718 31 | const static int large_size = 3; 32 | 33 | //Pre-Delay 34 | //min: 0.001, max: 0.03, default: 0.015795 35 | const static int pre_delay = 4; 36 | 37 | //Large Delay 38 | //min: 0.001, max: 0.1, default: 0.00991 39 | const static int large_delay = 5; 40 | 41 | //Small Density 42 | //min: 0, max: 1, default: 0.52 43 | const static int small_density = 6; 44 | 45 | //Large Density 46 | //min: 0, max: 1, default: 0.74 47 | const static int large_density = 7; 48 | 49 | //Large Delay Range 50 | //min: 0, max: 1, default: 0.485 51 | const static int large_delay_range = 8; 52 | 53 | //Small HiFreq Absorption 54 | //min: 0.1, max: 1, default: 0.849 55 | const static int small_hifreq_absorption = 9; 56 | 57 | //Large HiFreq Absorption 58 | //min: 0.1, max: 1, default: 0.4155 59 | const static int large_hifreq_absorption = 10; 60 | 61 | //Small Delay Range 62 | //min: 0, max: 1, default: 0.58042 63 | const static int small_delay_range = 11; 64 | 65 | //Modulation Rate 66 | //min: 0.001, max: 2, default: 1.68014 67 | const static int modulation_rate = 12; 68 | 69 | //Modulation Depth 70 | //min: 0, max: 1, default: 0.515 71 | const static int modulation_depth = 13; 72 | 73 | //Filter Frequency 74 | //min: 10, max: 22050, default: 800 75 | const static int filter_frequency = 14; 76 | 77 | //Filter Bandwidth 78 | //min: 0.05, max: 4, default: 3 79 | const static int filter_bandwidth = 15; 80 | 81 | //Filter Gain 82 | //min: -18, max: 18, default: 0 83 | const static int filter_gain = 16; 84 | 85 | //These variables store the most recenty recorded values 86 | //of each of the parameters, for recording and detection 87 | AudioUnitParameterValue previous_dry_wet_mix; 88 | AudioUnitParameterValue previous_small_large_mix; 89 | AudioUnitParameterValue previous_small_size; 90 | AudioUnitParameterValue previous_large_size; 91 | AudioUnitParameterValue previous_pre_delay; 92 | AudioUnitParameterValue previous_large_delay; 93 | AudioUnitParameterValue previous_small_density; 94 | AudioUnitParameterValue previous_large_density; 95 | AudioUnitParameterValue previous_large_delay_range; 96 | AudioUnitParameterValue previous_small_hifreq_absorption; 97 | AudioUnitParameterValue previous_large_hifreq_absorption; 98 | AudioUnitParameterValue previous_small_delay_range; 99 | AudioUnitParameterValue previous_modulation_rate; 100 | AudioUnitParameterValue previous_modulation_depth; 101 | AudioUnitParameterValue previous_filter_frequency; 102 | AudioUnitParameterValue previous_filter_bandwidth; 103 | AudioUnitParameterValue previous_filter_gain; 104 | 105 | void setup(string _unitName) { 106 | aumManagedAudioUnit::setup(_unitName, 'aufx', 'mrev', 'appl', "aumUnit_AUMatrixReverb"); 107 | } 108 | 109 | void doPrintChanges() { 110 | compareAndPrint("dry_wet_mix", previous_dry_wet_mix, get(dry_wet_mix)); 111 | compareAndPrint("small_large_mix", previous_small_large_mix, get(small_large_mix)); 112 | compareAndPrint("small_size", previous_small_size, get(small_size)); 113 | compareAndPrint("large_size", previous_large_size, get(large_size)); 114 | compareAndPrint("pre_delay", previous_pre_delay, get(pre_delay)); 115 | compareAndPrint("large_delay", previous_large_delay, get(large_delay)); 116 | compareAndPrint("small_density", previous_small_density, get(small_density)); 117 | compareAndPrint("large_density", previous_large_density, get(large_density)); 118 | compareAndPrint("large_delay_range", previous_large_delay_range, get(large_delay_range)); 119 | compareAndPrint("small_hifreq_absorption", previous_small_hifreq_absorption, get(small_hifreq_absorption)); 120 | compareAndPrint("large_hifreq_absorption", previous_large_hifreq_absorption, get(large_hifreq_absorption)); 121 | compareAndPrint("small_delay_range", previous_small_delay_range, get(small_delay_range)); 122 | compareAndPrint("modulation_rate", previous_modulation_rate, get(modulation_rate)); 123 | compareAndPrint("modulation_depth", previous_modulation_depth, get(modulation_depth)); 124 | compareAndPrint("filter_frequency", previous_filter_frequency, get(filter_frequency)); 125 | compareAndPrint("filter_bandwidth", previous_filter_bandwidth, get(filter_bandwidth)); 126 | compareAndPrint("filter_gain", previous_filter_gain, get(filter_gain)); 127 | } 128 | 129 | void doRecordParams() { 130 | previous_dry_wet_mix = get(dry_wet_mix); 131 | previous_small_large_mix = get(small_large_mix); 132 | previous_small_size = get(small_size); 133 | previous_large_size = get(large_size); 134 | previous_pre_delay = get(pre_delay); 135 | previous_large_delay = get(large_delay); 136 | previous_small_density = get(small_density); 137 | previous_large_density = get(large_density); 138 | previous_large_delay_range = get(large_delay_range); 139 | previous_small_hifreq_absorption = get(small_hifreq_absorption); 140 | previous_large_hifreq_absorption = get(large_hifreq_absorption); 141 | previous_small_delay_range = get(small_delay_range); 142 | previous_modulation_rate = get(modulation_rate); 143 | previous_modulation_depth = get(modulation_depth); 144 | previous_filter_frequency = get(filter_frequency); 145 | previous_filter_bandwidth = get(filter_bandwidth); 146 | previous_filter_gain = get(filter_gain); 147 | } 148 | }; -------------------------------------------------------------------------------- /example/config.make: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # CONFIGURE PROJECT MAKEFILE (optional) 3 | # This file is where we make project specific configurations. 4 | ################################################################################ 5 | 6 | ################################################################################ 7 | # OF ROOT 8 | # The location of your root openFrameworks installation 9 | # (default) OF_ROOT = ../../.. 10 | ################################################################################ 11 | # OF_ROOT = ../../.. 12 | 13 | ################################################################################ 14 | # PROJECT ROOT 15 | # The location of the project - a starting place for searching for files 16 | # (default) PROJECT_ROOT = . (this directory) 17 | # 18 | ################################################################################ 19 | # PROJECT_ROOT = . 20 | 21 | ################################################################################ 22 | # PROJECT SPECIFIC CHECKS 23 | # This is a project defined section to create internal makefile flags to 24 | # conditionally enable or disable the addition of various features within 25 | # this makefile. For instance, if you want to make changes based on whether 26 | # GTK is installed, one might test that here and create a variable to check. 27 | ################################################################################ 28 | # None 29 | 30 | ################################################################################ 31 | # PROJECT EXTERNAL SOURCE PATHS 32 | # These are fully qualified paths that are not within the PROJECT_ROOT folder. 33 | # Like source folders in the PROJECT_ROOT, these paths are subject to 34 | # exlclusion via the PROJECT_EXLCUSIONS list. 35 | # 36 | # (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) 37 | # 38 | # Note: Leave a leading space when adding list items with the += operator 39 | ################################################################################ 40 | # PROJECT_EXTERNAL_SOURCE_PATHS = 41 | 42 | ################################################################################ 43 | # PROJECT EXCLUSIONS 44 | # These makefiles assume that all folders in your current project directory 45 | # and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations 46 | # to look for source code. The any folders or files that match any of the 47 | # items in the PROJECT_EXCLUSIONS list below will be ignored. 48 | # 49 | # Each item in the PROJECT_EXCLUSIONS list will be treated as a complete 50 | # string unless teh user adds a wildcard (%) operator to match subdirectories. 51 | # GNU make only allows one wildcard for matching. The second wildcard (%) is 52 | # treated literally. 53 | # 54 | # (default) PROJECT_EXCLUSIONS = (blank) 55 | # 56 | # Will automatically exclude the following: 57 | # 58 | # $(PROJECT_ROOT)/bin% 59 | # $(PROJECT_ROOT)/obj% 60 | # $(PROJECT_ROOT)/%.xcodeproj 61 | # 62 | # Note: Leave a leading space when adding list items with the += operator 63 | ################################################################################ 64 | # PROJECT_EXCLUSIONS = 65 | 66 | ################################################################################ 67 | # PROJECT LINKER FLAGS 68 | # These flags will be sent to the linker when compiling the executable. 69 | # 70 | # (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs 71 | # 72 | # Note: Leave a leading space when adding list items with the += operator 73 | ################################################################################ 74 | 75 | # Currently, shared libraries that are needed are copied to the 76 | # $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to 77 | # add a runtime path to search for those shared libraries, since they aren't 78 | # incorporated directly into the final executable application binary. 79 | # TODO: should this be a default setting? 80 | # PROJECT_LDFLAGS=-Wl,-rpath=./libs 81 | 82 | ################################################################################ 83 | # PROJECT DEFINES 84 | # Create a space-delimited list of DEFINES. The list will be converted into 85 | # CFLAGS with the "-D" flag later in the makefile. 86 | # 87 | # (default) PROJECT_DEFINES = (blank) 88 | # 89 | # Note: Leave a leading space when adding list items with the += operator 90 | ################################################################################ 91 | # PROJECT_DEFINES = 92 | 93 | ################################################################################ 94 | # PROJECT CFLAGS 95 | # This is a list of fully qualified CFLAGS required when compiling for this 96 | # project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS 97 | # defined in your platform specific core configuration files. These flags are 98 | # presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. 99 | # 100 | # (default) PROJECT_CFLAGS = (blank) 101 | # 102 | # Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in 103 | # your platform specific configuration file will be applied by default and 104 | # further flags here may not be needed. 105 | # 106 | # Note: Leave a leading space when adding list items with the += operator 107 | ################################################################################ 108 | # PROJECT_CFLAGS = 109 | 110 | ################################################################################ 111 | # PROJECT OPTIMIZATION CFLAGS 112 | # These are lists of CFLAGS that are target-specific. While any flags could 113 | # be conditionally added, they are usually limited to optimization flags. 114 | # These flags are added BEFORE the PROJECT_CFLAGS. 115 | # 116 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. 117 | # 118 | # (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) 119 | # 120 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. 121 | # 122 | # (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) 123 | # 124 | # Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the 125 | # PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration 126 | # file will be applied by default and further optimization flags here may not 127 | # be needed. 128 | # 129 | # Note: Leave a leading space when adding list items with the += operator 130 | ################################################################################ 131 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE = 132 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG = 133 | 134 | ################################################################################ 135 | # PROJECT COMPILERS 136 | # Custom compilers can be set for CC and CXX 137 | # (default) PROJECT_CXX = (blank) 138 | # (default) PROJECT_CC = (blank) 139 | # Note: Leave a leading space when adding list items with the += operator 140 | ################################################################################ 141 | # PROJECT_CXX = 142 | # PROJECT_CC = 143 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ofxAudioUnitManager 2 | =================== 3 | This addon is a leightweight manager for Adam Carlucci's excellent [ofxAudioUnit](https://github.com/admsyn/ofxAudioUnit). It allows you to manage chains of Audio Units and presets with key presses at runtime, and to design new chains with just a few lines of code. 4 | 5 | ![A screenshot of ofxAudioUnitManager](images/ofxAudioUnitManager.png) 6 | 7 | If you implement `ofxAudioUnitManager` in your sketch, you can show and hide the overlay above by hitting 'v'. 8 | 9 | Why do I need a manager for ofxAudioUnit? 10 | ----------------------------------------- 11 | You don't. The original addon on is awesome and lets you do great things with Audio Units. 12 | 13 | I created this addon because I wanted to be able to experiment with sound quickly and fluidly. What `ofxAudioUnitManager` does is automate things you may find yourself doing manually with `ofxAudioUnit`, like connecting units together, saving and managing preset files and sending algorithmic MIDI sequences to synths for playback. 14 | 15 | In other words, this addon lets you focus more on sound design, by automating a lot of the boilerplate engineering stuff. 16 | 17 | How to create an Audio Unit chain 18 | --------------------------------- 19 | A chain is a number of units in sequence. The first unit in the sequence will be a synth, or sound-generating unit. The subsequent units will be filters or other types of processing units that modulate the audio signal they recieve from the prior unit in the chain, whether that's the source synth or another filter in the chain. 20 | 21 | First, the declarations: 22 | ```cpp 23 | ofxAudioUnitManager manager; 24 | ofxAudioUnitChain myChain; 25 | ofxManagedAudioUnit mySynth, myFilter, myReverb; 26 | ``` 27 | 28 | Second, define the synths (and give them a unique name): 29 | ```cpp 30 | mySynth.setup("My Synth", 'aumu', 'ncut', 'TOGU'); 31 | myFilter.setup("My Filter", kAudioUnitType_Effect, kAudioUnitSubType_LowPassFilter); 32 | myReverb.setup("My Reverb", kAudioUnitType_Effect, kAudioUnitSubType_MatrixReverb); 33 | ``` 34 | 35 | Third, link the units to make a chain: 36 | ```cpp 37 | manager.createChain(&myChain) 38 | .link(&mySynth) 39 | .to(&myFilter) 40 | .to(&myReverb) 41 | .toMixer(); 42 | ``` 43 | 44 | That's it. Your chain is good to go. 45 | 46 | Those of you who used this addon prior to version 0.2.0 will notice how much simpler this is to do now. 47 | 48 | How to play notes 49 | ----------------- 50 | The manager exposes an [ofxBpm](https://github.com/mirrorboy714/ofxBpm) instance, allowing you to declare listeners which will fire at precise moments, such as beat events: 51 | 52 | ```cpp 53 | void ofApp::setup() { 54 | ofAddListener(manager.bpm.beatEvent, this, &ofApp::play); //ofxBpm 55 | manager.bpm.start(); 56 | } 57 | ``` 58 | 59 | Each chain automatically sets up an [ofxMidi](https://github.com/danomatika/ofxMidi) instance for you, allowing you to send commands directly to the source synth of the chain. From there you can do all the usual MIDI stuff. 60 | 61 | ```cpp 62 | void ofApp::play(void){ 63 | myChain.midi.sendNoteOn(1, 60); //ofxMidi 64 | } 65 | ``` 66 | 67 | In the code above we are sending a middle C note on to `myChain` on every beat event. The example sketch does something similar, you can start it by pushing `spacebar`. 68 | 69 | How to manage presets 70 | --------------------- 71 | Once you have cloned this addon and installed the dependencies (see below), you can run the example sketch. While the example is running, use the `left`, `right`, `up` and `down` arrow keys. This will allow you to navigate to a chain and switch presets across all of it's units with a single key press. 72 | 73 | Again, while the sketch is running, you can use the following key commands. Note that when synth UIs are launched, they will be distributed neatly across your screen: 74 | 75 | Key | Command 76 | --- | ------- 77 | `A` | Show all UIs for all chains 78 | `a` | Show all synth UIs 79 | `m` | Show the mixer UI 80 | `u` | Show all UIs for the currently selected chain 81 | `s` | Save current chain state as a new preset 82 | `S` | Save current preset on current chain (overwrite) 83 | `r` | Rename preset 84 | `t` | Send preset to trash 85 | 86 | You'll be able to go a long way just using these commands, but at some point you might want to look under the hood. 87 | 88 | What's under the hood? 89 | ---------------------- 90 | On the disk, presets are saved in `bin/data` in a directory named `AudioUnitPresets`. When you navigate your presets using the commands above, the addon is just organizing and loading these files for you. 91 | 92 | The synth name you use when you setup your unit will be used by the addon to save and load your preset files, so that this: 93 | 94 | ```cpp 95 | mySynth.setup("My Synth", 'aumu', 'ncut', 'TOGU'); 96 | ``` 97 | 98 | Becomes this: 99 | 100 | ![How the filesystem is organised](images/finder.png) 101 | 102 | Now, imagine you've worked a while with one synth name, and you decide to change it to another. The addon won't be able to find it any more, unless you remembered to go and manually rename the files. 103 | 104 | In this scenario, the addon will assume the preset is missing. It will create a new one with the right name, which you will find sat alongside the old one. You can fix this by deleting the new file and renaming the old one. 105 | 106 | Don't be afraid 107 | --------------- 108 | 109 | The addon never deletes anything, so you won't experience loss through an incorrect key command. If you want to retrieve any previous version of presets you have edited, just take a look in the `AudioUnitPresets/.trash` folder. 110 | 111 | Known issues 112 | ------------ 113 | Whenever a dialog pops up the openFrameworks window loses focus. If you try to use the keyboard, it will appear as though the app has become unresponsive. However all you need to do is click the window again to regain focus. If anyone knows a workaround for this, please contact me. 114 | 115 | How to try out this addon 116 | ------------------------- 117 | 1. Clone [ofxAudioUnit](https://github.com/admsyn/ofxAudioUnit), follow the instructions in the readme, and make sure it works 118 | 2. Clone this addon and it's dependencies (listed below) 119 | 3. Install the [TAL NoiseMaker](http://kunz.corrupt.ch/products/tal-noisemaker) audio unit. The example project in this repo uses this synth. The 64bit version seems to work out of the box with openFrameworks 0.9.2 120 | 3. Launch the example project and try out the key controls listed on the screen 121 | 122 | Dependencies 123 | ------------ 124 | - [ofxAudioUnit](https://github.com/admsyn/ofxAudioUnit) tested against [this commit](https://github.com/admsyn/ofxAudioUnit/commit/f6a2d16e4a84c52bdf5e5a65e8ad1bb78b9acc00) 125 | - [ofxMidi](https://github.com/danomatika/ofxMidi) tested against [this commit](https://github.com/danomatika/ofxMidi/commit/f9d85fd888ba23cf49207b362e2bcc8cfad352ed) 126 | - [ofxBpm](https://github.com/karolsenami/ofxBpm) tested against [this commit](https://github.com/karolsenami/ofxBpm/commit/f31bfb43055cdb2f0f5fcec30a28779b1e668544) 127 | - [TAL NoiseMaker](http://kunz.corrupt.ch/products/tal-noisemaker) to run the bundled examples 128 | 129 | Tested against [openFrameworks 0.10.1](http://openframeworks.cc/download/). 130 | -------------------------------------------------------------------------------- /src/AudioUnits/aumUnit_Generic.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aumManagedAudioUnit.h" 3 | 4 | class aumUnit_Generic : public aumManagedAudioUnit 5 | { 6 | protected: 7 | int unnamedCount; 8 | const string AUM_TO_TRIM = " \n\r\t\f\v_"; 9 | 10 | public: 11 | void update() { 12 | //Nothing to do. 13 | } 14 | 15 | void generateClassFileForAudioUnit(string deviceName) { 16 | string classTemplate = getClassTemplate(); 17 | ofStringReplace(classTemplate, "", deviceName); 18 | ofStringReplace(classTemplate, "", getParamsAsConstants()); 19 | ofStringReplace(classTemplate, "", getParamsAsVars()); 20 | ofStringReplace(classTemplate, "", getCompareCalls()); 21 | ofStringReplace(classTemplate, "", getRecordStatements()); 22 | writeFile(classTemplate, deviceName); 23 | } 24 | 25 | void printParamsAsConstants() { 26 | cout << "============================" << endl; 27 | cout << "#pragma once" << endl; 28 | cout << getParamsAsConstants(); 29 | } 30 | 31 | string getParamsAsConstants() { 32 | vector paramList = unit.getParameterList(); 33 | unnamedCount = 0; 34 | stringstream paramStr; 35 | 36 | for(int i = 0; i < paramList.size(); i++) { 37 | AudioUnitParameterInfo& p = paramList[i]; 38 | string friendlyName = p.name; 39 | 40 | if(friendlyName.size() > 0) { 41 | friendlyName = formatFriendlyName(friendlyName); 42 | paramStr << " //" << p.name << endl; 43 | } else { 44 | friendlyName = "unnamed" + ofToString(++unnamedCount); 45 | paramStr << " //No name found" << endl; 46 | } 47 | 48 | paramStr << " //min: " << p.minValue << ", max: " << p.maxValue << ", default: " << p.defaultValue << endl; 49 | paramStr << " const static int " << friendlyName << " = " << i << ";"; 50 | 51 | if(i != paramList.size() - 1) paramStr << endl << endl; 52 | } 53 | 54 | return paramStr.str(); 55 | } 56 | 57 | string getParamsAsVars() { 58 | vector paramList = unit.getParameterList(); 59 | unnamedCount = 0; 60 | stringstream paramStr; 61 | 62 | for(int i = 0; i < paramList.size(); i++) { 63 | AudioUnitParameterInfo& p = paramList[i]; 64 | string friendlyName = p.name; 65 | 66 | if(friendlyName.size() > 0) { 67 | friendlyName = formatFriendlyName(friendlyName); 68 | } else { 69 | friendlyName = "unnamed" + ofToString(++unnamedCount); 70 | } 71 | 72 | paramStr << " AudioUnitParameterValue " << "previous_" << friendlyName << ";"; 73 | 74 | if(i != paramList.size() - 1) paramStr << endl; 75 | } 76 | 77 | return paramStr.str(); 78 | } 79 | 80 | string getCompareCalls() { 81 | vector paramList = unit.getParameterList(); 82 | unnamedCount = 0; 83 | stringstream paramStr; 84 | 85 | for(int i = 0; i < paramList.size(); i++) { 86 | AudioUnitParameterInfo& p = paramList[i]; 87 | string friendlyName = p.name; 88 | 89 | if(friendlyName.size() > 0) { 90 | friendlyName = formatFriendlyName(friendlyName); 91 | } else { 92 | friendlyName = "unnamed" + ofToString(++unnamedCount); 93 | } 94 | 95 | paramStr << " compareAndPrint(\"" + friendlyName + "\", previous_" + friendlyName + ", get(" + friendlyName + "));"; 96 | 97 | if(i != paramList.size() - 1) paramStr << endl; 98 | } 99 | 100 | return paramStr.str(); 101 | } 102 | 103 | string getRecordStatements() { 104 | vector paramList = unit.getParameterList(); 105 | unnamedCount = 0; 106 | stringstream paramStr; 107 | 108 | for(int i = 0; i < paramList.size(); i++) { 109 | AudioUnitParameterInfo& p = paramList[i]; 110 | string friendlyName = p.name; 111 | 112 | if(friendlyName.size() > 0) { 113 | friendlyName = formatFriendlyName(friendlyName); 114 | } else { 115 | friendlyName = "unnamed" + ofToString(++unnamedCount); 116 | } 117 | 118 | paramStr << " previous_" + friendlyName + " = get(" + friendlyName + ");"; 119 | 120 | if(i != paramList.size() - 1) paramStr << endl; 121 | } 122 | 123 | return paramStr.str(); 124 | } 125 | 126 | string formatFriendlyName(string givenName) { 127 | string friendlyName = ofToLower(givenName); 128 | ofStringReplace(friendlyName, " ", "_"); 129 | ofStringReplace(friendlyName, ".", "_"); 130 | ofStringReplace(friendlyName, "-", "_"); 131 | ofStringReplace(friendlyName, ".", "_"); 132 | ofStringReplace(friendlyName, "(", "_"); 133 | ofStringReplace(friendlyName, ")", "_"); 134 | ofStringReplace(friendlyName, "&", "_"); 135 | ofStringReplace(friendlyName, ":", "_"); 136 | ofStringReplace(friendlyName, "/", "_"); 137 | ofStringReplace(friendlyName, "\\", "_"); 138 | ofStringReplace(friendlyName, ">", "GT"); 139 | ofStringReplace(friendlyName, "#", "_sharp"); 140 | ofStringReplace(friendlyName, "<", "LT"); 141 | ofStringReplace(friendlyName, "*", "MULTIPLY"); 142 | ofStringReplace(friendlyName, "____", "_"); 143 | ofStringReplace(friendlyName, "___", "_"); 144 | ofStringReplace(friendlyName, "__", "_"); 145 | 146 | return trim(friendlyName); 147 | } 148 | 149 | string ltrim(const string& s) { 150 | size_t start = s.find_first_not_of(AUM_TO_TRIM); 151 | return (start == std::string::npos) ? "" : s.substr(start); 152 | } 153 | 154 | string rtrim(const string& s) { 155 | size_t end = s.find_last_not_of(AUM_TO_TRIM); 156 | return (end == std::string::npos) ? "" : s.substr(0, end + 1); 157 | } 158 | 159 | string trim(const string& s) { 160 | return rtrim(ltrim(s)); 161 | } 162 | 163 | void writeFile(string contents, string deviceName) { 164 | ofFile file(ofToDataPath("../../../src/AudioUnits/aumUnit_" + deviceName + ".h"), ofFile::WriteOnly); 165 | file.create(); 166 | file << contents; 167 | } 168 | 169 | string getClassTemplate() { 170 | stringstream classTemplate; 171 | classTemplate << "#pragma once" 172 | << endl << "#include \"aumMonitorableAudioUnit.h\"" 173 | << endl << "" 174 | << endl << "/******************************************************************************/" 175 | << endl << "/* WARNING: THIS CLASS WAS GENERATED BY THE FOLLOWING FUNCTION: */" 176 | << endl << "/* */" 177 | << endl << "/* aumUnit_Generic::generateClassFileForAudioUnit(string deviceName); */" 178 | << endl << "/* */" 179 | << endl << "/* IF YOU EDIT THIS FILE, YOU RISK HAVING YOUR CHANGES OVERWRITTEN THE NEXT */" 180 | << endl << "/* TIME THE FILE IS RE-WRITTEN BY THIS FUNCTION. TO EDIT THIS FILE, PLEASE */" 181 | << endl << "/* COPY IT TO ANY OTHER FOLDER, RENAME THE CLASS, AND THEN MAKE EDITS. */" 182 | << endl << "/******************************************************************************/" 183 | << endl << "" 184 | << endl << "class aumUnit_ : public aumMonitorableAudioUnit" 185 | << endl << "{" 186 | << endl << "public:" 187 | << endl << "" 188 | << endl << "" 189 | << endl << " //These variables store the most recenty recorded values" 190 | << endl << " //of each of the parameters, for recording and detection" 191 | << endl << "" 192 | << endl << "" 193 | << endl << " void setup(string _unitName) {" 194 | << endl << " aumManagedAudioUnit::setup(_unitName, '" << stringify(osType) << "', '" << stringify(osSubType) << "', '" << stringify(osManufacturer) << "', \"aumUnit_\");" 195 | << endl << " }" 196 | << endl << "" 197 | << endl << " void doPrintChanges() {" 198 | << endl << "" 199 | << endl << " }" 200 | << endl << "" 201 | << endl << " void doRecordParams() {" 202 | << endl << "" 203 | << endl << " }" 204 | << endl << "};"; 205 | return classTemplate.str(); 206 | } 207 | }; 208 | -------------------------------------------------------------------------------- /src/Handlers/aumPresets.cpp: -------------------------------------------------------------------------------- 1 | #include "aumPresets.h" 2 | 3 | void aumPresets::setup(string _chainName, ofxAudioUnitMixer* _mixer, aumManagedAudioUnit* _compressor){ 4 | chainName = _chainName; 5 | selected = false; 6 | currentPreset = -1; 7 | lastSaved = -1; 8 | lastSaveTimer = 0; 9 | lastSaveTimeout = 60; 10 | storageDir = "AudioUnitPresets/"; 11 | trashDir = ".trash/"; 12 | mixerName = "Mixer"; 13 | anyExtension = ""; 14 | presetExtension = "aupreset"; 15 | mixer = _mixer; 16 | compressor = _compressor; 17 | ensureDirectories(); 18 | readFromDisk(); 19 | 20 | ofDirectory dir(storageDir); 21 | storagePath = dir.getAbsolutePath() + "/"; 22 | 23 | if(presets.size() > 0) { 24 | currentPreset = 0; 25 | load(currentPreset); 26 | } 27 | 28 | loadMasterUnits(); 29 | } 30 | 31 | void aumPresets::load(int presetIndex) { 32 | string presetPath = path(presetNames.at(presetIndex)); 33 | for(int i = 0; i < units.size(); i++) { 34 | string presetFullPath = presetPath + filename(unitSlugs.at(i)); 35 | if(!ofFile(presetFullPath).exists()) { 36 | units.at(i)->getUnit()->saveCustomPresetAtPath(presetFullPath); 37 | } 38 | units.at(i)->getUnit()->loadCustomPresetAtPath(presetFullPath); 39 | } 40 | } 41 | 42 | void aumPresets::add(aumManagedAudioUnit* unit) { 43 | units.push_back(unit); 44 | unitSlugs.push_back(unit->getUnitSlug()); 45 | } 46 | 47 | void aumPresets::saveNew() { 48 | string presetName = ofSystemTextBoxDialog("Preset name:"); 49 | if(validateName(presetName)) { 50 | save(presetName); 51 | } 52 | } 53 | 54 | void aumPresets::saveOverwrite() { 55 | if(currentPreset > -1 && presetNames.size() >= currentPreset + 1) { 56 | string presetName = presetNames.at(currentPreset); 57 | trash(); 58 | save(presetName); 59 | } 60 | } 61 | 62 | void aumPresets::rename() { 63 | if(currentPreset > -1) { 64 | string newPresetName = ofSystemTextBoxDialog("New name:", presetNames.at(currentPreset)); 65 | if(validateName(newPresetName, currentPreset)) { 66 | string newPresetPath = path(newPresetName); 67 | for(int i = 0; i < units.size(); i++) { 68 | string newPresetFilename = filename(unitSlugs.at(i)); 69 | presets.at(currentPreset).at(i).renameTo(newPresetPath + newPresetFilename); 70 | } 71 | string oldPresetPath = path(presetNames.at(currentPreset)); 72 | dir.removeDirectory(oldPresetPath, true); 73 | presetNames[currentPreset] = newPresetName; 74 | readFromDisk(); 75 | currentPreset = indexOf(newPresetName); 76 | } 77 | } 78 | } 79 | 80 | void aumPresets::trash() { 81 | if(currentPreset > -1) { 82 | ofDirectory presetDir(path(presetNames.at(currentPreset))); 83 | presetDir.renameTo(newTrashPath(presetNames.at(currentPreset))); 84 | presets.erase(presets.begin() + currentPreset); 85 | presetNames.erase(presetNames.begin() + currentPreset); 86 | readFromDisk(); 87 | ensureValidIndex(); 88 | } 89 | } 90 | 91 | void aumPresets::increment() { 92 | if(currentPreset > -1) { 93 | readFromDisk(); 94 | currentPreset = currentPreset == presets.size() - 1 ? currentPreset = 0 : currentPreset + 1; 95 | load(currentPreset); 96 | } 97 | } 98 | 99 | void aumPresets::decrement() { 100 | if(currentPreset > -1) { 101 | readFromDisk(); 102 | currentPreset = currentPreset == 0 ? presets.size() - 1 : currentPreset - 1; 103 | load(currentPreset); 104 | } 105 | } 106 | 107 | void aumPresets::select() { 108 | selected = true; 109 | } 110 | 111 | void aumPresets::deselect() { 112 | selected = false; 113 | } 114 | 115 | void aumPresets::readFromDisk() { 116 | clearPresets(); 117 | vector chainDirContents = dirContents(chainName, anyExtension); 118 | 119 | for(int i = 0; i < chainDirContents.size(); i++) { 120 | if(chainDirContents.at(i).isDirectory()) { 121 | string presetName = chainDirContents.at(i).getFileName(); 122 | presetNames.push_back(presetName); 123 | loadPresetsInChainOrder(presetName); 124 | } 125 | } 126 | ensureValidIndex(); 127 | } 128 | 129 | void aumPresets::loadPresetsInChainOrder(string presetName) { 130 | vector files; 131 | for(int i = 0; i < units.size(); i++) { 132 | files.push_back(ofFile(path(presetName) + filename(unitSlugs.at(i)))); 133 | } 134 | presets.push_back(files); 135 | } 136 | 137 | int aumPresets::currentIndex(){ 138 | return currentPreset; 139 | } 140 | 141 | string aumPresets::report() { 142 | string icon = selected ? "[*]" : "[ ]"; 143 | stringstream report; 144 | report << "PRESETS" << endl << "-------"; 145 | 146 | for(int i = 0; i < presetNames.size(); i++) { 147 | report << endl << trim(presetNames.at(i)); 148 | if(i == currentIndex()) { 149 | report << " " << icon; 150 | } 151 | if(i == lastSaved) { 152 | report << " <- saved"; 153 | lastSaveTimer++; 154 | if(lastSaveTimer >= lastSaveTimeout) { 155 | lastSaveTimer = 0; 156 | lastSaved = -1; 157 | } 158 | } 159 | } 160 | 161 | return report.str(); 162 | } 163 | 164 | int aumPresets::indexOf(string presetName) { 165 | for(int i = 0; i < presets.size(); i++) { 166 | if(presetNames.at(i) == presetName) { 167 | return i; 168 | } 169 | } 170 | cout << "ERROR: Could not find index of preset" << endl; 171 | return -1; 172 | } 173 | 174 | void aumPresets::ensureValidIndex() { 175 | if(currentPreset > presets.size() - 1) { 176 | currentPreset = presets.size() - 1; 177 | } 178 | } 179 | 180 | vector aumPresets::dirContents(string path, string extensions) { 181 | dir.allowExt(extensions); 182 | dir.listDir(storageDir + path); 183 | return dir.getFiles(); 184 | } 185 | 186 | void aumPresets::clearPresets() { 187 | presets.clear(); 188 | presetNames.clear(); 189 | } 190 | 191 | string aumPresets::path(string presetName) { 192 | ofDirectory dir(storageDir + chainName); 193 | return dir.getAbsolutePath() + "/" + presetName + "/"; 194 | } 195 | 196 | string aumPresets::newTrashPath(string presetName) { 197 | string timeIndexedTrashDir = storageDir + trashDir + ofGetTimestampString() + "/"; 198 | ofDirectory timedTrashDir(timeIndexedTrashDir); 199 | timedTrashDir.create(); 200 | ofDirectory trashChainDir(timeIndexedTrashDir + chainName); 201 | trashChainDir.create(); 202 | return trashChainDir.getAbsolutePath() + "/" + presetName + "/"; 203 | } 204 | 205 | string aumPresets::filename(string unitSlug) { 206 | return unitSlug + "." + presetExtension; 207 | } 208 | 209 | string aumPresets::trim(string presetName) { 210 | return presetName.length() < 22 ? presetName : presetName.substr(0, 18) + "..."; 211 | } 212 | 213 | void aumPresets::ensureDirectories() { 214 | ofDirectory storage(storageDir); 215 | if(!storage.exists()) { 216 | storage.create(); 217 | } 218 | ofDirectory trash(storageDir + trashDir); 219 | if(!trash.exists()) { 220 | trash.create(); 221 | } 222 | ofDirectory chain(storageDir + chainName); 223 | if(!chain.exists()) { 224 | chain.create(); 225 | } 226 | } 227 | 228 | string allowableCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"; 229 | bool aumPresets::validateName(string newPresetName, int alertDialogException) { 230 | bool nameIsUnique = true; 231 | for(int i = 0; i < presetNames.size(); i++) { 232 | if(ofToUpper(newPresetName) == ofToUpper(presetNames.at(i))) { 233 | nameIsUnique = false; 234 | if(i != alertDialogException) { 235 | ofSystemAlertDialog("Name '" + newPresetName + "' already in use on this chain"); 236 | } 237 | } 238 | } 239 | bool nameIsValid = true; 240 | if(!(newPresetName.length() > 0 && newPresetName.find_first_not_of(allowableCharacters) == std::string::npos)) { 241 | nameIsValid = false; 242 | ofSystemAlertDialog("Name '" + newPresetName + "' is not valid"); 243 | } 244 | return nameIsValid && nameIsUnique; 245 | } 246 | 247 | void aumPresets::save(string presetName) { 248 | string presetPath = path(presetName); 249 | dir.createDirectory(presetPath); 250 | for(int i = 0; i < units.size(); i++) { 251 | string presetFilename = filename(unitSlugs.at(i)); 252 | units.at(i)->getUnit()->saveCustomPresetAtPath(presetPath + presetFilename); 253 | } 254 | saveMasterUnits(); 255 | readFromDisk(); 256 | currentPreset = indexOf(presetName); 257 | lastSaved = currentPreset; 258 | } 259 | 260 | void aumPresets::saveMasterUnits(){ 261 | mixer->saveCustomPresetAtPath(storagePath + filename(mixerName)); 262 | compressor->getUnit()->saveCustomPresetAtPath(storagePath + filename(compressor->getUnitSlug())); 263 | } 264 | 265 | void aumPresets::loadMasterUnits(){ 266 | mixer->loadCustomPresetAtPath(storagePath + filename(mixerName)); 267 | compressor->getUnit()->loadCustomPresetAtPath(storagePath + filename(compressor->getUnitSlug())); 268 | } 269 | -------------------------------------------------------------------------------- /src/Params/aum_TALNoiseMaker_Params.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //No name found 4 | //min: 0, max: 1, default: 0 5 | const static int TALNoiseMaker_unnamed1 = 0; 6 | 7 | //volume 8 | //min: 0, max: 1, default: 0 9 | const static int TALNoiseMaker_volume = 1; 10 | 11 | //filtertype 12 | //min: 0, max: 1, default: 0 13 | const static int TALNoiseMaker_filtertype = 2; 14 | 15 | //cutoff 16 | //min: 0, max: 1, default: 0 17 | const static int TALNoiseMaker_cutoff = 3; 18 | 19 | //resonance 20 | //min: 0, max: 1, default: 0 21 | const static int TALNoiseMaker_resonance = 4; 22 | 23 | //keyfollow 24 | //min: 0, max: 1, default: 0 25 | const static int TALNoiseMaker_keyfollow = 5; 26 | 27 | //filtercontour 28 | //min: 0, max: 1, default: 0 29 | const static int TALNoiseMaker_filtercontour = 6; 30 | 31 | //filterattack 32 | //min: 0, max: 1, default: 0 33 | const static int TALNoiseMaker_filterattack = 7; 34 | 35 | //filterdecay 36 | //min: 0, max: 1, default: 0 37 | const static int TALNoiseMaker_filterdecay = 8; 38 | 39 | //filtersustain 40 | //min: 0, max: 1, default: 0 41 | const static int TALNoiseMaker_filtersustain = 9; 42 | 43 | //filterrelease 44 | //min: 0, max: 1, default: 0 45 | const static int TALNoiseMaker_filterrelease = 10; 46 | 47 | //ampattack 48 | //min: 0, max: 1, default: 0 49 | const static int TALNoiseMaker_ampattack = 11; 50 | 51 | //ampdecay 52 | //min: 0, max: 1, default: 0 53 | const static int TALNoiseMaker_ampdecay = 12; 54 | 55 | //ampsustain 56 | //min: 0, max: 1, default: 0 57 | const static int TALNoiseMaker_ampsustain = 13; 58 | 59 | //amprelease 60 | //min: 0, max: 1, default: 0 61 | const static int TALNoiseMaker_amprelease = 14; 62 | 63 | //osc1volume 64 | //min: 0, max: 1, default: 0 65 | const static int TALNoiseMaker_osc1volume = 15; 66 | 67 | //osc2volume 68 | //min: 0, max: 1, default: 0 69 | const static int TALNoiseMaker_osc2volume = 16; 70 | 71 | //osc3volume 72 | //min: 0, max: 1, default: 0 73 | const static int TALNoiseMaker_osc3volume = 17; 74 | 75 | //oscmastertune 76 | //min: 0, max: 1, default: 0 77 | const static int TALNoiseMaker_oscmastertune = 18; 78 | 79 | //osc1tune 80 | //min: 0, max: 1, default: 0 81 | const static int TALNoiseMaker_osc1tune = 19; 82 | 83 | //osc2tune 84 | //min: 0, max: 1, default: 0 85 | const static int TALNoiseMaker_osc2tune = 20; 86 | 87 | //osc1finetune 88 | //min: 0, max: 1, default: 0 89 | const static int TALNoiseMaker_osc1finetune = 21; 90 | 91 | //osc2finetune 92 | //min: 0, max: 1, default: 0 93 | const static int TALNoiseMaker_osc2finetune = 22; 94 | 95 | //osc1waveform 96 | //min: 0, max: 1, default: 0 97 | const static int TALNoiseMaker_osc1waveform = 23; 98 | 99 | //osc2waveform 100 | //min: 0, max: 1, default: 0 101 | const static int TALNoiseMaker_osc2waveform = 24; 102 | 103 | //oscsync 104 | //min: 0, max: 1, default: 0 105 | const static int TALNoiseMaker_oscsync = 25; 106 | 107 | //lfo1waveform 108 | //min: 0, max: 1, default: 0 109 | const static int TALNoiseMaker_lfo1waveform = 26; 110 | 111 | //lfo2waveform 112 | //min: 0, max: 1, default: 0 113 | const static int TALNoiseMaker_lfo2waveform = 27; 114 | 115 | //lfo1rate 116 | //min: 0, max: 1, default: 0 117 | const static int TALNoiseMaker_lfo1rate = 28; 118 | 119 | //lfo2rate 120 | //min: 0, max: 1, default: 0 121 | const static int TALNoiseMaker_lfo2rate = 29; 122 | 123 | //lfo1amount 124 | //min: 0, max: 1, default: 0 125 | const static int TALNoiseMaker_lfo1amount = 30; 126 | 127 | //lfo2amount 128 | //min: 0, max: 1, default: 0 129 | const static int TALNoiseMaker_lfo2amount = 31; 130 | 131 | //lfo1destination 132 | //min: 0, max: 1, default: 0 133 | const static int TALNoiseMaker_lfo1destination = 32; 134 | 135 | //lfo2destination 136 | //min: 0, max: 1, default: 0 137 | const static int TALNoiseMaker_lfo2destination = 33; 138 | 139 | //lfo1phase 140 | //min: 0, max: 1, default: 0 141 | const static int TALNoiseMaker_lfo1phase = 34; 142 | 143 | //lfo2phase 144 | //min: 0, max: 1, default: 0 145 | const static int TALNoiseMaker_lfo2phase = 35; 146 | 147 | //osc2fm 148 | //min: 0, max: 1, default: 0 149 | const static int TALNoiseMaker_osc2fm = 36; 150 | 151 | //osc2phase 152 | //min: 0, max: 1, default: 0 153 | const static int TALNoiseMaker_osc2phase = 37; 154 | 155 | //osc1pw 156 | //min: 0, max: 1, default: 0 157 | const static int TALNoiseMaker_osc1pw = 38; 158 | 159 | //osc1phase 160 | //min: 0, max: 1, default: 0 161 | const static int TALNoiseMaker_osc1phase = 39; 162 | 163 | //transpose 164 | //min: 0, max: 1, default: 0 165 | const static int TALNoiseMaker_transpose = 40; 166 | 167 | //freeadattack 168 | //min: 0, max: 1, default: 0 169 | const static int TALNoiseMaker_freeadattack = 41; 170 | 171 | //freeaddecay 172 | //min: 0, max: 1, default: 0 173 | const static int TALNoiseMaker_freeaddecay = 42; 174 | 175 | //freeadamount 176 | //min: 0, max: 1, default: 0 177 | const static int TALNoiseMaker_freeadamount = 43; 178 | 179 | //freeaddestination 180 | //min: 0, max: 1, default: 0 181 | const static int TALNoiseMaker_freeaddestination = 44; 182 | 183 | //lfo1sync 184 | //min: 0, max: 1, default: 0 185 | const static int TALNoiseMaker_lfo1sync = 45; 186 | 187 | //lfo1keytrigger 188 | //min: 0, max: 1, default: 0 189 | const static int TALNoiseMaker_lfo1keytrigger = 46; 190 | 191 | //lfo2sync 192 | //min: 0, max: 1, default: 0 193 | const static int TALNoiseMaker_lfo2sync = 47; 194 | 195 | //lfo2keytrigger 196 | //min: 0, max: 1, default: 0 197 | const static int TALNoiseMaker_lfo2keytrigger = 48; 198 | 199 | //portamento 200 | //min: 0, max: 1, default: 0 201 | const static int TALNoiseMaker_portamento = 49; 202 | 203 | //portamentomode 204 | //min: 0, max: 1, default: 0 205 | const static int TALNoiseMaker_portamentomode = 50; 206 | 207 | //voices 208 | //min: 0, max: 1, default: 0 209 | const static int TALNoiseMaker_voices = 51; 210 | 211 | //velocityvolume 212 | //min: 0, max: 1, default: 0 213 | const static int TALNoiseMaker_velocityvolume = 52; 214 | 215 | //velocitycontour 216 | //min: 0, max: 1, default: 0 217 | const static int TALNoiseMaker_velocitycontour = 53; 218 | 219 | //velocitycutoff 220 | //min: 0, max: 1, default: 0 221 | const static int TALNoiseMaker_velocitycutoff = 54; 222 | 223 | //pitchwheelcutoff 224 | //min: 0, max: 1, default: 0 225 | const static int TALNoiseMaker_pitchwheelcutoff = 55; 226 | 227 | //pitchwheelpitch 228 | //min: 0, max: 1, default: 0 229 | const static int TALNoiseMaker_pitchwheelpitch = 56; 230 | 231 | //ringmodulation 232 | //min: 0, max: 1, default: 0 233 | const static int TALNoiseMaker_ringmodulation = 57; 234 | 235 | //chorus1enable 236 | //min: 0, max: 1, default: 0 237 | const static int TALNoiseMaker_chorus1enable = 58; 238 | 239 | //chorus2enable 240 | //min: 0, max: 1, default: 0 241 | const static int TALNoiseMaker_chorus2enable = 59; 242 | 243 | //reverbwet 244 | //min: 0, max: 1, default: 0 245 | const static int TALNoiseMaker_reverbwet = 60; 246 | 247 | //reverbdecay 248 | //min: 0, max: 1, default: 0 249 | const static int TALNoiseMaker_reverbdecay = 61; 250 | 251 | //reverbpredelay 252 | //min: 0, max: 1, default: 0 253 | const static int TALNoiseMaker_reverbpredelay = 62; 254 | 255 | //reverbhighcut 256 | //min: 0, max: 1, default: 0 257 | const static int TALNoiseMaker_reverbhighcut = 63; 258 | 259 | //reverblowcut 260 | //min: 0, max: 1, default: 0 261 | const static int TALNoiseMaker_reverblowcut = 64; 262 | 263 | //oscbitcrusher 264 | //min: 0, max: 1, default: 0 265 | const static int TALNoiseMaker_oscbitcrusher = 65; 266 | 267 | //highpass 268 | //min: 0, max: 1, default: 0 269 | const static int TALNoiseMaker_highpass = 66; 270 | 271 | //detune 272 | //min: 0, max: 1, default: 0 273 | const static int TALNoiseMaker_detune = 67; 274 | 275 | //vintagenoise 276 | //min: 0, max: 1, default: 0 277 | const static int TALNoiseMaker_vintagenoise = 68; 278 | 279 | //No name found 280 | //min: 0, max: 1, default: 0 281 | const static int TALNoiseMaker_unnamed2 = 69; 282 | 283 | //No name found 284 | //min: 0, max: 1, default: 0 285 | const static int TALNoiseMaker_unnamed3 = 70; 286 | 287 | //envelopeeditordest1 288 | //min: 0, max: 1, default: 0 289 | const static int TALNoiseMaker_envelopeeditordest1 = 71; 290 | 291 | //envelopeeditorspeed 292 | //min: 0, max: 1, default: 0 293 | const static int TALNoiseMaker_envelopeeditorspeed = 72; 294 | 295 | //envelopeeditoramount 296 | //min: 0, max: 1, default: 0 297 | const static int TALNoiseMaker_envelopeeditoramount = 73; 298 | 299 | //envelopeoneshot 300 | //min: 0, max: 1, default: 0 301 | const static int TALNoiseMaker_envelopeoneshot = 74; 302 | 303 | //envelopefixtempo 304 | //min: 0, max: 1, default: 0 305 | const static int TALNoiseMaker_envelopefixtempo = 75; 306 | 307 | //No name found 308 | //min: 0, max: 1, default: 0 309 | const static int TALNoiseMaker_unnamed4 = 76; 310 | 311 | //No name found 312 | //min: 0, max: 1, default: 0 313 | const static int TALNoiseMaker_unnamed5 = 77; 314 | 315 | //No name found 316 | //min: 0, max: 1, default: 0 317 | const static int TALNoiseMaker_unnamed6 = 78; 318 | 319 | //No name found 320 | //min: 0, max: 1, default: 0 321 | const static int TALNoiseMaker_unnamed7 = 79; 322 | 323 | //No name found 324 | //min: 0, max: 1, default: 0 325 | const static int TALNoiseMaker_unnamed8 = 80; 326 | 327 | //filterdrive 328 | //min: 0, max: 1, default: 0 329 | const static int TALNoiseMaker_filterdrive = 81; 330 | 331 | //delaywet 332 | //min: 0, max: 1, default: 0 333 | const static int TALNoiseMaker_delaywet = 82; 334 | 335 | //delaytime 336 | //min: 0, max: 1, default: 0 337 | const static int TALNoiseMaker_delaytime = 83; 338 | 339 | //delaysync 340 | //min: 0, max: 1, default: 0 341 | const static int TALNoiseMaker_delaysync = 84; 342 | 343 | //delayfactorl 344 | //min: 0, max: 1, default: 0 345 | const static int TALNoiseMaker_delayfactorl = 85; 346 | 347 | //delayfactorr 348 | //min: 0, max: 1, default: 0 349 | const static int TALNoiseMaker_delayfactorr = 86; 350 | 351 | //delayhighshelf 352 | //min: 0, max: 1, default: 0 353 | const static int TALNoiseMaker_delayhighshelf = 87; 354 | 355 | //delaylowshelf 356 | //min: 0, max: 1, default: 0 357 | const static int TALNoiseMaker_delaylowshelf = 88; 358 | 359 | //delayfeedback 360 | //min: 0, max: 1, default: 0 361 | const static int TALNoiseMaker_delayfeedback = 89; 362 | 363 | //No name found 364 | //min: 0, max: 1, default: 0 365 | const static int TALNoiseMaker_unnamed9 = 90; 366 | 367 | //No name found 368 | //min: 0, max: 1, default: 0 369 | const static int TALNoiseMaker_unnamed10 = 91; -------------------------------------------------------------------------------- /src/Params/aum_Massive_Params.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //MACRO 1 4 | //min: 0, max: 1, default: 0 5 | const static int Massive_macro_1 = 0; 6 | 7 | //MACRO 2 8 | //min: 0, max: 1, default: 0 9 | const static int Massive_macro_2 = 1; 10 | 11 | //MACRO 3 12 | //min: 0, max: 1, default: 0 13 | const static int Massive_macro_3 = 2; 14 | 15 | //MACRO 4 16 | //min: 0, max: 1, default: 0 17 | const static int Massive_macro_4 = 3; 18 | 19 | //MACRO 5 20 | //min: 0, max: 1, default: 0 21 | const static int Massive_macro_5 = 4; 22 | 23 | //MACRO 6 24 | //min: 0, max: 1, default: 0 25 | const static int Massive_macro_6 = 5; 26 | 27 | //MACRO 7 28 | //min: 0, max: 1, default: 0 29 | const static int Massive_macro_7 = 6; 30 | 31 | //MACRO 8 32 | //min: 0, max: 1, default: 0 33 | const static int Massive_macro_8 = 7; 34 | 35 | //OSC1-PITCH 36 | //min: 0, max: 1, default: 0.5 37 | const static int Massive_osc1_pitch = 8; 38 | 39 | //OSC1-POSITION 40 | //min: 0, max: 1, default: 0.5 41 | const static int Massive_osc1_position = 9; 42 | 43 | //OSC1-PARAM2 44 | //min: 0, max: 1, default: 1 45 | const static int Massive_osc1_param2 = 10; 46 | 47 | //OSC1-AMP 48 | //min: 0, max: 1, default: 1 49 | const static int Massive_osc1_amp = 11; 50 | 51 | //OSC1-FLT.ROUTING 52 | //min: 0, max: 1, default: 0.5 53 | const static int Massive_osc1_flt_routing = 12; 54 | 55 | //OSC2-PITCH 56 | //min: 0, max: 1, default: 0.5 57 | const static int Massive_osc2_pitch = 13; 58 | 59 | //OSC2-POSITION 60 | //min: 0, max: 1, default: 0 61 | const static int Massive_osc2_position = 14; 62 | 63 | //OSC2-PARAM2 64 | //min: 0, max: 1, default: 1 65 | const static int Massive_osc2_param2 = 15; 66 | 67 | //OSC2-AMP 68 | //min: 0, max: 1, default: 0 69 | const static int Massive_osc2_amp = 16; 70 | 71 | //OSC2-FLT.ROUTING 72 | //min: 0, max: 1, default: 0.5 73 | const static int Massive_osc2_flt_routing = 17; 74 | 75 | //OSC3-PITCH 76 | //min: 0, max: 1, default: 0.5 77 | const static int Massive_osc3_pitch = 18; 78 | 79 | //OSC3-POSITION 80 | //min: 0, max: 1, default: 0 81 | const static int Massive_osc3_position = 19; 82 | 83 | //OSC3-PARAM2 84 | //min: 0, max: 1, default: 1 85 | const static int Massive_osc3_param2 = 20; 86 | 87 | //OSC3-AMP 88 | //min: 0, max: 1, default: 0 89 | const static int Massive_osc3_amp = 21; 90 | 91 | //OSC3-FLT.ROUTING 92 | //min: 0, max: 1, default: 0.5 93 | const static int Massive_osc3_flt_routing = 22; 94 | 95 | //NOISE-COLOR 96 | //min: 0, max: 1, default: 0 97 | const static int Massive_noise_color = 23; 98 | 99 | //NOISE-AMP 100 | //min: 0, max: 1, default: 0 101 | const static int Massive_noise_amp = 24; 102 | 103 | //NOISE-FLTR. ROUTING 104 | //min: 0, max: 1, default: 0.5 105 | const static int Massive_noise_fltr_routing = 25; 106 | 107 | //FEEDBACK-AMP 108 | //min: 0, max: 1, default: 0 109 | const static int Massive_feedback_amp = 26; 110 | 111 | //FEEDBACK-FLT.ROUTING 112 | //min: 0, max: 1, default: 0.5 113 | const static int Massive_feedback_flt_routing = 27; 114 | 115 | //MOD.OSC-PITCH 116 | //min: 0, max: 1, default: 0.5 117 | const static int Massive_mod_osc_pitch = 28; 118 | 119 | //MOD.OSC-RNGMOD 120 | //min: 0, max: 1, default: 0 121 | const static int Massive_mod_osc_rngmod = 29; 122 | 123 | //MOD.OSC-PHASE 124 | //min: 0, max: 1, default: 0 125 | const static int Massive_mod_osc_phase = 30; 126 | 127 | //MOD.OSC-POSITION 128 | //min: 0, max: 1, default: 0 129 | const static int Massive_mod_osc_position = 31; 130 | 131 | //MOD.OSC-FLTR.FM 132 | //min: 0, max: 1, default: 0 133 | const static int Massive_mod_osc_fltr_fm = 32; 134 | 135 | //FILTER1-CUT/PRM.1 136 | //min: 0, max: 1, default: 0 137 | const static int Massive_filter1_cut_prm_1 = 33; 138 | 139 | //FILTER1-BW/PRM.2 140 | //min: 0, max: 1, default: 0 141 | const static int Massive_filter1_bw_prm_2 = 34; 142 | 143 | //FILTER1-RES/PRM.3 144 | //min: 0, max: 1, default: 0 145 | const static int Massive_filter1_res_prm_3 = 35; 146 | 147 | //FILTER2-CUT/PRM.1 148 | //min: 0, max: 1, default: 0 149 | const static int Massive_filter2_cut_prm_1 = 36; 150 | 151 | //FILTER2-BW/PRM.2 152 | //min: 0, max: 1, default: 0 153 | const static int Massive_filter2_bw_prm_2 = 37; 154 | 155 | //FILTER2-RES/PRM.3 156 | //min: 0, max: 1, default: 0 157 | const static int Massive_filter2_res_prm_3 = 38; 158 | 159 | //SERIELL-PARALLEL 160 | //min: 0, max: 1, default: 0 161 | const static int Massive_seriell_parallel = 39; 162 | 163 | //INSERT1-DW/PRM.1 164 | //min: 0, max: 1, default: 0 165 | const static int Massive_insert1_dw_prm_1 = 40; 166 | 167 | //INSERT1-PRM.2 168 | //min: 0, max: 1, default: 0 169 | const static int Massive_insert1_prm_2 = 41; 170 | 171 | //INSERT2-DW/PRM.1 172 | //min: 0, max: 1, default: 0 173 | const static int Massive_insert2_dw_prm_1 = 42; 174 | 175 | //INSERT2-PRM.2 176 | //min: 0, max: 1, default: 0 177 | const static int Massive_insert2_prm_2 = 43; 178 | 179 | //MASTER FX1-DRY WET 180 | //min: 0, max: 1, default: 0 181 | const static int Massive_master_fx1_dry_wet = 44; 182 | 183 | //MASTER FX1-PRM.2 184 | //min: 0, max: 1, default: 0.5 185 | const static int Massive_master_fx1_prm_2 = 45; 186 | 187 | //MASTER FX1-PRM.3 188 | //min: 0, max: 1, default: 0.5 189 | const static int Massive_master_fx1_prm_3 = 46; 190 | 191 | //MASTER FX1-PRM.4 192 | //min: 0, max: 1, default: 0.5 193 | const static int Massive_master_fx1_prm_4 = 47; 194 | 195 | //MASTER FX2-DRY WET 196 | //min: 0, max: 1, default: 0 197 | const static int Massive_master_fx2_dry_wet = 48; 198 | 199 | //MASTER FX2-PRM.2 200 | //min: 0, max: 1, default: 0.5 201 | const static int Massive_master_fx2_prm_2 = 49; 202 | 203 | //MASTER FX2-PRM.3 204 | //min: 0, max: 1, default: 0.5 205 | const static int Massive_master_fx2_prm_3 = 50; 206 | 207 | //MASTER FX2-PRM.4 208 | //min: 0, max: 1, default: 0.5 209 | const static int Massive_master_fx2_prm_4 = 51; 210 | 211 | //FILTER1-OUT GAIN 212 | //min: 0, max: 1, default: 0.8 213 | const static int Massive_filter1_out_gain = 52; 214 | 215 | //FILTER2-OUT GAIN 216 | //min: 0, max: 1, default: 0.8 217 | const static int Massive_filter2_out_gain = 53; 218 | 219 | //FILTER-1/2-CROSSFADE 220 | //min: 0, max: 1, default: 0.5 221 | const static int Massive_filter_1_2_crossfade = 54; 222 | 223 | //BYPASS-GAIN 224 | //min: 0, max: 1, default: 0 225 | const static int Massive_bypass_gain = 55; 226 | 227 | //PAN (Fltr-Path) 228 | //min: 0, max: 1, default: 0.5 229 | const static int Massive_pan_fltr_path_ = 56; 230 | 231 | //MASTER-VOLUME 232 | //min: 0, max: 1, default: 0.5 233 | const static int Massive_master_volume = 57; 234 | 235 | //MODULATOR5-RATE 236 | //min: 0, max: 1, default: 0.5 237 | const static int Massive_modulator5_rate = 58; 238 | 239 | //MODULATOR6-RATE 240 | //min: 0, max: 1, default: 0.5 241 | const static int Massive_modulator6_rate = 59; 242 | 243 | //MODULATOR7-RATE 244 | //min: 0, max: 1, default: 0.5 245 | const static int Massive_modulator7_rate = 60; 246 | 247 | //MODULATOR8-RATE 248 | //min: 0, max: 1, default: 0.5 249 | const static int Massive_modulator8_rate = 61; 250 | 251 | //MODULATOR5-AMP 252 | //min: 0, max: 1, default: 1 253 | const static int Massive_modulator5_amp = 62; 254 | 255 | //MODULATOR6-AMP 256 | //min: 0, max: 1, default: 1 257 | const static int Massive_modulator6_amp = 63; 258 | 259 | //MODULATOR7-AMP 260 | //min: 0, max: 1, default: 1 261 | const static int Massive_modulator7_amp = 64; 262 | 263 | //MODULATOR8-AMP 264 | //min: 0, max: 1, default: 1 265 | const static int Massive_modulator8_amp = 65; 266 | 267 | //MODULATOR5-CROSSF./GLIDE 268 | //min: 0, max: 1, default: 1 269 | const static int Massive_modulator5_crossf_glide = 66; 270 | 271 | //MODULATOR6-CROSSF./GLIDE 272 | //min: 0, max: 1, default: 1 273 | const static int Massive_modulator6_crossf_glide = 67; 274 | 275 | //MODULATOR7-CROSSF./GLIDE 276 | //min: 0, max: 1, default: 1 277 | const static int Massive_modulator7_crossf_glide = 68; 278 | 279 | //MODULATOR8-CROSSF./GLIDE 280 | //min: 0, max: 1, default: 1 281 | const static int Massive_modulator8_crossf_glide = 69; 282 | 283 | //MODULATOR5-IND.LEV 284 | //min: 0, max: 1, default: 0 285 | const static int Massive_modulator5_ind_lev = 70; 286 | 287 | //MODULATOR6-IND.LEV 288 | //min: 0, max: 1, default: 0 289 | const static int Massive_modulator6_ind_lev = 71; 290 | 291 | //MODULATOR7-IND.LEV 292 | //min: 0, max: 1, default: 0 293 | const static int Massive_modulator7_ind_lev = 72; 294 | 295 | //MODULATOR8-IND.LEV 296 | //min: 0, max: 1, default: 0 297 | const static int Massive_modulator8_ind_lev = 73; 298 | 299 | //MODULATOR15-SYNC on 300 | //min: 0, max: 1, default: 0 301 | const static int Massive_modulator15_sync_on = 74; 302 | 303 | //MODULATOR26-SYNC on 304 | //min: 0, max: 1, default: 0 305 | const static int Massive_modulator26_sync_on = 75; 306 | 307 | //MODULATOR37-SYNC on 308 | //min: 0, max: 1, default: 0 309 | const static int Massive_modulator37_sync_on = 76; 310 | 311 | //MODULATOR48-SYNC on 312 | //min: 0, max: 1, default: 0 313 | const static int Massive_modulator48_sync_on = 77; 314 | 315 | //MODULATOR5-RESTART on 316 | //min: 0, max: 1, default: 1 317 | const static int Massive_modulator5_restart_on = 78; 318 | 319 | //MODULATOR6-RESTART on 320 | //min: 0, max: 1, default: 1 321 | const static int Massive_modulator6_restart_on = 79; 322 | 323 | //MODULATOR7-RESTART on 324 | //min: 0, max: 1, default: 1 325 | const static int Massive_modulator7_restart_on = 80; 326 | 327 | //MODULATOR8-RESTART on 328 | //min: 0, max: 1, default: 1 329 | const static int Massive_modulator8_restart_on = 81; 330 | 331 | //ENVELOPE1-VELOCITY 332 | //min: 0, max: 1, default: 0 333 | const static int Massive_envelope1_velocity = 82; 334 | 335 | //ENVELOPE2-VELOCITY 336 | //min: 0, max: 1, default: 0 337 | const static int Massive_envelope2_velocity = 83; 338 | 339 | //ENVELOPE3-VELOCITY 340 | //min: 0, max: 1, default: 0 341 | const static int Massive_envelope3_velocity = 84; 342 | 343 | //ENVELOPE4-VELOCITY 344 | //min: 0, max: 1, default: 0 345 | const static int Massive_envelope4_velocity = 85; 346 | 347 | //ENVELOPE1-KEYTRACKING 348 | //min: 0, max: 1, default: 0 349 | const static int Massive_envelope1_keytracking = 86; 350 | 351 | //ENVELOPE2-KEYTRACKING 352 | //min: 0, max: 1, default: 0 353 | const static int Massive_envelope2_keytracking = 87; 354 | 355 | //ENVELOPE3-KEYTRACKING 356 | //min: 0, max: 1, default: 0 357 | const static int Massive_envelope3_keytracking = 88; 358 | 359 | //ENVELOPE4-KEYTRACKING 360 | //min: 0, max: 1, default: 0 361 | const static int Massive_envelope4_keytracking = 89; 362 | 363 | //ENVELOPE1-DELAY 364 | //min: 0, max: 1, default: 0 365 | const static int Massive_envelope1_delay = 90; 366 | 367 | //ENVELOPE2-DELAY 368 | //min: 0, max: 1, default: 0 369 | const static int Massive_envelope2_delay = 91; 370 | 371 | //ENVELOPE3-DELAY 372 | //min: 0, max: 1, default: 0 373 | const static int Massive_envelope3_delay = 92; 374 | 375 | //ENVELOPE4-DELAY 376 | //min: 0, max: 1, default: 0 377 | const static int Massive_envelope4_delay = 93; 378 | 379 | //ENVELOPE1-ATT.TME 380 | //min: 0, max: 1, default: 0.05 381 | const static int Massive_envelope1_att_tme = 94; 382 | 383 | //ENVELOPE2-ATT.TME 384 | //min: 0, max: 1, default: 0.05 385 | const static int Massive_envelope2_att_tme = 95; 386 | 387 | //ENVELOPE3-ATT.TME 388 | //min: 0, max: 1, default: 0.05 389 | const static int Massive_envelope3_att_tme = 96; 390 | 391 | //ENVELOPE4-ATT.TME 392 | //min: 0, max: 1, default: 0.05 393 | const static int Massive_envelope4_att_tme = 97; 394 | 395 | //ENVELOPE1-ATT.LEV 396 | //min: 0, max: 1, default: 1 397 | const static int Massive_envelope1_att_lev = 98; 398 | 399 | //ENVELOPE2-ATT.LEV 400 | //min: 0, max: 1, default: 1 401 | const static int Massive_envelope2_att_lev = 99; 402 | 403 | //ENVELOPE3-ATT.LEV 404 | //min: 0, max: 1, default: 1 405 | const static int Massive_envelope3_att_lev = 100; 406 | 407 | //ENVELOPE4-ATT.LEV 408 | //min: 0, max: 1, default: 1 409 | const static int Massive_envelope4_att_lev = 101; 410 | 411 | //ENVELOPE1-DEC.TME 412 | //min: 0, max: 1, default: 0.5 413 | const static int Massive_envelope1_dec_tme = 102; 414 | 415 | //ENVELOPE2-DEC.TME 416 | //min: 0, max: 1, default: 0.5 417 | const static int Massive_envelope2_dec_tme = 103; 418 | 419 | //ENVELOPE3-DEC.TME 420 | //min: 0, max: 1, default: 0.5 421 | const static int Massive_envelope3_dec_tme = 104; 422 | 423 | //ENVELOPE4-DEC.TME 424 | //min: 0, max: 1, default: 0.5 425 | const static int Massive_envelope4_dec_tme = 105; 426 | 427 | //ENVELOPE1-DEC.LEV 428 | //min: 0, max: 1, default: 0.5 429 | const static int Massive_envelope1_dec_lev = 106; 430 | 431 | //ENVELOPE2-DEC.LEV 432 | //min: 0, max: 1, default: 0.5 433 | const static int Massive_envelope2_dec_lev = 107; 434 | 435 | //ENVELOPE3-DEC.LEV 436 | //min: 0, max: 1, default: 0.5 437 | const static int Massive_envelope3_dec_lev = 108; 438 | 439 | //ENVELOPE4-DEC.LEV 440 | //min: 0, max: 1, default: 0.5 441 | const static int Massive_envelope4_dec_lev = 109; 442 | 443 | //ENVELOPE1-SUST.TME 444 | //min: 0, max: 1, default: 0.5 445 | const static int Massive_envelope1_sust_tme = 110; 446 | 447 | //ENVELOPE2-SUST.TME 448 | //min: 0, max: 1, default: 0.5 449 | const static int Massive_envelope2_sust_tme = 111; 450 | 451 | //ENVELOPE3-SUST.TME 452 | //min: 0, max: 1, default: 0.5 453 | const static int Massive_envelope3_sust_tme = 112; 454 | 455 | //ENVELOPE4-SUST.TME 456 | //min: 0, max: 1, default: 0.5 457 | const static int Massive_envelope4_sust_tme = 113; 458 | 459 | //ENVELOPE1-SUST.LEV 460 | //min: 0, max: 1, default: 1 461 | const static int Massive_envelope1_sust_lev = 114; 462 | 463 | //ENVELOPE2-SUST.LEV 464 | //min: 0, max: 1, default: 1 465 | const static int Massive_envelope2_sust_lev = 115; 466 | 467 | //ENVELOPE3-SUST.LEV 468 | //min: 0, max: 1, default: 1 469 | const static int Massive_envelope3_sust_lev = 116; 470 | 471 | //ENVELOPE4-SUST.LEV 472 | //min: 0, max: 1, default: 1 473 | const static int Massive_envelope4_sust_lev = 117; 474 | 475 | //ENVELOPE1-LOOP.MORPH 476 | //min: 0, max: 1, default: 0 477 | const static int Massive_envelope1_loop_morph = 118; 478 | 479 | //ENVELOPE2-LOOP.MORPH 480 | //min: 0, max: 1, default: 0 481 | const static int Massive_envelope2_loop_morph = 119; 482 | 483 | //ENVELOPE3-LOOP.MORPH 484 | //min: 0, max: 1, default: 0 485 | const static int Massive_envelope3_loop_morph = 120; 486 | 487 | //ENVELOPE4-LOOP.MORPH 488 | //min: 0, max: 1, default: 0 489 | const static int Massive_envelope4_loop_morph = 121; 490 | 491 | //ENVELOPE1-REL. TME 492 | //min: 0, max: 1, default: 0.1 493 | const static int Massive_envelope1_rel_tme = 122; 494 | 495 | //ENVELOPE2-REL. TME 496 | //min: 0, max: 1, default: 0.1 497 | const static int Massive_envelope2_rel_tme = 123; 498 | 499 | //ENVELOPE3-REL. TME 500 | //min: 0, max: 1, default: 0.1 501 | const static int Massive_envelope3_rel_tme = 124; 502 | 503 | //ENVELOPE4-REL. TME 504 | //min: 0, max: 1, default: 0.1 505 | const static int Massive_envelope4_rel_tme = 125; 506 | 507 | //GLIDE-TIME 508 | //min: 0, max: 1, default: 0 509 | const static int Massive_glide_time = 126; 510 | 511 | //VIBRATO-RATE 512 | //min: 0, max: 1, default: 0 513 | const static int Massive_vibrato_rate = 127; 514 | 515 | //VIBRATO-DEPTH 516 | //min: 0, max: 1, default: 0 517 | const static int Massive_vibrato_depth = 128; 518 | 519 | //UNI PITCH-CROSSFADE 520 | //min: 0, max: 1, default: 0 521 | const static int Massive_uni_pitch_crossfade = 129; 522 | 523 | //UNI WT.POS-CROSSFADE 524 | //min: 0, max: 1, default: 0 525 | const static int Massive_uni_wt_pos_crossfade = 130; 526 | 527 | //UNI PAN-CROSSFADE 528 | //min: 0, max: 1, default: 0.5 529 | const static int Massive_uni_pan_crossfade = 131; 530 | 531 | //EQ-LoShelf.BOOST 532 | //min: 0, max: 1, default: 0.5 533 | const static int Massive_eq_loshelf_boost = 132; 534 | 535 | //EQ-Peak.BOOST 536 | //min: 0, max: 1, default: 0.5 537 | const static int Massive_eq_peak_boost = 133; 538 | 539 | //EQ-Peak.FREQ 540 | //min: 0, max: 1, default: 0.5 541 | const static int Massive_eq_peak_freq = 134; 542 | 543 | //EQ-HiShelf.BOOST 544 | //min: 0, max: 1, default: 0.5 545 | const static int Massive_eq_hishelf_boost = 135; 546 | 547 | //Env.Hold Reset 548 | //min: 0, max: 1, default: 0 549 | const static int Massive_env_hold_reset = 136; 550 | 551 | //MODULATOR5-NUM 552 | //min: 0, max: 1, default: 0 553 | const static int Massive_modulator5_num = 137; 554 | 555 | //MODULATOR6-NUM 556 | //min: 0, max: 1, default: 0 557 | const static int Massive_modulator6_num = 138; 558 | 559 | //MODULATOR7-NUM 560 | //min: 0, max: 1, default: 0 561 | const static int Massive_modulator7_num = 139; 562 | 563 | //MODULATOR8-NUM 564 | //min: 0, max: 1, default: 0 565 | const static int Massive_modulator8_num = 140; 566 | 567 | //MODULATOR5-DEN 568 | //min: 0, max: 1, default: 0 569 | const static int Massive_modulator5_den = 141; 570 | 571 | //MODULATOR6-DEN 572 | //min: 0, max: 1, default: 0 573 | const static int Massive_modulator6_den = 142; 574 | 575 | //MODULATOR7-DEN 576 | //min: 0, max: 1, default: 0 577 | const static int Massive_modulator7_den = 143; 578 | 579 | //MODULATOR8-DEN 580 | //min: 0, max: 1, default: 0 581 | const static int Massive_modulator8_den = 144; 582 | 583 | //MODULATOR5-SNCPOS on 584 | //min: 0, max: 1, default: 1 585 | const static int Massive_modulator5_sncpos_on = 145; 586 | 587 | //MODULATOR6-SNCPOS on 588 | //min: 0, max: 1, default: 1 589 | const static int Massive_modulator6_sncpos_on = 146; 590 | 591 | //MODULATOR7-SNCPOS on 592 | //min: 0, max: 1, default: 1 593 | const static int Massive_modulator7_sncpos_on = 147; 594 | 595 | //MODULATOR8-SNCPOS on 596 | //min: 0, max: 1, default: 1 597 | const static int Massive_modulator8_sncpos_on = 148; -------------------------------------------------------------------------------- /src/AudioUnits/aumUnit_TALNoiseMaker.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aumMonitorableAudioUnit.h" 3 | 4 | /******************************************************************************/ 5 | /* WARNING: THIS CLASS WAS GENERATED BY THE FOLLOWING FUNCTION: */ 6 | /* */ 7 | /* aumUnit_Generic::generateClassFileForAudioUnit(string deviceName); */ 8 | /* */ 9 | /* IF YOU EDIT THIS FILE, YOU RISK HAVING YOUR CHANGES OVERWRITTEN THE NEXT */ 10 | /* TIME THE FILE IS RE-WRITTEN BY THIS FUNCTION. TO EDIT THIS FILE, PLEASE */ 11 | /* COPY IT TO ANY OTHER FOLDER, RENAME THE CLASS, AND THEN MAKE EDITS. */ 12 | /******************************************************************************/ 13 | 14 | class aumUnit_TALNoiseMaker : public aumMonitorableAudioUnit 15 | { 16 | public: 17 | //No name found 18 | //min: 0, max: 1, default: 0 19 | const static int unnamed1 = 0; 20 | 21 | //volume 22 | //min: 0, max: 1, default: 0.408 23 | const static int volume = 1; 24 | 25 | //filtertype 26 | //min: 0, max: 1, default: 0 27 | const static int filtertype = 2; 28 | 29 | //cutoff 30 | //min: 0, max: 1, default: 1 31 | const static int cutoff = 3; 32 | 33 | //resonance 34 | //min: 0, max: 1, default: 0 35 | const static int resonance = 4; 36 | 37 | //keyfollow 38 | //min: 0, max: 1, default: 0 39 | const static int keyfollow = 5; 40 | 41 | //filtercontour 42 | //min: 0, max: 1, default: 0.5 43 | const static int filtercontour = 6; 44 | 45 | //filterattack 46 | //min: 0, max: 1, default: 0 47 | const static int filterattack = 7; 48 | 49 | //filterdecay 50 | //min: 0, max: 1, default: 0 51 | const static int filterdecay = 8; 52 | 53 | //filtersustain 54 | //min: 0, max: 1, default: 1 55 | const static int filtersustain = 9; 56 | 57 | //filterrelease 58 | //min: 0, max: 1, default: 0 59 | const static int filterrelease = 10; 60 | 61 | //ampattack 62 | //min: 0, max: 1, default: 0 63 | const static int ampattack = 11; 64 | 65 | //ampdecay 66 | //min: 0, max: 1, default: 0 67 | const static int ampdecay = 12; 68 | 69 | //ampsustain 70 | //min: 0, max: 1, default: 1 71 | const static int ampsustain = 13; 72 | 73 | //amprelease 74 | //min: 0, max: 1, default: 0 75 | const static int amprelease = 14; 76 | 77 | //osc1volume 78 | //min: 0, max: 1, default: 0.8 79 | const static int osc1volume = 15; 80 | 81 | //osc2volume 82 | //min: 0, max: 1, default: 0 83 | const static int osc2volume = 16; 84 | 85 | //osc3volume 86 | //min: 0, max: 1, default: 0.8 87 | const static int osc3volume = 17; 88 | 89 | //oscmastertune 90 | //min: 0, max: 1, default: 0.5 91 | const static int oscmastertune = 18; 92 | 93 | //osc1tune 94 | //min: 0, max: 1, default: 0.25 95 | const static int osc1tune = 19; 96 | 97 | //osc2tune 98 | //min: 0, max: 1, default: 0.5 99 | const static int osc2tune = 20; 100 | 101 | //osc1finetune 102 | //min: 0, max: 1, default: 0.5 103 | const static int osc1finetune = 21; 104 | 105 | //osc2finetune 106 | //min: 0, max: 1, default: 0.5 107 | const static int osc2finetune = 22; 108 | 109 | //osc1waveform 110 | //min: 0, max: 1, default: 0 111 | const static int osc1waveform = 23; 112 | 113 | //osc2waveform 114 | //min: 0, max: 1, default: 0 115 | const static int osc2waveform = 24; 116 | 117 | //oscsync 118 | //min: 0, max: 1, default: 0 119 | const static int oscsync = 25; 120 | 121 | //lfo1waveform 122 | //min: 0, max: 1, default: 0 123 | const static int lfo1waveform = 26; 124 | 125 | //lfo2waveform 126 | //min: 0, max: 1, default: 0 127 | const static int lfo2waveform = 27; 128 | 129 | //lfo1rate 130 | //min: 0, max: 1, default: 0 131 | const static int lfo1rate = 28; 132 | 133 | //lfo2rate 134 | //min: 0, max: 1, default: 0 135 | const static int lfo2rate = 29; 136 | 137 | //lfo1amount 138 | //min: 0, max: 1, default: 0.5 139 | const static int lfo1amount = 30; 140 | 141 | //lfo2amount 142 | //min: 0, max: 1, default: 0.5 143 | const static int lfo2amount = 31; 144 | 145 | //lfo1destination 146 | //min: 0, max: 1, default: 0 147 | const static int lfo1destination = 32; 148 | 149 | //lfo2destination 150 | //min: 0, max: 1, default: 0 151 | const static int lfo2destination = 33; 152 | 153 | //lfo1phase 154 | //min: 0, max: 1, default: 0 155 | const static int lfo1phase = 34; 156 | 157 | //lfo2phase 158 | //min: 0, max: 1, default: 0 159 | const static int lfo2phase = 35; 160 | 161 | //osc2fm 162 | //min: 0, max: 1, default: 0 163 | const static int osc2fm = 36; 164 | 165 | //osc2phase 166 | //min: 0, max: 1, default: 0 167 | const static int osc2phase = 37; 168 | 169 | //osc1pw 170 | //min: 0, max: 1, default: 0.5 171 | const static int osc1pw = 38; 172 | 173 | //osc1phase 174 | //min: 0, max: 1, default: 0.5 175 | const static int osc1phase = 39; 176 | 177 | //transpose 178 | //min: 0, max: 1, default: 0.5 179 | const static int transpose = 40; 180 | 181 | //freeadattack 182 | //min: 0, max: 1, default: 0 183 | const static int freeadattack = 41; 184 | 185 | //freeaddecay 186 | //min: 0, max: 1, default: 0 187 | const static int freeaddecay = 42; 188 | 189 | //freeadamount 190 | //min: 0, max: 1, default: 0 191 | const static int freeadamount = 43; 192 | 193 | //freeaddestination 194 | //min: 0, max: 1, default: 0 195 | const static int freeaddestination = 44; 196 | 197 | //lfo1sync 198 | //min: 0, max: 1, default: 0 199 | const static int lfo1sync = 45; 200 | 201 | //lfo1keytrigger 202 | //min: 0, max: 1, default: 0 203 | const static int lfo1keytrigger = 46; 204 | 205 | //lfo2sync 206 | //min: 0, max: 1, default: 0 207 | const static int lfo2sync = 47; 208 | 209 | //lfo2keytrigger 210 | //min: 0, max: 1, default: 0 211 | const static int lfo2keytrigger = 48; 212 | 213 | //portamento 214 | //min: 0, max: 1, default: 0 215 | const static int portamento = 49; 216 | 217 | //portamentomode 218 | //min: 0, max: 1, default: 0 219 | const static int portamentomode = 50; 220 | 221 | //voices 222 | //min: 0, max: 1, default: 0 223 | const static int voices = 51; 224 | 225 | //velocityvolume 226 | //min: 0, max: 1, default: 0 227 | const static int velocityvolume = 52; 228 | 229 | //velocitycontour 230 | //min: 0, max: 1, default: 0 231 | const static int velocitycontour = 53; 232 | 233 | //velocitycutoff 234 | //min: 0, max: 1, default: 0 235 | const static int velocitycutoff = 54; 236 | 237 | //pitchwheelcutoff 238 | //min: 0, max: 1, default: 0 239 | const static int pitchwheelcutoff = 55; 240 | 241 | //pitchwheelpitch 242 | //min: 0, max: 1, default: 0 243 | const static int pitchwheelpitch = 56; 244 | 245 | //ringmodulation 246 | //min: 0, max: 1, default: 0 247 | const static int ringmodulation = 57; 248 | 249 | //chorus1enable 250 | //min: 0, max: 1, default: 0 251 | const static int chorus1enable = 58; 252 | 253 | //chorus2enable 254 | //min: 0, max: 1, default: 0 255 | const static int chorus2enable = 59; 256 | 257 | //reverbwet 258 | //min: 0, max: 1, default: 0 259 | const static int reverbwet = 60; 260 | 261 | //reverbdecay 262 | //min: 0, max: 1, default: 0.5 263 | const static int reverbdecay = 61; 264 | 265 | //reverbpredelay 266 | //min: 0, max: 1, default: 0 267 | const static int reverbpredelay = 62; 268 | 269 | //reverbhighcut 270 | //min: 0, max: 1, default: 0 271 | const static int reverbhighcut = 63; 272 | 273 | //reverblowcut 274 | //min: 0, max: 1, default: 1 275 | const static int reverblowcut = 64; 276 | 277 | //oscbitcrusher 278 | //min: 0, max: 1, default: 1 279 | const static int oscbitcrusher = 65; 280 | 281 | //highpass 282 | //min: 0, max: 1, default: 0 283 | const static int highpass = 66; 284 | 285 | //detune 286 | //min: 0, max: 1, default: 0 287 | const static int detune = 67; 288 | 289 | //vintagenoise 290 | //min: 0, max: 1, default: 0 291 | const static int vintagenoise = 68; 292 | 293 | //No name found 294 | //min: 0, max: 1, default: 0 295 | const static int unnamed2 = 69; 296 | 297 | //No name found 298 | //min: 0, max: 1, default: 0 299 | const static int unnamed3 = 70; 300 | 301 | //envelopeeditordest1 302 | //min: 0, max: 1, default: 0 303 | const static int envelopeeditordest1 = 71; 304 | 305 | //envelopeeditorspeed 306 | //min: 0, max: 1, default: 0 307 | const static int envelopeeditorspeed = 72; 308 | 309 | //envelopeeditoramount 310 | //min: 0, max: 1, default: 0 311 | const static int envelopeeditoramount = 73; 312 | 313 | //envelopeoneshot 314 | //min: 0, max: 1, default: 0 315 | const static int envelopeoneshot = 74; 316 | 317 | //envelopefixtempo 318 | //min: 0, max: 1, default: 0 319 | const static int envelopefixtempo = 75; 320 | 321 | //No name found 322 | //min: 0, max: 1, default: 0 323 | const static int unnamed4 = 76; 324 | 325 | //No name found 326 | //min: 0, max: 1, default: 1 327 | const static int unnamed5 = 77; 328 | 329 | //No name found 330 | //min: 0, max: 1, default: 0 331 | const static int unnamed6 = 78; 332 | 333 | //No name found 334 | //min: 0, max: 1, default: 0 335 | const static int unnamed7 = 79; 336 | 337 | //No name found 338 | //min: 0, max: 1, default: 1 339 | const static int unnamed8 = 80; 340 | 341 | //filterdrive 342 | //min: 0, max: 1, default: 0 343 | const static int filterdrive = 81; 344 | 345 | //delaywet 346 | //min: 0, max: 1, default: 0 347 | const static int delaywet = 82; 348 | 349 | //delaytime 350 | //min: 0, max: 1, default: 0.5 351 | const static int delaytime = 83; 352 | 353 | //delaysync 354 | //min: 0, max: 1, default: 0 355 | const static int delaysync = 84; 356 | 357 | //delayfactorl 358 | //min: 0, max: 1, default: 0 359 | const static int delayfactorl = 85; 360 | 361 | //delayfactorr 362 | //min: 0, max: 1, default: 0 363 | const static int delayfactorr = 86; 364 | 365 | //delayhighshelf 366 | //min: 0, max: 1, default: 0 367 | const static int delayhighshelf = 87; 368 | 369 | //delaylowshelf 370 | //min: 0, max: 1, default: 0 371 | const static int delaylowshelf = 88; 372 | 373 | //delayfeedback 374 | //min: 0, max: 1, default: 0.5 375 | const static int delayfeedback = 89; 376 | 377 | //No name found 378 | //min: 0, max: 1, default: 0 379 | const static int unnamed9 = 90; 380 | 381 | //No name found 382 | //min: 0, max: 1, default: 0 383 | const static int unnamed10 = 91; 384 | 385 | //These variables store the most recenty recorded values 386 | //of each of the parameters, for recording and detection 387 | AudioUnitParameterValue previous_unnamed1; 388 | AudioUnitParameterValue previous_volume; 389 | AudioUnitParameterValue previous_filtertype; 390 | AudioUnitParameterValue previous_cutoff; 391 | AudioUnitParameterValue previous_resonance; 392 | AudioUnitParameterValue previous_keyfollow; 393 | AudioUnitParameterValue previous_filtercontour; 394 | AudioUnitParameterValue previous_filterattack; 395 | AudioUnitParameterValue previous_filterdecay; 396 | AudioUnitParameterValue previous_filtersustain; 397 | AudioUnitParameterValue previous_filterrelease; 398 | AudioUnitParameterValue previous_ampattack; 399 | AudioUnitParameterValue previous_ampdecay; 400 | AudioUnitParameterValue previous_ampsustain; 401 | AudioUnitParameterValue previous_amprelease; 402 | AudioUnitParameterValue previous_osc1volume; 403 | AudioUnitParameterValue previous_osc2volume; 404 | AudioUnitParameterValue previous_osc3volume; 405 | AudioUnitParameterValue previous_oscmastertune; 406 | AudioUnitParameterValue previous_osc1tune; 407 | AudioUnitParameterValue previous_osc2tune; 408 | AudioUnitParameterValue previous_osc1finetune; 409 | AudioUnitParameterValue previous_osc2finetune; 410 | AudioUnitParameterValue previous_osc1waveform; 411 | AudioUnitParameterValue previous_osc2waveform; 412 | AudioUnitParameterValue previous_oscsync; 413 | AudioUnitParameterValue previous_lfo1waveform; 414 | AudioUnitParameterValue previous_lfo2waveform; 415 | AudioUnitParameterValue previous_lfo1rate; 416 | AudioUnitParameterValue previous_lfo2rate; 417 | AudioUnitParameterValue previous_lfo1amount; 418 | AudioUnitParameterValue previous_lfo2amount; 419 | AudioUnitParameterValue previous_lfo1destination; 420 | AudioUnitParameterValue previous_lfo2destination; 421 | AudioUnitParameterValue previous_lfo1phase; 422 | AudioUnitParameterValue previous_lfo2phase; 423 | AudioUnitParameterValue previous_osc2fm; 424 | AudioUnitParameterValue previous_osc2phase; 425 | AudioUnitParameterValue previous_osc1pw; 426 | AudioUnitParameterValue previous_osc1phase; 427 | AudioUnitParameterValue previous_transpose; 428 | AudioUnitParameterValue previous_freeadattack; 429 | AudioUnitParameterValue previous_freeaddecay; 430 | AudioUnitParameterValue previous_freeadamount; 431 | AudioUnitParameterValue previous_freeaddestination; 432 | AudioUnitParameterValue previous_lfo1sync; 433 | AudioUnitParameterValue previous_lfo1keytrigger; 434 | AudioUnitParameterValue previous_lfo2sync; 435 | AudioUnitParameterValue previous_lfo2keytrigger; 436 | AudioUnitParameterValue previous_portamento; 437 | AudioUnitParameterValue previous_portamentomode; 438 | AudioUnitParameterValue previous_voices; 439 | AudioUnitParameterValue previous_velocityvolume; 440 | AudioUnitParameterValue previous_velocitycontour; 441 | AudioUnitParameterValue previous_velocitycutoff; 442 | AudioUnitParameterValue previous_pitchwheelcutoff; 443 | AudioUnitParameterValue previous_pitchwheelpitch; 444 | AudioUnitParameterValue previous_ringmodulation; 445 | AudioUnitParameterValue previous_chorus1enable; 446 | AudioUnitParameterValue previous_chorus2enable; 447 | AudioUnitParameterValue previous_reverbwet; 448 | AudioUnitParameterValue previous_reverbdecay; 449 | AudioUnitParameterValue previous_reverbpredelay; 450 | AudioUnitParameterValue previous_reverbhighcut; 451 | AudioUnitParameterValue previous_reverblowcut; 452 | AudioUnitParameterValue previous_oscbitcrusher; 453 | AudioUnitParameterValue previous_highpass; 454 | AudioUnitParameterValue previous_detune; 455 | AudioUnitParameterValue previous_vintagenoise; 456 | AudioUnitParameterValue previous_unnamed2; 457 | AudioUnitParameterValue previous_unnamed3; 458 | AudioUnitParameterValue previous_envelopeeditordest1; 459 | AudioUnitParameterValue previous_envelopeeditorspeed; 460 | AudioUnitParameterValue previous_envelopeeditoramount; 461 | AudioUnitParameterValue previous_envelopeoneshot; 462 | AudioUnitParameterValue previous_envelopefixtempo; 463 | AudioUnitParameterValue previous_unnamed4; 464 | AudioUnitParameterValue previous_unnamed5; 465 | AudioUnitParameterValue previous_unnamed6; 466 | AudioUnitParameterValue previous_unnamed7; 467 | AudioUnitParameterValue previous_unnamed8; 468 | AudioUnitParameterValue previous_filterdrive; 469 | AudioUnitParameterValue previous_delaywet; 470 | AudioUnitParameterValue previous_delaytime; 471 | AudioUnitParameterValue previous_delaysync; 472 | AudioUnitParameterValue previous_delayfactorl; 473 | AudioUnitParameterValue previous_delayfactorr; 474 | AudioUnitParameterValue previous_delayhighshelf; 475 | AudioUnitParameterValue previous_delaylowshelf; 476 | AudioUnitParameterValue previous_delayfeedback; 477 | AudioUnitParameterValue previous_unnamed9; 478 | AudioUnitParameterValue previous_unnamed10; 479 | 480 | void setup(string _unitName) { 481 | aumManagedAudioUnit::setup(_unitName, 'aumu', 'ncut', 'TOGU', "aumUnit_TALNoiseMaker"); 482 | } 483 | 484 | void doPrintChanges() { 485 | compareAndPrint("unnamed1", previous_unnamed1, get(unnamed1)); 486 | compareAndPrint("volume", previous_volume, get(volume)); 487 | compareAndPrint("filtertype", previous_filtertype, get(filtertype)); 488 | compareAndPrint("cutoff", previous_cutoff, get(cutoff)); 489 | compareAndPrint("resonance", previous_resonance, get(resonance)); 490 | compareAndPrint("keyfollow", previous_keyfollow, get(keyfollow)); 491 | compareAndPrint("filtercontour", previous_filtercontour, get(filtercontour)); 492 | compareAndPrint("filterattack", previous_filterattack, get(filterattack)); 493 | compareAndPrint("filterdecay", previous_filterdecay, get(filterdecay)); 494 | compareAndPrint("filtersustain", previous_filtersustain, get(filtersustain)); 495 | compareAndPrint("filterrelease", previous_filterrelease, get(filterrelease)); 496 | compareAndPrint("ampattack", previous_ampattack, get(ampattack)); 497 | compareAndPrint("ampdecay", previous_ampdecay, get(ampdecay)); 498 | compareAndPrint("ampsustain", previous_ampsustain, get(ampsustain)); 499 | compareAndPrint("amprelease", previous_amprelease, get(amprelease)); 500 | compareAndPrint("osc1volume", previous_osc1volume, get(osc1volume)); 501 | compareAndPrint("osc2volume", previous_osc2volume, get(osc2volume)); 502 | compareAndPrint("osc3volume", previous_osc3volume, get(osc3volume)); 503 | compareAndPrint("oscmastertune", previous_oscmastertune, get(oscmastertune)); 504 | compareAndPrint("osc1tune", previous_osc1tune, get(osc1tune)); 505 | compareAndPrint("osc2tune", previous_osc2tune, get(osc2tune)); 506 | compareAndPrint("osc1finetune", previous_osc1finetune, get(osc1finetune)); 507 | compareAndPrint("osc2finetune", previous_osc2finetune, get(osc2finetune)); 508 | compareAndPrint("osc1waveform", previous_osc1waveform, get(osc1waveform)); 509 | compareAndPrint("osc2waveform", previous_osc2waveform, get(osc2waveform)); 510 | compareAndPrint("oscsync", previous_oscsync, get(oscsync)); 511 | compareAndPrint("lfo1waveform", previous_lfo1waveform, get(lfo1waveform)); 512 | compareAndPrint("lfo2waveform", previous_lfo2waveform, get(lfo2waveform)); 513 | compareAndPrint("lfo1rate", previous_lfo1rate, get(lfo1rate)); 514 | compareAndPrint("lfo2rate", previous_lfo2rate, get(lfo2rate)); 515 | compareAndPrint("lfo1amount", previous_lfo1amount, get(lfo1amount)); 516 | compareAndPrint("lfo2amount", previous_lfo2amount, get(lfo2amount)); 517 | compareAndPrint("lfo1destination", previous_lfo1destination, get(lfo1destination)); 518 | compareAndPrint("lfo2destination", previous_lfo2destination, get(lfo2destination)); 519 | compareAndPrint("lfo1phase", previous_lfo1phase, get(lfo1phase)); 520 | compareAndPrint("lfo2phase", previous_lfo2phase, get(lfo2phase)); 521 | compareAndPrint("osc2fm", previous_osc2fm, get(osc2fm)); 522 | compareAndPrint("osc2phase", previous_osc2phase, get(osc2phase)); 523 | compareAndPrint("osc1pw", previous_osc1pw, get(osc1pw)); 524 | compareAndPrint("osc1phase", previous_osc1phase, get(osc1phase)); 525 | compareAndPrint("transpose", previous_transpose, get(transpose)); 526 | compareAndPrint("freeadattack", previous_freeadattack, get(freeadattack)); 527 | compareAndPrint("freeaddecay", previous_freeaddecay, get(freeaddecay)); 528 | compareAndPrint("freeadamount", previous_freeadamount, get(freeadamount)); 529 | compareAndPrint("freeaddestination", previous_freeaddestination, get(freeaddestination)); 530 | compareAndPrint("lfo1sync", previous_lfo1sync, get(lfo1sync)); 531 | compareAndPrint("lfo1keytrigger", previous_lfo1keytrigger, get(lfo1keytrigger)); 532 | compareAndPrint("lfo2sync", previous_lfo2sync, get(lfo2sync)); 533 | compareAndPrint("lfo2keytrigger", previous_lfo2keytrigger, get(lfo2keytrigger)); 534 | compareAndPrint("portamento", previous_portamento, get(portamento)); 535 | compareAndPrint("portamentomode", previous_portamentomode, get(portamentomode)); 536 | compareAndPrint("voices", previous_voices, get(voices)); 537 | compareAndPrint("velocityvolume", previous_velocityvolume, get(velocityvolume)); 538 | compareAndPrint("velocitycontour", previous_velocitycontour, get(velocitycontour)); 539 | compareAndPrint("velocitycutoff", previous_velocitycutoff, get(velocitycutoff)); 540 | compareAndPrint("pitchwheelcutoff", previous_pitchwheelcutoff, get(pitchwheelcutoff)); 541 | compareAndPrint("pitchwheelpitch", previous_pitchwheelpitch, get(pitchwheelpitch)); 542 | compareAndPrint("ringmodulation", previous_ringmodulation, get(ringmodulation)); 543 | compareAndPrint("chorus1enable", previous_chorus1enable, get(chorus1enable)); 544 | compareAndPrint("chorus2enable", previous_chorus2enable, get(chorus2enable)); 545 | compareAndPrint("reverbwet", previous_reverbwet, get(reverbwet)); 546 | compareAndPrint("reverbdecay", previous_reverbdecay, get(reverbdecay)); 547 | compareAndPrint("reverbpredelay", previous_reverbpredelay, get(reverbpredelay)); 548 | compareAndPrint("reverbhighcut", previous_reverbhighcut, get(reverbhighcut)); 549 | compareAndPrint("reverblowcut", previous_reverblowcut, get(reverblowcut)); 550 | compareAndPrint("oscbitcrusher", previous_oscbitcrusher, get(oscbitcrusher)); 551 | compareAndPrint("highpass", previous_highpass, get(highpass)); 552 | compareAndPrint("detune", previous_detune, get(detune)); 553 | compareAndPrint("vintagenoise", previous_vintagenoise, get(vintagenoise)); 554 | compareAndPrint("unnamed2", previous_unnamed2, get(unnamed2)); 555 | compareAndPrint("unnamed3", previous_unnamed3, get(unnamed3)); 556 | compareAndPrint("envelopeeditordest1", previous_envelopeeditordest1, get(envelopeeditordest1)); 557 | compareAndPrint("envelopeeditorspeed", previous_envelopeeditorspeed, get(envelopeeditorspeed)); 558 | compareAndPrint("envelopeeditoramount", previous_envelopeeditoramount, get(envelopeeditoramount)); 559 | compareAndPrint("envelopeoneshot", previous_envelopeoneshot, get(envelopeoneshot)); 560 | compareAndPrint("envelopefixtempo", previous_envelopefixtempo, get(envelopefixtempo)); 561 | compareAndPrint("unnamed4", previous_unnamed4, get(unnamed4)); 562 | compareAndPrint("unnamed5", previous_unnamed5, get(unnamed5)); 563 | compareAndPrint("unnamed6", previous_unnamed6, get(unnamed6)); 564 | compareAndPrint("unnamed7", previous_unnamed7, get(unnamed7)); 565 | compareAndPrint("unnamed8", previous_unnamed8, get(unnamed8)); 566 | compareAndPrint("filterdrive", previous_filterdrive, get(filterdrive)); 567 | compareAndPrint("delaywet", previous_delaywet, get(delaywet)); 568 | compareAndPrint("delaytime", previous_delaytime, get(delaytime)); 569 | compareAndPrint("delaysync", previous_delaysync, get(delaysync)); 570 | compareAndPrint("delayfactorl", previous_delayfactorl, get(delayfactorl)); 571 | compareAndPrint("delayfactorr", previous_delayfactorr, get(delayfactorr)); 572 | compareAndPrint("delayhighshelf", previous_delayhighshelf, get(delayhighshelf)); 573 | compareAndPrint("delaylowshelf", previous_delaylowshelf, get(delaylowshelf)); 574 | compareAndPrint("delayfeedback", previous_delayfeedback, get(delayfeedback)); 575 | compareAndPrint("unnamed9", previous_unnamed9, get(unnamed9)); 576 | compareAndPrint("unnamed10", previous_unnamed10, get(unnamed10)); 577 | } 578 | 579 | void doRecordParams() { 580 | previous_unnamed1 = get(unnamed1); 581 | previous_volume = get(volume); 582 | previous_filtertype = get(filtertype); 583 | previous_cutoff = get(cutoff); 584 | previous_resonance = get(resonance); 585 | previous_keyfollow = get(keyfollow); 586 | previous_filtercontour = get(filtercontour); 587 | previous_filterattack = get(filterattack); 588 | previous_filterdecay = get(filterdecay); 589 | previous_filtersustain = get(filtersustain); 590 | previous_filterrelease = get(filterrelease); 591 | previous_ampattack = get(ampattack); 592 | previous_ampdecay = get(ampdecay); 593 | previous_ampsustain = get(ampsustain); 594 | previous_amprelease = get(amprelease); 595 | previous_osc1volume = get(osc1volume); 596 | previous_osc2volume = get(osc2volume); 597 | previous_osc3volume = get(osc3volume); 598 | previous_oscmastertune = get(oscmastertune); 599 | previous_osc1tune = get(osc1tune); 600 | previous_osc2tune = get(osc2tune); 601 | previous_osc1finetune = get(osc1finetune); 602 | previous_osc2finetune = get(osc2finetune); 603 | previous_osc1waveform = get(osc1waveform); 604 | previous_osc2waveform = get(osc2waveform); 605 | previous_oscsync = get(oscsync); 606 | previous_lfo1waveform = get(lfo1waveform); 607 | previous_lfo2waveform = get(lfo2waveform); 608 | previous_lfo1rate = get(lfo1rate); 609 | previous_lfo2rate = get(lfo2rate); 610 | previous_lfo1amount = get(lfo1amount); 611 | previous_lfo2amount = get(lfo2amount); 612 | previous_lfo1destination = get(lfo1destination); 613 | previous_lfo2destination = get(lfo2destination); 614 | previous_lfo1phase = get(lfo1phase); 615 | previous_lfo2phase = get(lfo2phase); 616 | previous_osc2fm = get(osc2fm); 617 | previous_osc2phase = get(osc2phase); 618 | previous_osc1pw = get(osc1pw); 619 | previous_osc1phase = get(osc1phase); 620 | previous_transpose = get(transpose); 621 | previous_freeadattack = get(freeadattack); 622 | previous_freeaddecay = get(freeaddecay); 623 | previous_freeadamount = get(freeadamount); 624 | previous_freeaddestination = get(freeaddestination); 625 | previous_lfo1sync = get(lfo1sync); 626 | previous_lfo1keytrigger = get(lfo1keytrigger); 627 | previous_lfo2sync = get(lfo2sync); 628 | previous_lfo2keytrigger = get(lfo2keytrigger); 629 | previous_portamento = get(portamento); 630 | previous_portamentomode = get(portamentomode); 631 | previous_voices = get(voices); 632 | previous_velocityvolume = get(velocityvolume); 633 | previous_velocitycontour = get(velocitycontour); 634 | previous_velocitycutoff = get(velocitycutoff); 635 | previous_pitchwheelcutoff = get(pitchwheelcutoff); 636 | previous_pitchwheelpitch = get(pitchwheelpitch); 637 | previous_ringmodulation = get(ringmodulation); 638 | previous_chorus1enable = get(chorus1enable); 639 | previous_chorus2enable = get(chorus2enable); 640 | previous_reverbwet = get(reverbwet); 641 | previous_reverbdecay = get(reverbdecay); 642 | previous_reverbpredelay = get(reverbpredelay); 643 | previous_reverbhighcut = get(reverbhighcut); 644 | previous_reverblowcut = get(reverblowcut); 645 | previous_oscbitcrusher = get(oscbitcrusher); 646 | previous_highpass = get(highpass); 647 | previous_detune = get(detune); 648 | previous_vintagenoise = get(vintagenoise); 649 | previous_unnamed2 = get(unnamed2); 650 | previous_unnamed3 = get(unnamed3); 651 | previous_envelopeeditordest1 = get(envelopeeditordest1); 652 | previous_envelopeeditorspeed = get(envelopeeditorspeed); 653 | previous_envelopeeditoramount = get(envelopeeditoramount); 654 | previous_envelopeoneshot = get(envelopeoneshot); 655 | previous_envelopefixtempo = get(envelopefixtempo); 656 | previous_unnamed4 = get(unnamed4); 657 | previous_unnamed5 = get(unnamed5); 658 | previous_unnamed6 = get(unnamed6); 659 | previous_unnamed7 = get(unnamed7); 660 | previous_unnamed8 = get(unnamed8); 661 | previous_filterdrive = get(filterdrive); 662 | previous_delaywet = get(delaywet); 663 | previous_delaytime = get(delaytime); 664 | previous_delaysync = get(delaysync); 665 | previous_delayfactorl = get(delayfactorl); 666 | previous_delayfactorr = get(delayfactorr); 667 | previous_delayhighshelf = get(delayhighshelf); 668 | previous_delaylowshelf = get(delaylowshelf); 669 | previous_delayfeedback = get(delayfeedback); 670 | previous_unnamed9 = get(unnamed9); 671 | previous_unnamed10 = get(unnamed10); 672 | } 673 | }; -------------------------------------------------------------------------------- /src/AudioUnits/aumUnit_Massive.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "aumMonitorableAudioUnit.h" 3 | 4 | /******************************************************************************/ 5 | /* WARNING: THIS CLASS WAS GENERATED BY THE FOLLOWING FUNCTION: */ 6 | /* */ 7 | /* aumUnit_Generic::generateClassFileForAudioUnit(string deviceName); */ 8 | /* */ 9 | /* IF YOU EDIT THIS FILE, YOU RISK HAVING YOUR CHANGES OVERWRITTEN THE NEXT */ 10 | /* TIME THE FILE IS RE-WRITTEN BY THIS FUNCTION. TO EDIT THIS FILE, PLEASE */ 11 | /* COPY IT TO ANY OTHER FOLDER, RENAME THE CLASS, AND THEN MAKE EDITS. */ 12 | /******************************************************************************/ 13 | 14 | class aumUnit_Massive : public aumMonitorableAudioUnit 15 | { 16 | public: 17 | //MACRO 1 18 | //min: 0, max: 1, default: 0 19 | const static int macro_1 = 0; 20 | 21 | //MACRO 2 22 | //min: 0, max: 1, default: 0 23 | const static int macro_2 = 1; 24 | 25 | //MACRO 3 26 | //min: 0, max: 1, default: 0 27 | const static int macro_3 = 2; 28 | 29 | //MACRO 4 30 | //min: 0, max: 1, default: 0 31 | const static int macro_4 = 3; 32 | 33 | //MACRO 5 34 | //min: 0, max: 1, default: 0 35 | const static int macro_5 = 4; 36 | 37 | //MACRO 6 38 | //min: 0, max: 1, default: 0 39 | const static int macro_6 = 5; 40 | 41 | //MACRO 7 42 | //min: 0, max: 1, default: 0 43 | const static int macro_7 = 6; 44 | 45 | //MACRO 8 46 | //min: 0, max: 1, default: 0 47 | const static int macro_8 = 7; 48 | 49 | //OSC1-PITCH 50 | //min: 0, max: 1, default: 0.5 51 | const static int osc1_pitch = 8; 52 | 53 | //OSC1-POSITION 54 | //min: 0, max: 1, default: 0.5 55 | const static int osc1_position = 9; 56 | 57 | //OSC1-PARAM2 58 | //min: 0, max: 1, default: 1 59 | const static int osc1_param2 = 10; 60 | 61 | //OSC1-AMP 62 | //min: 0, max: 1, default: 1 63 | const static int osc1_amp = 11; 64 | 65 | //OSC1-FLT.ROUTING 66 | //min: 0, max: 1, default: 0.5 67 | const static int osc1_flt_routing = 12; 68 | 69 | //OSC2-PITCH 70 | //min: 0, max: 1, default: 0.5 71 | const static int osc2_pitch = 13; 72 | 73 | //OSC2-POSITION 74 | //min: 0, max: 1, default: 0 75 | const static int osc2_position = 14; 76 | 77 | //OSC2-PARAM2 78 | //min: 0, max: 1, default: 1 79 | const static int osc2_param2 = 15; 80 | 81 | //OSC2-AMP 82 | //min: 0, max: 1, default: 0 83 | const static int osc2_amp = 16; 84 | 85 | //OSC2-FLT.ROUTING 86 | //min: 0, max: 1, default: 0.5 87 | const static int osc2_flt_routing = 17; 88 | 89 | //OSC3-PITCH 90 | //min: 0, max: 1, default: 0.5 91 | const static int osc3_pitch = 18; 92 | 93 | //OSC3-POSITION 94 | //min: 0, max: 1, default: 0 95 | const static int osc3_position = 19; 96 | 97 | //OSC3-PARAM2 98 | //min: 0, max: 1, default: 1 99 | const static int osc3_param2 = 20; 100 | 101 | //OSC3-AMP 102 | //min: 0, max: 1, default: 0 103 | const static int osc3_amp = 21; 104 | 105 | //OSC3-FLT.ROUTING 106 | //min: 0, max: 1, default: 0.5 107 | const static int osc3_flt_routing = 22; 108 | 109 | //NOISE-COLOR 110 | //min: 0, max: 1, default: 0 111 | const static int noise_color = 23; 112 | 113 | //NOISE-AMP 114 | //min: 0, max: 1, default: 0 115 | const static int noise_amp = 24; 116 | 117 | //NOISE-FLTR. ROUTING 118 | //min: 0, max: 1, default: 0.5 119 | const static int noise_fltr_routing = 25; 120 | 121 | //FEEDBACK-AMP 122 | //min: 0, max: 1, default: 0 123 | const static int feedback_amp = 26; 124 | 125 | //FEEDBACK-FLT.ROUTING 126 | //min: 0, max: 1, default: 0.5 127 | const static int feedback_flt_routing = 27; 128 | 129 | //MOD.OSC-PITCH 130 | //min: 0, max: 1, default: 0.5 131 | const static int mod_osc_pitch = 28; 132 | 133 | //MOD.OSC-RNGMOD 134 | //min: 0, max: 1, default: 0 135 | const static int mod_osc_rngmod = 29; 136 | 137 | //MOD.OSC-PHASE 138 | //min: 0, max: 1, default: 0 139 | const static int mod_osc_phase = 30; 140 | 141 | //MOD.OSC-POSITION 142 | //min: 0, max: 1, default: 0 143 | const static int mod_osc_position = 31; 144 | 145 | //MOD.OSC-FLTR.FM 146 | //min: 0, max: 1, default: 0 147 | const static int mod_osc_fltr_fm = 32; 148 | 149 | //FILTER1-CUT/PRM.1 150 | //min: 0, max: 1, default: 0 151 | const static int filter1_cut_prm_1 = 33; 152 | 153 | //FILTER1-BW/PRM.2 154 | //min: 0, max: 1, default: 0 155 | const static int filter1_bw_prm_2 = 34; 156 | 157 | //FILTER1-RES/PRM.3 158 | //min: 0, max: 1, default: 0 159 | const static int filter1_res_prm_3 = 35; 160 | 161 | //FILTER2-CUT/PRM.1 162 | //min: 0, max: 1, default: 0 163 | const static int filter2_cut_prm_1 = 36; 164 | 165 | //FILTER2-BW/PRM.2 166 | //min: 0, max: 1, default: 0 167 | const static int filter2_bw_prm_2 = 37; 168 | 169 | //FILTER2-RES/PRM.3 170 | //min: 0, max: 1, default: 0 171 | const static int filter2_res_prm_3 = 38; 172 | 173 | //SERIELL-PARALLEL 174 | //min: 0, max: 1, default: 0 175 | const static int seriell_parallel = 39; 176 | 177 | //INSERT1-DW/PRM.1 178 | //min: 0, max: 1, default: 0 179 | const static int insert1_dw_prm_1 = 40; 180 | 181 | //INSERT1-PRM.2 182 | //min: 0, max: 1, default: 0 183 | const static int insert1_prm_2 = 41; 184 | 185 | //INSERT2-DW/PRM.1 186 | //min: 0, max: 1, default: 0 187 | const static int insert2_dw_prm_1 = 42; 188 | 189 | //INSERT2-PRM.2 190 | //min: 0, max: 1, default: 0 191 | const static int insert2_prm_2 = 43; 192 | 193 | //MASTER FX1-DRY WET 194 | //min: 0, max: 1, default: 0 195 | const static int master_fx1_dry_wet = 44; 196 | 197 | //MASTER FX1-PRM.2 198 | //min: 0, max: 1, default: 0.5 199 | const static int master_fx1_prm_2 = 45; 200 | 201 | //MASTER FX1-PRM.3 202 | //min: 0, max: 1, default: 0.5 203 | const static int master_fx1_prm_3 = 46; 204 | 205 | //MASTER FX1-PRM.4 206 | //min: 0, max: 1, default: 0.5 207 | const static int master_fx1_prm_4 = 47; 208 | 209 | //MASTER FX2-DRY WET 210 | //min: 0, max: 1, default: 0 211 | const static int master_fx2_dry_wet = 48; 212 | 213 | //MASTER FX2-PRM.2 214 | //min: 0, max: 1, default: 0.5 215 | const static int master_fx2_prm_2 = 49; 216 | 217 | //MASTER FX2-PRM.3 218 | //min: 0, max: 1, default: 0.5 219 | const static int master_fx2_prm_3 = 50; 220 | 221 | //MASTER FX2-PRM.4 222 | //min: 0, max: 1, default: 0.5 223 | const static int master_fx2_prm_4 = 51; 224 | 225 | //FILTER1-OUT GAIN 226 | //min: 0, max: 1, default: 0.8 227 | const static int filter1_out_gain = 52; 228 | 229 | //FILTER2-OUT GAIN 230 | //min: 0, max: 1, default: 0.8 231 | const static int filter2_out_gain = 53; 232 | 233 | //FILTER-1/2-CROSSFADE 234 | //min: 0, max: 1, default: 0.5 235 | const static int filter_1_2_crossfade = 54; 236 | 237 | //BYPASS-GAIN 238 | //min: 0, max: 1, default: 0 239 | const static int bypass_gain = 55; 240 | 241 | //PAN (Fltr-Path) 242 | //min: 0, max: 1, default: 0.5 243 | const static int pan_fltr_path_ = 56; 244 | 245 | //MASTER-VOLUME 246 | //min: 0, max: 1, default: 0.5 247 | const static int master_volume = 57; 248 | 249 | //MODULATOR5-RATE 250 | //min: 0, max: 1, default: 0.5 251 | const static int modulator5_rate = 58; 252 | 253 | //MODULATOR6-RATE 254 | //min: 0, max: 1, default: 0.5 255 | const static int modulator6_rate = 59; 256 | 257 | //MODULATOR7-RATE 258 | //min: 0, max: 1, default: 0.5 259 | const static int modulator7_rate = 60; 260 | 261 | //MODULATOR8-RATE 262 | //min: 0, max: 1, default: 0.5 263 | const static int modulator8_rate = 61; 264 | 265 | //MODULATOR5-AMP 266 | //min: 0, max: 1, default: 1 267 | const static int modulator5_amp = 62; 268 | 269 | //MODULATOR6-AMP 270 | //min: 0, max: 1, default: 1 271 | const static int modulator6_amp = 63; 272 | 273 | //MODULATOR7-AMP 274 | //min: 0, max: 1, default: 1 275 | const static int modulator7_amp = 64; 276 | 277 | //MODULATOR8-AMP 278 | //min: 0, max: 1, default: 1 279 | const static int modulator8_amp = 65; 280 | 281 | //MODULATOR5-CROSSF./GLIDE 282 | //min: 0, max: 1, default: 1 283 | const static int modulator5_crossf_glide = 66; 284 | 285 | //MODULATOR6-CROSSF./GLIDE 286 | //min: 0, max: 1, default: 1 287 | const static int modulator6_crossf_glide = 67; 288 | 289 | //MODULATOR7-CROSSF./GLIDE 290 | //min: 0, max: 1, default: 1 291 | const static int modulator7_crossf_glide = 68; 292 | 293 | //MODULATOR8-CROSSF./GLIDE 294 | //min: 0, max: 1, default: 1 295 | const static int modulator8_crossf_glide = 69; 296 | 297 | //MODULATOR5-IND.LEV 298 | //min: 0, max: 1, default: 0 299 | const static int modulator5_ind_lev = 70; 300 | 301 | //MODULATOR6-IND.LEV 302 | //min: 0, max: 1, default: 0 303 | const static int modulator6_ind_lev = 71; 304 | 305 | //MODULATOR7-IND.LEV 306 | //min: 0, max: 1, default: 0 307 | const static int modulator7_ind_lev = 72; 308 | 309 | //MODULATOR8-IND.LEV 310 | //min: 0, max: 1, default: 0 311 | const static int modulator8_ind_lev = 73; 312 | 313 | //MODULATOR15-SYNC on 314 | //min: 0, max: 1, default: 0 315 | const static int modulator15_sync_on = 74; 316 | 317 | //MODULATOR26-SYNC on 318 | //min: 0, max: 1, default: 0 319 | const static int modulator26_sync_on = 75; 320 | 321 | //MODULATOR37-SYNC on 322 | //min: 0, max: 1, default: 0 323 | const static int modulator37_sync_on = 76; 324 | 325 | //MODULATOR48-SYNC on 326 | //min: 0, max: 1, default: 0 327 | const static int modulator48_sync_on = 77; 328 | 329 | //MODULATOR5-RESTART on 330 | //min: 0, max: 1, default: 1 331 | const static int modulator5_restart_on = 78; 332 | 333 | //MODULATOR6-RESTART on 334 | //min: 0, max: 1, default: 1 335 | const static int modulator6_restart_on = 79; 336 | 337 | //MODULATOR7-RESTART on 338 | //min: 0, max: 1, default: 1 339 | const static int modulator7_restart_on = 80; 340 | 341 | //MODULATOR8-RESTART on 342 | //min: 0, max: 1, default: 1 343 | const static int modulator8_restart_on = 81; 344 | 345 | //ENVELOPE1-VELOCITY 346 | //min: 0, max: 1, default: 0 347 | const static int envelope1_velocity = 82; 348 | 349 | //ENVELOPE2-VELOCITY 350 | //min: 0, max: 1, default: 0 351 | const static int envelope2_velocity = 83; 352 | 353 | //ENVELOPE3-VELOCITY 354 | //min: 0, max: 1, default: 0 355 | const static int envelope3_velocity = 84; 356 | 357 | //ENVELOPE4-VELOCITY 358 | //min: 0, max: 1, default: 0 359 | const static int envelope4_velocity = 85; 360 | 361 | //ENVELOPE1-KEYTRACKING 362 | //min: 0, max: 1, default: 0 363 | const static int envelope1_keytracking = 86; 364 | 365 | //ENVELOPE2-KEYTRACKING 366 | //min: 0, max: 1, default: 0 367 | const static int envelope2_keytracking = 87; 368 | 369 | //ENVELOPE3-KEYTRACKING 370 | //min: 0, max: 1, default: 0 371 | const static int envelope3_keytracking = 88; 372 | 373 | //ENVELOPE4-KEYTRACKING 374 | //min: 0, max: 1, default: 0 375 | const static int envelope4_keytracking = 89; 376 | 377 | //ENVELOPE1-DELAY 378 | //min: 0, max: 1, default: 0 379 | const static int envelope1_delay = 90; 380 | 381 | //ENVELOPE2-DELAY 382 | //min: 0, max: 1, default: 0 383 | const static int envelope2_delay = 91; 384 | 385 | //ENVELOPE3-DELAY 386 | //min: 0, max: 1, default: 0 387 | const static int envelope3_delay = 92; 388 | 389 | //ENVELOPE4-DELAY 390 | //min: 0, max: 1, default: 0 391 | const static int envelope4_delay = 93; 392 | 393 | //ENVELOPE1-ATT.TME 394 | //min: 0, max: 1, default: 0.05 395 | const static int envelope1_att_tme = 94; 396 | 397 | //ENVELOPE2-ATT.TME 398 | //min: 0, max: 1, default: 0.05 399 | const static int envelope2_att_tme = 95; 400 | 401 | //ENVELOPE3-ATT.TME 402 | //min: 0, max: 1, default: 0.05 403 | const static int envelope3_att_tme = 96; 404 | 405 | //ENVELOPE4-ATT.TME 406 | //min: 0, max: 1, default: 0.05 407 | const static int envelope4_att_tme = 97; 408 | 409 | //ENVELOPE1-ATT.LEV 410 | //min: 0, max: 1, default: 1 411 | const static int envelope1_att_lev = 98; 412 | 413 | //ENVELOPE2-ATT.LEV 414 | //min: 0, max: 1, default: 1 415 | const static int envelope2_att_lev = 99; 416 | 417 | //ENVELOPE3-ATT.LEV 418 | //min: 0, max: 1, default: 1 419 | const static int envelope3_att_lev = 100; 420 | 421 | //ENVELOPE4-ATT.LEV 422 | //min: 0, max: 1, default: 1 423 | const static int envelope4_att_lev = 101; 424 | 425 | //ENVELOPE1-DEC.TME 426 | //min: 0, max: 1, default: 0.5 427 | const static int envelope1_dec_tme = 102; 428 | 429 | //ENVELOPE2-DEC.TME 430 | //min: 0, max: 1, default: 0.5 431 | const static int envelope2_dec_tme = 103; 432 | 433 | //ENVELOPE3-DEC.TME 434 | //min: 0, max: 1, default: 0.5 435 | const static int envelope3_dec_tme = 104; 436 | 437 | //ENVELOPE4-DEC.TME 438 | //min: 0, max: 1, default: 0.5 439 | const static int envelope4_dec_tme = 105; 440 | 441 | //ENVELOPE1-DEC.LEV 442 | //min: 0, max: 1, default: 0.5 443 | const static int envelope1_dec_lev = 106; 444 | 445 | //ENVELOPE2-DEC.LEV 446 | //min: 0, max: 1, default: 0.5 447 | const static int envelope2_dec_lev = 107; 448 | 449 | //ENVELOPE3-DEC.LEV 450 | //min: 0, max: 1, default: 0.5 451 | const static int envelope3_dec_lev = 108; 452 | 453 | //ENVELOPE4-DEC.LEV 454 | //min: 0, max: 1, default: 0.5 455 | const static int envelope4_dec_lev = 109; 456 | 457 | //ENVELOPE1-SUST.TME 458 | //min: 0, max: 1, default: 0.5 459 | const static int envelope1_sust_tme = 110; 460 | 461 | //ENVELOPE2-SUST.TME 462 | //min: 0, max: 1, default: 0.5 463 | const static int envelope2_sust_tme = 111; 464 | 465 | //ENVELOPE3-SUST.TME 466 | //min: 0, max: 1, default: 0.5 467 | const static int envelope3_sust_tme = 112; 468 | 469 | //ENVELOPE4-SUST.TME 470 | //min: 0, max: 1, default: 0.5 471 | const static int envelope4_sust_tme = 113; 472 | 473 | //ENVELOPE1-SUST.LEV 474 | //min: 0, max: 1, default: 1 475 | const static int envelope1_sust_lev = 114; 476 | 477 | //ENVELOPE2-SUST.LEV 478 | //min: 0, max: 1, default: 1 479 | const static int envelope2_sust_lev = 115; 480 | 481 | //ENVELOPE3-SUST.LEV 482 | //min: 0, max: 1, default: 1 483 | const static int envelope3_sust_lev = 116; 484 | 485 | //ENVELOPE4-SUST.LEV 486 | //min: 0, max: 1, default: 1 487 | const static int envelope4_sust_lev = 117; 488 | 489 | //ENVELOPE1-LOOP.MORPH 490 | //min: 0, max: 1, default: 0 491 | const static int envelope1_loop_morph = 118; 492 | 493 | //ENVELOPE2-LOOP.MORPH 494 | //min: 0, max: 1, default: 0 495 | const static int envelope2_loop_morph = 119; 496 | 497 | //ENVELOPE3-LOOP.MORPH 498 | //min: 0, max: 1, default: 0 499 | const static int envelope3_loop_morph = 120; 500 | 501 | //ENVELOPE4-LOOP.MORPH 502 | //min: 0, max: 1, default: 0 503 | const static int envelope4_loop_morph = 121; 504 | 505 | //ENVELOPE1-REL. TME 506 | //min: 0, max: 1, default: 0.1 507 | const static int envelope1_rel_tme = 122; 508 | 509 | //ENVELOPE2-REL. TME 510 | //min: 0, max: 1, default: 0.1 511 | const static int envelope2_rel_tme = 123; 512 | 513 | //ENVELOPE3-REL. TME 514 | //min: 0, max: 1, default: 0.1 515 | const static int envelope3_rel_tme = 124; 516 | 517 | //ENVELOPE4-REL. TME 518 | //min: 0, max: 1, default: 0.1 519 | const static int envelope4_rel_tme = 125; 520 | 521 | //GLIDE-TIME 522 | //min: 0, max: 1, default: 0 523 | const static int glide_time = 126; 524 | 525 | //VIBRATO-RATE 526 | //min: 0, max: 1, default: 0 527 | const static int vibrato_rate = 127; 528 | 529 | //VIBRATO-DEPTH 530 | //min: 0, max: 1, default: 0 531 | const static int vibrato_depth = 128; 532 | 533 | //UNI PITCH-CROSSFADE 534 | //min: 0, max: 1, default: 0 535 | const static int uni_pitch_crossfade = 129; 536 | 537 | //UNI WT.POS-CROSSFADE 538 | //min: 0, max: 1, default: 0 539 | const static int uni_wt_pos_crossfade = 130; 540 | 541 | //UNI PAN-CROSSFADE 542 | //min: 0, max: 1, default: 0.5 543 | const static int uni_pan_crossfade = 131; 544 | 545 | //EQ-LoShelf.BOOST 546 | //min: 0, max: 1, default: 0.5 547 | const static int eq_loshelf_boost = 132; 548 | 549 | //EQ-Peak.BOOST 550 | //min: 0, max: 1, default: 0.5 551 | const static int eq_peak_boost = 133; 552 | 553 | //EQ-Peak.FREQ 554 | //min: 0, max: 1, default: 0.5 555 | const static int eq_peak_freq = 134; 556 | 557 | //EQ-HiShelf.BOOST 558 | //min: 0, max: 1, default: 0.5 559 | const static int eq_hishelf_boost = 135; 560 | 561 | //Env.Hold Reset 562 | //min: 0, max: 1, default: 0 563 | const static int env_hold_reset = 136; 564 | 565 | //MODULATOR5-NUM 566 | //min: 0, max: 1, default: 0 567 | const static int modulator5_num = 137; 568 | 569 | //MODULATOR6-NUM 570 | //min: 0, max: 1, default: 0 571 | const static int modulator6_num = 138; 572 | 573 | //MODULATOR7-NUM 574 | //min: 0, max: 1, default: 0 575 | const static int modulator7_num = 139; 576 | 577 | //MODULATOR8-NUM 578 | //min: 0, max: 1, default: 0 579 | const static int modulator8_num = 140; 580 | 581 | //MODULATOR5-DEN 582 | //min: 0, max: 1, default: 0 583 | const static int modulator5_den = 141; 584 | 585 | //MODULATOR6-DEN 586 | //min: 0, max: 1, default: 0 587 | const static int modulator6_den = 142; 588 | 589 | //MODULATOR7-DEN 590 | //min: 0, max: 1, default: 0 591 | const static int modulator7_den = 143; 592 | 593 | //MODULATOR8-DEN 594 | //min: 0, max: 1, default: 0 595 | const static int modulator8_den = 144; 596 | 597 | //MODULATOR5-SNCPOS on 598 | //min: 0, max: 1, default: 1 599 | const static int modulator5_sncpos_on = 145; 600 | 601 | //MODULATOR6-SNCPOS on 602 | //min: 0, max: 1, default: 1 603 | const static int modulator6_sncpos_on = 146; 604 | 605 | //MODULATOR7-SNCPOS on 606 | //min: 0, max: 1, default: 1 607 | const static int modulator7_sncpos_on = 147; 608 | 609 | //MODULATOR8-SNCPOS on 610 | //min: 0, max: 1, default: 1 611 | const static int modulator8_sncpos_on = 148; 612 | 613 | //These variables store the most recenty recorded values 614 | //of each of the parameters, for recording and detection 615 | AudioUnitParameterValue previous_macro_1; 616 | AudioUnitParameterValue previous_macro_2; 617 | AudioUnitParameterValue previous_macro_3; 618 | AudioUnitParameterValue previous_macro_4; 619 | AudioUnitParameterValue previous_macro_5; 620 | AudioUnitParameterValue previous_macro_6; 621 | AudioUnitParameterValue previous_macro_7; 622 | AudioUnitParameterValue previous_macro_8; 623 | AudioUnitParameterValue previous_osc1_pitch; 624 | AudioUnitParameterValue previous_osc1_position; 625 | AudioUnitParameterValue previous_osc1_param2; 626 | AudioUnitParameterValue previous_osc1_amp; 627 | AudioUnitParameterValue previous_osc1_flt_routing; 628 | AudioUnitParameterValue previous_osc2_pitch; 629 | AudioUnitParameterValue previous_osc2_position; 630 | AudioUnitParameterValue previous_osc2_param2; 631 | AudioUnitParameterValue previous_osc2_amp; 632 | AudioUnitParameterValue previous_osc2_flt_routing; 633 | AudioUnitParameterValue previous_osc3_pitch; 634 | AudioUnitParameterValue previous_osc3_position; 635 | AudioUnitParameterValue previous_osc3_param2; 636 | AudioUnitParameterValue previous_osc3_amp; 637 | AudioUnitParameterValue previous_osc3_flt_routing; 638 | AudioUnitParameterValue previous_noise_color; 639 | AudioUnitParameterValue previous_noise_amp; 640 | AudioUnitParameterValue previous_noise_fltr_routing; 641 | AudioUnitParameterValue previous_feedback_amp; 642 | AudioUnitParameterValue previous_feedback_flt_routing; 643 | AudioUnitParameterValue previous_mod_osc_pitch; 644 | AudioUnitParameterValue previous_mod_osc_rngmod; 645 | AudioUnitParameterValue previous_mod_osc_phase; 646 | AudioUnitParameterValue previous_mod_osc_position; 647 | AudioUnitParameterValue previous_mod_osc_fltr_fm; 648 | AudioUnitParameterValue previous_filter1_cut_prm_1; 649 | AudioUnitParameterValue previous_filter1_bw_prm_2; 650 | AudioUnitParameterValue previous_filter1_res_prm_3; 651 | AudioUnitParameterValue previous_filter2_cut_prm_1; 652 | AudioUnitParameterValue previous_filter2_bw_prm_2; 653 | AudioUnitParameterValue previous_filter2_res_prm_3; 654 | AudioUnitParameterValue previous_seriell_parallel; 655 | AudioUnitParameterValue previous_insert1_dw_prm_1; 656 | AudioUnitParameterValue previous_insert1_prm_2; 657 | AudioUnitParameterValue previous_insert2_dw_prm_1; 658 | AudioUnitParameterValue previous_insert2_prm_2; 659 | AudioUnitParameterValue previous_master_fx1_dry_wet; 660 | AudioUnitParameterValue previous_master_fx1_prm_2; 661 | AudioUnitParameterValue previous_master_fx1_prm_3; 662 | AudioUnitParameterValue previous_master_fx1_prm_4; 663 | AudioUnitParameterValue previous_master_fx2_dry_wet; 664 | AudioUnitParameterValue previous_master_fx2_prm_2; 665 | AudioUnitParameterValue previous_master_fx2_prm_3; 666 | AudioUnitParameterValue previous_master_fx2_prm_4; 667 | AudioUnitParameterValue previous_filter1_out_gain; 668 | AudioUnitParameterValue previous_filter2_out_gain; 669 | AudioUnitParameterValue previous_filter_1_2_crossfade; 670 | AudioUnitParameterValue previous_bypass_gain; 671 | AudioUnitParameterValue previous_pan_fltr_path_; 672 | AudioUnitParameterValue previous_master_volume; 673 | AudioUnitParameterValue previous_modulator5_rate; 674 | AudioUnitParameterValue previous_modulator6_rate; 675 | AudioUnitParameterValue previous_modulator7_rate; 676 | AudioUnitParameterValue previous_modulator8_rate; 677 | AudioUnitParameterValue previous_modulator5_amp; 678 | AudioUnitParameterValue previous_modulator6_amp; 679 | AudioUnitParameterValue previous_modulator7_amp; 680 | AudioUnitParameterValue previous_modulator8_amp; 681 | AudioUnitParameterValue previous_modulator5_crossf_glide; 682 | AudioUnitParameterValue previous_modulator6_crossf_glide; 683 | AudioUnitParameterValue previous_modulator7_crossf_glide; 684 | AudioUnitParameterValue previous_modulator8_crossf_glide; 685 | AudioUnitParameterValue previous_modulator5_ind_lev; 686 | AudioUnitParameterValue previous_modulator6_ind_lev; 687 | AudioUnitParameterValue previous_modulator7_ind_lev; 688 | AudioUnitParameterValue previous_modulator8_ind_lev; 689 | AudioUnitParameterValue previous_modulator15_sync_on; 690 | AudioUnitParameterValue previous_modulator26_sync_on; 691 | AudioUnitParameterValue previous_modulator37_sync_on; 692 | AudioUnitParameterValue previous_modulator48_sync_on; 693 | AudioUnitParameterValue previous_modulator5_restart_on; 694 | AudioUnitParameterValue previous_modulator6_restart_on; 695 | AudioUnitParameterValue previous_modulator7_restart_on; 696 | AudioUnitParameterValue previous_modulator8_restart_on; 697 | AudioUnitParameterValue previous_envelope1_velocity; 698 | AudioUnitParameterValue previous_envelope2_velocity; 699 | AudioUnitParameterValue previous_envelope3_velocity; 700 | AudioUnitParameterValue previous_envelope4_velocity; 701 | AudioUnitParameterValue previous_envelope1_keytracking; 702 | AudioUnitParameterValue previous_envelope2_keytracking; 703 | AudioUnitParameterValue previous_envelope3_keytracking; 704 | AudioUnitParameterValue previous_envelope4_keytracking; 705 | AudioUnitParameterValue previous_envelope1_delay; 706 | AudioUnitParameterValue previous_envelope2_delay; 707 | AudioUnitParameterValue previous_envelope3_delay; 708 | AudioUnitParameterValue previous_envelope4_delay; 709 | AudioUnitParameterValue previous_envelope1_att_tme; 710 | AudioUnitParameterValue previous_envelope2_att_tme; 711 | AudioUnitParameterValue previous_envelope3_att_tme; 712 | AudioUnitParameterValue previous_envelope4_att_tme; 713 | AudioUnitParameterValue previous_envelope1_att_lev; 714 | AudioUnitParameterValue previous_envelope2_att_lev; 715 | AudioUnitParameterValue previous_envelope3_att_lev; 716 | AudioUnitParameterValue previous_envelope4_att_lev; 717 | AudioUnitParameterValue previous_envelope1_dec_tme; 718 | AudioUnitParameterValue previous_envelope2_dec_tme; 719 | AudioUnitParameterValue previous_envelope3_dec_tme; 720 | AudioUnitParameterValue previous_envelope4_dec_tme; 721 | AudioUnitParameterValue previous_envelope1_dec_lev; 722 | AudioUnitParameterValue previous_envelope2_dec_lev; 723 | AudioUnitParameterValue previous_envelope3_dec_lev; 724 | AudioUnitParameterValue previous_envelope4_dec_lev; 725 | AudioUnitParameterValue previous_envelope1_sust_tme; 726 | AudioUnitParameterValue previous_envelope2_sust_tme; 727 | AudioUnitParameterValue previous_envelope3_sust_tme; 728 | AudioUnitParameterValue previous_envelope4_sust_tme; 729 | AudioUnitParameterValue previous_envelope1_sust_lev; 730 | AudioUnitParameterValue previous_envelope2_sust_lev; 731 | AudioUnitParameterValue previous_envelope3_sust_lev; 732 | AudioUnitParameterValue previous_envelope4_sust_lev; 733 | AudioUnitParameterValue previous_envelope1_loop_morph; 734 | AudioUnitParameterValue previous_envelope2_loop_morph; 735 | AudioUnitParameterValue previous_envelope3_loop_morph; 736 | AudioUnitParameterValue previous_envelope4_loop_morph; 737 | AudioUnitParameterValue previous_envelope1_rel_tme; 738 | AudioUnitParameterValue previous_envelope2_rel_tme; 739 | AudioUnitParameterValue previous_envelope3_rel_tme; 740 | AudioUnitParameterValue previous_envelope4_rel_tme; 741 | AudioUnitParameterValue previous_glide_time; 742 | AudioUnitParameterValue previous_vibrato_rate; 743 | AudioUnitParameterValue previous_vibrato_depth; 744 | AudioUnitParameterValue previous_uni_pitch_crossfade; 745 | AudioUnitParameterValue previous_uni_wt_pos_crossfade; 746 | AudioUnitParameterValue previous_uni_pan_crossfade; 747 | AudioUnitParameterValue previous_eq_loshelf_boost; 748 | AudioUnitParameterValue previous_eq_peak_boost; 749 | AudioUnitParameterValue previous_eq_peak_freq; 750 | AudioUnitParameterValue previous_eq_hishelf_boost; 751 | AudioUnitParameterValue previous_env_hold_reset; 752 | AudioUnitParameterValue previous_modulator5_num; 753 | AudioUnitParameterValue previous_modulator6_num; 754 | AudioUnitParameterValue previous_modulator7_num; 755 | AudioUnitParameterValue previous_modulator8_num; 756 | AudioUnitParameterValue previous_modulator5_den; 757 | AudioUnitParameterValue previous_modulator6_den; 758 | AudioUnitParameterValue previous_modulator7_den; 759 | AudioUnitParameterValue previous_modulator8_den; 760 | AudioUnitParameterValue previous_modulator5_sncpos_on; 761 | AudioUnitParameterValue previous_modulator6_sncpos_on; 762 | AudioUnitParameterValue previous_modulator7_sncpos_on; 763 | AudioUnitParameterValue previous_modulator8_sncpos_on; 764 | 765 | void setup(string _unitName) { 766 | aumManagedAudioUnit::setup(_unitName, 'aumu', 'NiMa', '-NI-', "aumUnit_Massive"); 767 | } 768 | 769 | void doPrintChanges() { 770 | compareAndPrint("macro_1", previous_macro_1, get(macro_1)); 771 | compareAndPrint("macro_2", previous_macro_2, get(macro_2)); 772 | compareAndPrint("macro_3", previous_macro_3, get(macro_3)); 773 | compareAndPrint("macro_4", previous_macro_4, get(macro_4)); 774 | compareAndPrint("macro_5", previous_macro_5, get(macro_5)); 775 | compareAndPrint("macro_6", previous_macro_6, get(macro_6)); 776 | compareAndPrint("macro_7", previous_macro_7, get(macro_7)); 777 | compareAndPrint("macro_8", previous_macro_8, get(macro_8)); 778 | compareAndPrint("osc1_pitch", previous_osc1_pitch, get(osc1_pitch)); 779 | compareAndPrint("osc1_position", previous_osc1_position, get(osc1_position)); 780 | compareAndPrint("osc1_param2", previous_osc1_param2, get(osc1_param2)); 781 | compareAndPrint("osc1_amp", previous_osc1_amp, get(osc1_amp)); 782 | compareAndPrint("osc1_flt_routing", previous_osc1_flt_routing, get(osc1_flt_routing)); 783 | compareAndPrint("osc2_pitch", previous_osc2_pitch, get(osc2_pitch)); 784 | compareAndPrint("osc2_position", previous_osc2_position, get(osc2_position)); 785 | compareAndPrint("osc2_param2", previous_osc2_param2, get(osc2_param2)); 786 | compareAndPrint("osc2_amp", previous_osc2_amp, get(osc2_amp)); 787 | compareAndPrint("osc2_flt_routing", previous_osc2_flt_routing, get(osc2_flt_routing)); 788 | compareAndPrint("osc3_pitch", previous_osc3_pitch, get(osc3_pitch)); 789 | compareAndPrint("osc3_position", previous_osc3_position, get(osc3_position)); 790 | compareAndPrint("osc3_param2", previous_osc3_param2, get(osc3_param2)); 791 | compareAndPrint("osc3_amp", previous_osc3_amp, get(osc3_amp)); 792 | compareAndPrint("osc3_flt_routing", previous_osc3_flt_routing, get(osc3_flt_routing)); 793 | compareAndPrint("noise_color", previous_noise_color, get(noise_color)); 794 | compareAndPrint("noise_amp", previous_noise_amp, get(noise_amp)); 795 | compareAndPrint("noise_fltr_routing", previous_noise_fltr_routing, get(noise_fltr_routing)); 796 | compareAndPrint("feedback_amp", previous_feedback_amp, get(feedback_amp)); 797 | compareAndPrint("feedback_flt_routing", previous_feedback_flt_routing, get(feedback_flt_routing)); 798 | compareAndPrint("mod_osc_pitch", previous_mod_osc_pitch, get(mod_osc_pitch)); 799 | compareAndPrint("mod_osc_rngmod", previous_mod_osc_rngmod, get(mod_osc_rngmod)); 800 | compareAndPrint("mod_osc_phase", previous_mod_osc_phase, get(mod_osc_phase)); 801 | compareAndPrint("mod_osc_position", previous_mod_osc_position, get(mod_osc_position)); 802 | compareAndPrint("mod_osc_fltr_fm", previous_mod_osc_fltr_fm, get(mod_osc_fltr_fm)); 803 | compareAndPrint("filter1_cut_prm_1", previous_filter1_cut_prm_1, get(filter1_cut_prm_1)); 804 | compareAndPrint("filter1_bw_prm_2", previous_filter1_bw_prm_2, get(filter1_bw_prm_2)); 805 | compareAndPrint("filter1_res_prm_3", previous_filter1_res_prm_3, get(filter1_res_prm_3)); 806 | compareAndPrint("filter2_cut_prm_1", previous_filter2_cut_prm_1, get(filter2_cut_prm_1)); 807 | compareAndPrint("filter2_bw_prm_2", previous_filter2_bw_prm_2, get(filter2_bw_prm_2)); 808 | compareAndPrint("filter2_res_prm_3", previous_filter2_res_prm_3, get(filter2_res_prm_3)); 809 | compareAndPrint("seriell_parallel", previous_seriell_parallel, get(seriell_parallel)); 810 | compareAndPrint("insert1_dw_prm_1", previous_insert1_dw_prm_1, get(insert1_dw_prm_1)); 811 | compareAndPrint("insert1_prm_2", previous_insert1_prm_2, get(insert1_prm_2)); 812 | compareAndPrint("insert2_dw_prm_1", previous_insert2_dw_prm_1, get(insert2_dw_prm_1)); 813 | compareAndPrint("insert2_prm_2", previous_insert2_prm_2, get(insert2_prm_2)); 814 | compareAndPrint("master_fx1_dry_wet", previous_master_fx1_dry_wet, get(master_fx1_dry_wet)); 815 | compareAndPrint("master_fx1_prm_2", previous_master_fx1_prm_2, get(master_fx1_prm_2)); 816 | compareAndPrint("master_fx1_prm_3", previous_master_fx1_prm_3, get(master_fx1_prm_3)); 817 | compareAndPrint("master_fx1_prm_4", previous_master_fx1_prm_4, get(master_fx1_prm_4)); 818 | compareAndPrint("master_fx2_dry_wet", previous_master_fx2_dry_wet, get(master_fx2_dry_wet)); 819 | compareAndPrint("master_fx2_prm_2", previous_master_fx2_prm_2, get(master_fx2_prm_2)); 820 | compareAndPrint("master_fx2_prm_3", previous_master_fx2_prm_3, get(master_fx2_prm_3)); 821 | compareAndPrint("master_fx2_prm_4", previous_master_fx2_prm_4, get(master_fx2_prm_4)); 822 | compareAndPrint("filter1_out_gain", previous_filter1_out_gain, get(filter1_out_gain)); 823 | compareAndPrint("filter2_out_gain", previous_filter2_out_gain, get(filter2_out_gain)); 824 | compareAndPrint("filter_1_2_crossfade", previous_filter_1_2_crossfade, get(filter_1_2_crossfade)); 825 | compareAndPrint("bypass_gain", previous_bypass_gain, get(bypass_gain)); 826 | compareAndPrint("pan_fltr_path_", previous_pan_fltr_path_, get(pan_fltr_path_)); 827 | compareAndPrint("master_volume", previous_master_volume, get(master_volume)); 828 | compareAndPrint("modulator5_rate", previous_modulator5_rate, get(modulator5_rate)); 829 | compareAndPrint("modulator6_rate", previous_modulator6_rate, get(modulator6_rate)); 830 | compareAndPrint("modulator7_rate", previous_modulator7_rate, get(modulator7_rate)); 831 | compareAndPrint("modulator8_rate", previous_modulator8_rate, get(modulator8_rate)); 832 | compareAndPrint("modulator5_amp", previous_modulator5_amp, get(modulator5_amp)); 833 | compareAndPrint("modulator6_amp", previous_modulator6_amp, get(modulator6_amp)); 834 | compareAndPrint("modulator7_amp", previous_modulator7_amp, get(modulator7_amp)); 835 | compareAndPrint("modulator8_amp", previous_modulator8_amp, get(modulator8_amp)); 836 | compareAndPrint("modulator5_crossf_glide", previous_modulator5_crossf_glide, get(modulator5_crossf_glide)); 837 | compareAndPrint("modulator6_crossf_glide", previous_modulator6_crossf_glide, get(modulator6_crossf_glide)); 838 | compareAndPrint("modulator7_crossf_glide", previous_modulator7_crossf_glide, get(modulator7_crossf_glide)); 839 | compareAndPrint("modulator8_crossf_glide", previous_modulator8_crossf_glide, get(modulator8_crossf_glide)); 840 | compareAndPrint("modulator5_ind_lev", previous_modulator5_ind_lev, get(modulator5_ind_lev)); 841 | compareAndPrint("modulator6_ind_lev", previous_modulator6_ind_lev, get(modulator6_ind_lev)); 842 | compareAndPrint("modulator7_ind_lev", previous_modulator7_ind_lev, get(modulator7_ind_lev)); 843 | compareAndPrint("modulator8_ind_lev", previous_modulator8_ind_lev, get(modulator8_ind_lev)); 844 | compareAndPrint("modulator15_sync_on", previous_modulator15_sync_on, get(modulator15_sync_on)); 845 | compareAndPrint("modulator26_sync_on", previous_modulator26_sync_on, get(modulator26_sync_on)); 846 | compareAndPrint("modulator37_sync_on", previous_modulator37_sync_on, get(modulator37_sync_on)); 847 | compareAndPrint("modulator48_sync_on", previous_modulator48_sync_on, get(modulator48_sync_on)); 848 | compareAndPrint("modulator5_restart_on", previous_modulator5_restart_on, get(modulator5_restart_on)); 849 | compareAndPrint("modulator6_restart_on", previous_modulator6_restart_on, get(modulator6_restart_on)); 850 | compareAndPrint("modulator7_restart_on", previous_modulator7_restart_on, get(modulator7_restart_on)); 851 | compareAndPrint("modulator8_restart_on", previous_modulator8_restart_on, get(modulator8_restart_on)); 852 | compareAndPrint("envelope1_velocity", previous_envelope1_velocity, get(envelope1_velocity)); 853 | compareAndPrint("envelope2_velocity", previous_envelope2_velocity, get(envelope2_velocity)); 854 | compareAndPrint("envelope3_velocity", previous_envelope3_velocity, get(envelope3_velocity)); 855 | compareAndPrint("envelope4_velocity", previous_envelope4_velocity, get(envelope4_velocity)); 856 | compareAndPrint("envelope1_keytracking", previous_envelope1_keytracking, get(envelope1_keytracking)); 857 | compareAndPrint("envelope2_keytracking", previous_envelope2_keytracking, get(envelope2_keytracking)); 858 | compareAndPrint("envelope3_keytracking", previous_envelope3_keytracking, get(envelope3_keytracking)); 859 | compareAndPrint("envelope4_keytracking", previous_envelope4_keytracking, get(envelope4_keytracking)); 860 | compareAndPrint("envelope1_delay", previous_envelope1_delay, get(envelope1_delay)); 861 | compareAndPrint("envelope2_delay", previous_envelope2_delay, get(envelope2_delay)); 862 | compareAndPrint("envelope3_delay", previous_envelope3_delay, get(envelope3_delay)); 863 | compareAndPrint("envelope4_delay", previous_envelope4_delay, get(envelope4_delay)); 864 | compareAndPrint("envelope1_att_tme", previous_envelope1_att_tme, get(envelope1_att_tme)); 865 | compareAndPrint("envelope2_att_tme", previous_envelope2_att_tme, get(envelope2_att_tme)); 866 | compareAndPrint("envelope3_att_tme", previous_envelope3_att_tme, get(envelope3_att_tme)); 867 | compareAndPrint("envelope4_att_tme", previous_envelope4_att_tme, get(envelope4_att_tme)); 868 | compareAndPrint("envelope1_att_lev", previous_envelope1_att_lev, get(envelope1_att_lev)); 869 | compareAndPrint("envelope2_att_lev", previous_envelope2_att_lev, get(envelope2_att_lev)); 870 | compareAndPrint("envelope3_att_lev", previous_envelope3_att_lev, get(envelope3_att_lev)); 871 | compareAndPrint("envelope4_att_lev", previous_envelope4_att_lev, get(envelope4_att_lev)); 872 | compareAndPrint("envelope1_dec_tme", previous_envelope1_dec_tme, get(envelope1_dec_tme)); 873 | compareAndPrint("envelope2_dec_tme", previous_envelope2_dec_tme, get(envelope2_dec_tme)); 874 | compareAndPrint("envelope3_dec_tme", previous_envelope3_dec_tme, get(envelope3_dec_tme)); 875 | compareAndPrint("envelope4_dec_tme", previous_envelope4_dec_tme, get(envelope4_dec_tme)); 876 | compareAndPrint("envelope1_dec_lev", previous_envelope1_dec_lev, get(envelope1_dec_lev)); 877 | compareAndPrint("envelope2_dec_lev", previous_envelope2_dec_lev, get(envelope2_dec_lev)); 878 | compareAndPrint("envelope3_dec_lev", previous_envelope3_dec_lev, get(envelope3_dec_lev)); 879 | compareAndPrint("envelope4_dec_lev", previous_envelope4_dec_lev, get(envelope4_dec_lev)); 880 | compareAndPrint("envelope1_sust_tme", previous_envelope1_sust_tme, get(envelope1_sust_tme)); 881 | compareAndPrint("envelope2_sust_tme", previous_envelope2_sust_tme, get(envelope2_sust_tme)); 882 | compareAndPrint("envelope3_sust_tme", previous_envelope3_sust_tme, get(envelope3_sust_tme)); 883 | compareAndPrint("envelope4_sust_tme", previous_envelope4_sust_tme, get(envelope4_sust_tme)); 884 | compareAndPrint("envelope1_sust_lev", previous_envelope1_sust_lev, get(envelope1_sust_lev)); 885 | compareAndPrint("envelope2_sust_lev", previous_envelope2_sust_lev, get(envelope2_sust_lev)); 886 | compareAndPrint("envelope3_sust_lev", previous_envelope3_sust_lev, get(envelope3_sust_lev)); 887 | compareAndPrint("envelope4_sust_lev", previous_envelope4_sust_lev, get(envelope4_sust_lev)); 888 | compareAndPrint("envelope1_loop_morph", previous_envelope1_loop_morph, get(envelope1_loop_morph)); 889 | compareAndPrint("envelope2_loop_morph", previous_envelope2_loop_morph, get(envelope2_loop_morph)); 890 | compareAndPrint("envelope3_loop_morph", previous_envelope3_loop_morph, get(envelope3_loop_morph)); 891 | compareAndPrint("envelope4_loop_morph", previous_envelope4_loop_morph, get(envelope4_loop_morph)); 892 | compareAndPrint("envelope1_rel_tme", previous_envelope1_rel_tme, get(envelope1_rel_tme)); 893 | compareAndPrint("envelope2_rel_tme", previous_envelope2_rel_tme, get(envelope2_rel_tme)); 894 | compareAndPrint("envelope3_rel_tme", previous_envelope3_rel_tme, get(envelope3_rel_tme)); 895 | compareAndPrint("envelope4_rel_tme", previous_envelope4_rel_tme, get(envelope4_rel_tme)); 896 | compareAndPrint("glide_time", previous_glide_time, get(glide_time)); 897 | compareAndPrint("vibrato_rate", previous_vibrato_rate, get(vibrato_rate)); 898 | compareAndPrint("vibrato_depth", previous_vibrato_depth, get(vibrato_depth)); 899 | compareAndPrint("uni_pitch_crossfade", previous_uni_pitch_crossfade, get(uni_pitch_crossfade)); 900 | compareAndPrint("uni_wt_pos_crossfade", previous_uni_wt_pos_crossfade, get(uni_wt_pos_crossfade)); 901 | compareAndPrint("uni_pan_crossfade", previous_uni_pan_crossfade, get(uni_pan_crossfade)); 902 | compareAndPrint("eq_loshelf_boost", previous_eq_loshelf_boost, get(eq_loshelf_boost)); 903 | compareAndPrint("eq_peak_boost", previous_eq_peak_boost, get(eq_peak_boost)); 904 | compareAndPrint("eq_peak_freq", previous_eq_peak_freq, get(eq_peak_freq)); 905 | compareAndPrint("eq_hishelf_boost", previous_eq_hishelf_boost, get(eq_hishelf_boost)); 906 | compareAndPrint("env_hold_reset", previous_env_hold_reset, get(env_hold_reset)); 907 | compareAndPrint("modulator5_num", previous_modulator5_num, get(modulator5_num)); 908 | compareAndPrint("modulator6_num", previous_modulator6_num, get(modulator6_num)); 909 | compareAndPrint("modulator7_num", previous_modulator7_num, get(modulator7_num)); 910 | compareAndPrint("modulator8_num", previous_modulator8_num, get(modulator8_num)); 911 | compareAndPrint("modulator5_den", previous_modulator5_den, get(modulator5_den)); 912 | compareAndPrint("modulator6_den", previous_modulator6_den, get(modulator6_den)); 913 | compareAndPrint("modulator7_den", previous_modulator7_den, get(modulator7_den)); 914 | compareAndPrint("modulator8_den", previous_modulator8_den, get(modulator8_den)); 915 | compareAndPrint("modulator5_sncpos_on", previous_modulator5_sncpos_on, get(modulator5_sncpos_on)); 916 | compareAndPrint("modulator6_sncpos_on", previous_modulator6_sncpos_on, get(modulator6_sncpos_on)); 917 | compareAndPrint("modulator7_sncpos_on", previous_modulator7_sncpos_on, get(modulator7_sncpos_on)); 918 | compareAndPrint("modulator8_sncpos_on", previous_modulator8_sncpos_on, get(modulator8_sncpos_on)); 919 | } 920 | 921 | void doRecordParams() { 922 | previous_macro_1 = get(macro_1); 923 | previous_macro_2 = get(macro_2); 924 | previous_macro_3 = get(macro_3); 925 | previous_macro_4 = get(macro_4); 926 | previous_macro_5 = get(macro_5); 927 | previous_macro_6 = get(macro_6); 928 | previous_macro_7 = get(macro_7); 929 | previous_macro_8 = get(macro_8); 930 | previous_osc1_pitch = get(osc1_pitch); 931 | previous_osc1_position = get(osc1_position); 932 | previous_osc1_param2 = get(osc1_param2); 933 | previous_osc1_amp = get(osc1_amp); 934 | previous_osc1_flt_routing = get(osc1_flt_routing); 935 | previous_osc2_pitch = get(osc2_pitch); 936 | previous_osc2_position = get(osc2_position); 937 | previous_osc2_param2 = get(osc2_param2); 938 | previous_osc2_amp = get(osc2_amp); 939 | previous_osc2_flt_routing = get(osc2_flt_routing); 940 | previous_osc3_pitch = get(osc3_pitch); 941 | previous_osc3_position = get(osc3_position); 942 | previous_osc3_param2 = get(osc3_param2); 943 | previous_osc3_amp = get(osc3_amp); 944 | previous_osc3_flt_routing = get(osc3_flt_routing); 945 | previous_noise_color = get(noise_color); 946 | previous_noise_amp = get(noise_amp); 947 | previous_noise_fltr_routing = get(noise_fltr_routing); 948 | previous_feedback_amp = get(feedback_amp); 949 | previous_feedback_flt_routing = get(feedback_flt_routing); 950 | previous_mod_osc_pitch = get(mod_osc_pitch); 951 | previous_mod_osc_rngmod = get(mod_osc_rngmod); 952 | previous_mod_osc_phase = get(mod_osc_phase); 953 | previous_mod_osc_position = get(mod_osc_position); 954 | previous_mod_osc_fltr_fm = get(mod_osc_fltr_fm); 955 | previous_filter1_cut_prm_1 = get(filter1_cut_prm_1); 956 | previous_filter1_bw_prm_2 = get(filter1_bw_prm_2); 957 | previous_filter1_res_prm_3 = get(filter1_res_prm_3); 958 | previous_filter2_cut_prm_1 = get(filter2_cut_prm_1); 959 | previous_filter2_bw_prm_2 = get(filter2_bw_prm_2); 960 | previous_filter2_res_prm_3 = get(filter2_res_prm_3); 961 | previous_seriell_parallel = get(seriell_parallel); 962 | previous_insert1_dw_prm_1 = get(insert1_dw_prm_1); 963 | previous_insert1_prm_2 = get(insert1_prm_2); 964 | previous_insert2_dw_prm_1 = get(insert2_dw_prm_1); 965 | previous_insert2_prm_2 = get(insert2_prm_2); 966 | previous_master_fx1_dry_wet = get(master_fx1_dry_wet); 967 | previous_master_fx1_prm_2 = get(master_fx1_prm_2); 968 | previous_master_fx1_prm_3 = get(master_fx1_prm_3); 969 | previous_master_fx1_prm_4 = get(master_fx1_prm_4); 970 | previous_master_fx2_dry_wet = get(master_fx2_dry_wet); 971 | previous_master_fx2_prm_2 = get(master_fx2_prm_2); 972 | previous_master_fx2_prm_3 = get(master_fx2_prm_3); 973 | previous_master_fx2_prm_4 = get(master_fx2_prm_4); 974 | previous_filter1_out_gain = get(filter1_out_gain); 975 | previous_filter2_out_gain = get(filter2_out_gain); 976 | previous_filter_1_2_crossfade = get(filter_1_2_crossfade); 977 | previous_bypass_gain = get(bypass_gain); 978 | previous_pan_fltr_path_ = get(pan_fltr_path_); 979 | previous_master_volume = get(master_volume); 980 | previous_modulator5_rate = get(modulator5_rate); 981 | previous_modulator6_rate = get(modulator6_rate); 982 | previous_modulator7_rate = get(modulator7_rate); 983 | previous_modulator8_rate = get(modulator8_rate); 984 | previous_modulator5_amp = get(modulator5_amp); 985 | previous_modulator6_amp = get(modulator6_amp); 986 | previous_modulator7_amp = get(modulator7_amp); 987 | previous_modulator8_amp = get(modulator8_amp); 988 | previous_modulator5_crossf_glide = get(modulator5_crossf_glide); 989 | previous_modulator6_crossf_glide = get(modulator6_crossf_glide); 990 | previous_modulator7_crossf_glide = get(modulator7_crossf_glide); 991 | previous_modulator8_crossf_glide = get(modulator8_crossf_glide); 992 | previous_modulator5_ind_lev = get(modulator5_ind_lev); 993 | previous_modulator6_ind_lev = get(modulator6_ind_lev); 994 | previous_modulator7_ind_lev = get(modulator7_ind_lev); 995 | previous_modulator8_ind_lev = get(modulator8_ind_lev); 996 | previous_modulator15_sync_on = get(modulator15_sync_on); 997 | previous_modulator26_sync_on = get(modulator26_sync_on); 998 | previous_modulator37_sync_on = get(modulator37_sync_on); 999 | previous_modulator48_sync_on = get(modulator48_sync_on); 1000 | previous_modulator5_restart_on = get(modulator5_restart_on); 1001 | previous_modulator6_restart_on = get(modulator6_restart_on); 1002 | previous_modulator7_restart_on = get(modulator7_restart_on); 1003 | previous_modulator8_restart_on = get(modulator8_restart_on); 1004 | previous_envelope1_velocity = get(envelope1_velocity); 1005 | previous_envelope2_velocity = get(envelope2_velocity); 1006 | previous_envelope3_velocity = get(envelope3_velocity); 1007 | previous_envelope4_velocity = get(envelope4_velocity); 1008 | previous_envelope1_keytracking = get(envelope1_keytracking); 1009 | previous_envelope2_keytracking = get(envelope2_keytracking); 1010 | previous_envelope3_keytracking = get(envelope3_keytracking); 1011 | previous_envelope4_keytracking = get(envelope4_keytracking); 1012 | previous_envelope1_delay = get(envelope1_delay); 1013 | previous_envelope2_delay = get(envelope2_delay); 1014 | previous_envelope3_delay = get(envelope3_delay); 1015 | previous_envelope4_delay = get(envelope4_delay); 1016 | previous_envelope1_att_tme = get(envelope1_att_tme); 1017 | previous_envelope2_att_tme = get(envelope2_att_tme); 1018 | previous_envelope3_att_tme = get(envelope3_att_tme); 1019 | previous_envelope4_att_tme = get(envelope4_att_tme); 1020 | previous_envelope1_att_lev = get(envelope1_att_lev); 1021 | previous_envelope2_att_lev = get(envelope2_att_lev); 1022 | previous_envelope3_att_lev = get(envelope3_att_lev); 1023 | previous_envelope4_att_lev = get(envelope4_att_lev); 1024 | previous_envelope1_dec_tme = get(envelope1_dec_tme); 1025 | previous_envelope2_dec_tme = get(envelope2_dec_tme); 1026 | previous_envelope3_dec_tme = get(envelope3_dec_tme); 1027 | previous_envelope4_dec_tme = get(envelope4_dec_tme); 1028 | previous_envelope1_dec_lev = get(envelope1_dec_lev); 1029 | previous_envelope2_dec_lev = get(envelope2_dec_lev); 1030 | previous_envelope3_dec_lev = get(envelope3_dec_lev); 1031 | previous_envelope4_dec_lev = get(envelope4_dec_lev); 1032 | previous_envelope1_sust_tme = get(envelope1_sust_tme); 1033 | previous_envelope2_sust_tme = get(envelope2_sust_tme); 1034 | previous_envelope3_sust_tme = get(envelope3_sust_tme); 1035 | previous_envelope4_sust_tme = get(envelope4_sust_tme); 1036 | previous_envelope1_sust_lev = get(envelope1_sust_lev); 1037 | previous_envelope2_sust_lev = get(envelope2_sust_lev); 1038 | previous_envelope3_sust_lev = get(envelope3_sust_lev); 1039 | previous_envelope4_sust_lev = get(envelope4_sust_lev); 1040 | previous_envelope1_loop_morph = get(envelope1_loop_morph); 1041 | previous_envelope2_loop_morph = get(envelope2_loop_morph); 1042 | previous_envelope3_loop_morph = get(envelope3_loop_morph); 1043 | previous_envelope4_loop_morph = get(envelope4_loop_morph); 1044 | previous_envelope1_rel_tme = get(envelope1_rel_tme); 1045 | previous_envelope2_rel_tme = get(envelope2_rel_tme); 1046 | previous_envelope3_rel_tme = get(envelope3_rel_tme); 1047 | previous_envelope4_rel_tme = get(envelope4_rel_tme); 1048 | previous_glide_time = get(glide_time); 1049 | previous_vibrato_rate = get(vibrato_rate); 1050 | previous_vibrato_depth = get(vibrato_depth); 1051 | previous_uni_pitch_crossfade = get(uni_pitch_crossfade); 1052 | previous_uni_wt_pos_crossfade = get(uni_wt_pos_crossfade); 1053 | previous_uni_pan_crossfade = get(uni_pan_crossfade); 1054 | previous_eq_loshelf_boost = get(eq_loshelf_boost); 1055 | previous_eq_peak_boost = get(eq_peak_boost); 1056 | previous_eq_peak_freq = get(eq_peak_freq); 1057 | previous_eq_hishelf_boost = get(eq_hishelf_boost); 1058 | previous_env_hold_reset = get(env_hold_reset); 1059 | previous_modulator5_num = get(modulator5_num); 1060 | previous_modulator6_num = get(modulator6_num); 1061 | previous_modulator7_num = get(modulator7_num); 1062 | previous_modulator8_num = get(modulator8_num); 1063 | previous_modulator5_den = get(modulator5_den); 1064 | previous_modulator6_den = get(modulator6_den); 1065 | previous_modulator7_den = get(modulator7_den); 1066 | previous_modulator8_den = get(modulator8_den); 1067 | previous_modulator5_sncpos_on = get(modulator5_sncpos_on); 1068 | previous_modulator6_sncpos_on = get(modulator6_sncpos_on); 1069 | previous_modulator7_sncpos_on = get(modulator7_sncpos_on); 1070 | previous_modulator8_sncpos_on = get(modulator8_sncpos_on); 1071 | } 1072 | }; --------------------------------------------------------------------------------