├── .gitignore ├── Controls.cpp ├── Controls.h ├── Evaluator-aax.vcxproj ├── Evaluator-aax.vcxproj.filters ├── Evaluator-app.cbp ├── Evaluator-app.cbp.rc ├── Evaluator-app.vcxproj ├── Evaluator-app.vcxproj.filters ├── Evaluator-rtas.def ├── Evaluator-rtas.vcxproj ├── Evaluator-rtas.vcxproj.filters ├── Evaluator-vst2.vcxproj ├── Evaluator-vst2.vcxproj.filters ├── Evaluator-vst3.vcxproj ├── Evaluator-vst3.vcxproj.filters ├── Evaluator.cbp ├── Evaluator.cpp ├── Evaluator.exp ├── Evaluator.h ├── Evaluator.props ├── Evaluator.rc ├── Evaluator.sln ├── Evaluator.xcconfig ├── Evaluator.xcodeproj ├── default.pbxuser ├── project.pbxproj └── xcshareddata │ └── xcschemes │ ├── APP.xcscheme │ ├── AU.xcscheme │ ├── All.xcscheme │ ├── VST2.xcscheme │ └── VST3.xcscheme ├── Interface.cpp ├── Interface.h ├── KnobLineCoronaControl.cpp ├── KnobLineCoronaControl.h ├── LICENSE.txt ├── Params.h ├── Presets.cpp ├── Presets.h ├── Program.cpp ├── Program.h ├── README.md ├── app_wrapper ├── app_dialog.cpp ├── app_main.cpp ├── app_main.h ├── app_resource.h └── main.mm ├── expression_test ├── main.cpp └── win │ ├── ReadMe.txt │ ├── expression_test.cpp │ ├── expression_test.vcxproj │ ├── expression_test.vcxproj.filters │ ├── stdafx.cpp │ ├── stdafx.h │ └── targetver.h ├── installer ├── Evaluator-installer-bg.png ├── Evaluator.iss ├── Evaluator.pkgproj ├── changelog.txt ├── intro.rtf ├── license.rtf ├── readmeosx.rtf └── readmewin.rtf ├── interface ├── background.png ├── icon.pdn ├── icon.png ├── itch_icon.png ├── numberbox_arrow.pxm ├── numberbox_arrow_down.png ├── numberbox_arrow_up.png ├── numberbox_background.png ├── numberbox_background.pxm ├── vslider_background.png └── vslider_handle.png ├── makedist-mac.command ├── makedist-win.bat ├── manual ├── Evaluator_manual.odt ├── Evaluator_manual.pdf ├── audio-midi-setup.png ├── compile_error.png ├── interface.png ├── memory_sequence.png ├── presets.png ├── saw_wave.png ├── scope.png ├── syntax_reference.png └── watches.png ├── oink-oink-weird.png ├── reaper ├── dev_evaluator.RPP ├── dev_evaluator.RPP-bak ├── drum-break.wav ├── drum-break.wav.reapeaks ├── eval_tune.RPP └── eval_tune.RPP-bak ├── resource.h ├── resources ├── English.lproj │ ├── InfoPlist.strings │ └── MainMenu.xib ├── Evaluator-AU-Info.plist ├── Evaluator-OSXAPP-Info.plist ├── Evaluator-Pages.xml ├── Evaluator-VST2-Info.plist ├── Evaluator-VST3-Info.plist ├── Evaluator.entitlements ├── Evaluator.icns ├── Evaluator.ico └── img │ ├── background.png │ ├── button_background.png │ ├── numberbox_arrow_down.png │ ├── numberbox_arrow_up.png │ ├── numberbox_background.png │ ├── radio_button.png │ ├── vslider_background.png │ └── vslider_handle.png ├── setfileicon.py ├── update_version.py ├── validate_audiounit.command └── version.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | 31 | # xcode project files 32 | xcuserdata/ 33 | 34 | # VS Garbage 35 | *.sdf 36 | *.opendb 37 | *.user 38 | win/.vs 39 | win/Win32 40 | *.aps 41 | *.suo 42 | *.ncb 43 | *.vcproj.* 44 | 45 | # wdl-ol recommends 46 | *.zip 47 | *.pkg 48 | *.dmg 49 | *.depend 50 | *.layout 51 | *.mode1v3 52 | *.db 53 | *.LSOverride 54 | *.xcworkspace 55 | *.xcuserdata 56 | *.xcschememanagement.plist 57 | build-* 58 | ipch/* 59 | gui/* 60 | 61 | Icon? 62 | .DS_Stor* 63 | -------------------------------------------------------------------------------- /Controls.h: -------------------------------------------------------------------------------- 1 | // 2 | // Controls.h 3 | // Evaluator 4 | // 5 | // Created by Damien Quartz on 10/23/17. 6 | // 7 | 8 | #pragma once 9 | 10 | #include "IControl.h" 11 | #include "KnobLineCoronaControl.h" 12 | #include "Params.h" 13 | #include 14 | 15 | class Interface; 16 | 17 | // originally cribbed from the IPlugEEL example 18 | class ITextEdit : public IControl 19 | { 20 | public: 21 | ITextEdit(IPlugBase* pPlug, IRECT pR, int paramIdx, IText* pText, const char* str, ETextEntryOptions textEntryOptions); 22 | ~ITextEdit(); 23 | 24 | // IControl overrides 25 | bool Draw(IGraphics* pGraphics) override; 26 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 27 | void TextFromTextEntry(const char* txt) override; 28 | 29 | // text accessss 30 | const char * GetText() const 31 | { 32 | return mStr.c_str(); 33 | } 34 | 35 | void SetTextFromPlug(const char * text) 36 | { 37 | mStr = text; 38 | } 39 | 40 | int GetTextLength() const 41 | { 42 | return mStr.size(); 43 | } 44 | 45 | protected: 46 | int mIdx; 47 | std::string mStr; 48 | }; 49 | 50 | class TextBox : public ICaptionControl 51 | { 52 | public: 53 | TextBox(IPlugBase* pPlug, IRECT pR, int paramIdx, IText* pText, IRECT textRect, bool showParamUnits = false); 54 | 55 | bool Draw(IGraphics* pGraphics) override; 56 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 57 | void OnMouseDrag(int x, int y, int dX, int dY, IMouseMod* pMod) override; 58 | void OnMouseWheel(int x, int y, IMouseMod* pMod, int d) override; 59 | 60 | private: 61 | bool mShowParamUnits; 62 | IRECT mTextRect; 63 | }; 64 | 65 | class TextTable : public IControl 66 | { 67 | public: 68 | TextTable(IPlugBase* pPlug, IRECT pR, IText* pText, const char** data, int iColumns, int iRows); 69 | 70 | bool Draw(IGraphics* pGraphics) override; 71 | 72 | private: 73 | const char** tableData; 74 | int columns; 75 | int rows; 76 | }; 77 | 78 | class ConsoleText : public IControl 79 | { 80 | public: 81 | ConsoleText(IPlugBase* plug, IRECT pR, IText* textStyle, const IColor* backgroundColor, int margin); 82 | 83 | bool Draw(IGraphics* pGraphics) override; 84 | void SetTextFromPlug(const char * text); 85 | 86 | private: 87 | IPanelControl mPanel; 88 | ITextControl mText; 89 | }; 90 | 91 | class EnumControl : public IControl 92 | { 93 | public: 94 | EnumControl(IPlugBase* pPlug, IRECT rect, int paramIdx, IText* textStyle); 95 | 96 | bool Draw(IGraphics* pGraphics) override; 97 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 98 | }; 99 | 100 | class ToggleControl : public IControl 101 | { 102 | public: 103 | ToggleControl(IPlugBase* pPlug, IRECT rect, int paramIdx, IColor backgroundColor, IColor fillColor); 104 | 105 | bool Draw(IGraphics* pGraphics) override; 106 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 107 | }; 108 | 109 | class Oscilloscope : public IControl 110 | { 111 | public: 112 | Oscilloscope(IPlugBase* pPlug, IRECT pR, const IColor* backgroundColor, const IColor* lineColorLeft, const IColor* lineColorRight); 113 | ~Oscilloscope(); 114 | 115 | bool Draw(IGraphics* pGraphics) override; 116 | 117 | void AddSample(double left, double right); 118 | 119 | private: 120 | 121 | void DrawWaveform(IGraphics* pGraphics); 122 | void DrawGrid(IGraphics* pGraphics); 123 | 124 | IColor mBackgroundColor; 125 | IColor mLineColorLeft; 126 | IColor mLineColorRight; 127 | 128 | double* mBuffer; 129 | int mBufferSize; 130 | int mBufferBegin; 131 | }; 132 | 133 | class LoadButton : public IBitmapControl 134 | { 135 | public: 136 | LoadButton(IPlugBase* pPlug, int x, int y, IBitmap* pButtonBack, IText* pButtonTextStyle, IRECT menuRect, IText* pMenuTextStyle, Interface* pInterface); 137 | 138 | bool Draw(IGraphics* pGraphics) override; 139 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 140 | void OnMouseOver(int x, int y, IMouseMod* pMod) override; 141 | 142 | private: 143 | 144 | enum 145 | { 146 | kClosed, 147 | kOpen, 148 | } 149 | mState; 150 | 151 | Interface* mInterface; 152 | IRECT mButtonRect; // where the button goes 153 | IRECT mTextRect; // where the text in the button goes 154 | IRECT mMenuRect; // where the menu goes 155 | // rects for all the selections in the menu 156 | WDL_TypedBuf mRECTs; 157 | IText mButtonText; 158 | IText mMenuText; 159 | int mSelection; 160 | }; 161 | 162 | class SaveButton : public IBitmapControl 163 | { 164 | public: 165 | SaveButton(IPlugBase* pPlug, int x, int y, IBitmap* pButtonBack, IText* pButtonTextStyle, Interface* pInterface); 166 | 167 | bool Draw(IGraphics* pGraphics) override; 168 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 169 | 170 | private: 171 | Interface* mInterface; 172 | IText mButtonText; 173 | IRECT mTextRect; 174 | }; 175 | 176 | class ManualButton : public IBitmapControl 177 | { 178 | public: 179 | ManualButton(IPlugBase* pPlug, int x, int y, IBitmap* pButtonBack, IText* pButtonTextStyle, Interface* pInterface); 180 | 181 | bool Draw(IGraphics* pGraphics) override; 182 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 183 | 184 | private: 185 | Interface* mInterface; 186 | IText mButtonText; 187 | IRECT mTextRect; 188 | }; 189 | 190 | class HelpButton : public IControl 191 | { 192 | public: 193 | HelpButton(IPlugBase* pPlug, IRECT rect, IText* pButtonTextStyle, Interface* pInterface); 194 | 195 | bool Draw(IGraphics* pGraphics) override; 196 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 197 | 198 | private: 199 | Interface* mInterface; 200 | IText mButtonText; 201 | IRECT mTextRect; 202 | }; 203 | 204 | // play, pause, and stop buttons used by the standalone to control how t increments 205 | // essentially makes TTAlways behave like TTProjectTime 206 | class TransportButtons : public IControl 207 | { 208 | public: 209 | // give the rect that the three buttons should occupy and we split it into three sections 210 | TransportButtons(IPlugBase* pPlug, IRECT rect, const IColor& backgroundColor, const IColor& foregroundColor); 211 | 212 | bool Draw(IGraphics* pGraphics) override; 213 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 214 | 215 | TransportState GetTransportState() const; 216 | 217 | private: 218 | 219 | void SetTransportState( TransportState state ); 220 | 221 | TransportState mState; 222 | 223 | IRECT mPlayRect; 224 | IRECT mPauseRect; 225 | IRECT mStopRect; 226 | IColor mBack; 227 | IColor mFore; 228 | }; 229 | 230 | // catch keyboard events and generate midi events from them. 231 | // not a great implementation due to input limitations of IPlug. 232 | class MidiControl : public IControl 233 | { 234 | public: 235 | MidiControl(IPlugBase* pPlug); 236 | 237 | bool Draw(IGraphics* pGraphics) override { return false; } 238 | bool OnKeyDown(int x, int y, int key) override; 239 | }; 240 | -------------------------------------------------------------------------------- /Evaluator-aax.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {ed0eb9dd-b586-4a3f-98af-ebd9c084fff2} 6 | 7 | 8 | {a484aa50-ad02-4746-957e-117c8bb5c192} 9 | 10 | 11 | {57d1624e-a679-47da-bd3e-9609f02fdd7b} 12 | 13 | 14 | 15 | 16 | IPlug 17 | 18 | 19 | IPlug 20 | 21 | 22 | IPlug 23 | 24 | 25 | IPlug 26 | 27 | 28 | IPlug 29 | 30 | 31 | IPlug 32 | 33 | 34 | IPlug 35 | 36 | 37 | IPlug 38 | 39 | 40 | IPlug 41 | 42 | 43 | IPlug 44 | 45 | 46 | IPlug\AAX 47 | 48 | 49 | IPlug\AAX 50 | 51 | 52 | IPlug\AAX 53 | 54 | 55 | 56 | Libs 57 | 58 | 59 | 60 | 61 | IPlug 62 | 63 | 64 | IPlug 65 | 66 | 67 | IPlug 68 | 69 | 70 | IPlug 71 | 72 | 73 | IPlug 74 | 75 | 76 | IPlug 77 | 78 | 79 | IPlug 80 | 81 | 82 | IPlug 83 | 84 | 85 | IPlug 86 | 87 | 88 | IPlug 89 | 90 | 91 | IPlug 92 | 93 | 94 | IPlug 95 | 96 | 97 | IPlug 98 | 99 | 100 | IPlug 101 | 102 | 103 | IPlug 104 | 105 | 106 | IPlug 107 | 108 | 109 | IPlug\AAX 110 | 111 | 112 | IPlug\AAX 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | Libs 123 | 124 | 125 | Libs 126 | 127 | 128 | Libs 129 | 130 | 131 | Libs 132 | 133 | 134 | -------------------------------------------------------------------------------- /Evaluator-app.cbp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 280 | 281 | -------------------------------------------------------------------------------- /Evaluator-app.cbp.rc: -------------------------------------------------------------------------------- 1 | #include "resource.h" 2 | 3 | KNOB_ID PNG KNOB_FN 4 | 5 | // copied from app_resource.h 6 | 7 | #ifndef IDC_STATIC 8 | #define IDC_STATIC (-1) 9 | #endif 10 | 11 | #define IDD_DIALOG_MAIN 40001 12 | #define IDD_DIALOG_PREF 40002 13 | #define IDI_ICON1 40003 14 | #define IDR_MENU1 40004 15 | 16 | #define ID_ABOUT 40005 17 | #define ID_PREFERENCES 40006 18 | #define ID_QUIT 40007 19 | 20 | #define IDC_COMBO_AUDIO_DRIVER 40008 21 | #define IDC_COMBO_AUDIO_IN_DEV 40009 22 | #define IDC_COMBO_AUDIO_OUT_DEV 40010 23 | #define IDC_COMBO_AUDIO_IOVS 40011 24 | #define IDC_COMBO_AUDIO_SIGVS 40012 25 | #define IDC_COMBO_AUDIO_SR 40013 26 | #define IDC_COMBO_AUDIO_IN_L 40014 27 | #define IDC_COMBO_AUDIO_IN_R 40015 28 | #define IDC_COMBO_AUDIO_OUT_R 40016 29 | #define IDC_COMBO_AUDIO_OUT_L 40017 30 | #define IDC_COMBO_MIDI_IN_DEV 40018 31 | #define IDC_COMBO_MIDI_OUT_DEV 40019 32 | #define IDC_COMBO_MIDI_IN_CHAN 40020 33 | #define IDC_COMBO_MIDI_OUT_CHAN 40021 34 | #define IDC_BUTTON_ASIO 40022 35 | #define IDC_CB_MONO_INPUT 40023 36 | 37 | #define IDAPPLY 40024 38 | 39 | // end 40 | 41 | //#ifdef SA_API 42 | //Standalone stuff 43 | #include 44 | 45 | IDI_ICON1 ICON DISCARDABLE "resources\\Evaluator.ico" 46 | 47 | IDD_DIALOG_MAIN DIALOG DISCARDABLE 0, 0, GUI_WIDTH, GUI_HEIGHT 48 | STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX 49 | CAPTION "Evaluator" 50 | MENU IDR_MENU1 51 | FONT 8, "MS Sans Serif" 52 | BEGIN 53 | // EDITTEXT IDC_EDIT1,59,50,145,14,ES_AUTOHSCROLL 54 | // LTEXT "Enter some text here:",IDC_STATIC,59,39,73,8 55 | END 56 | 57 | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 58 | IDD_DIALOG_PREF DIALOG DISCARDABLE 0, 0, 223, 309 59 | STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU 60 | CAPTION "Preferences" 61 | FONT 8, "MS Sans Serif" 62 | { 63 | DEFPUSHBUTTON "OK", IDOK, 110, 285, 50, 14 64 | PUSHBUTTON "Apply", IDAPPLY, 54, 285, 50, 14 65 | PUSHBUTTON "Cancel", IDCANCEL, 166, 285, 50, 14 66 | COMBOBOX IDC_COMBO_AUDIO_DRIVER, 20, 35, 100, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 67 | LTEXT "Driver Type", IDC_STATIC, 22, 25, 38, 8, SS_LEFT 68 | COMBOBOX IDC_COMBO_AUDIO_IN_DEV, 20, 65, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 69 | LTEXT "Input Device", IDC_STATIC, 20, 55, 42, 8, SS_LEFT 70 | COMBOBOX IDC_COMBO_AUDIO_OUT_DEV, 20, 95, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 71 | LTEXT "Output Device", IDC_STATIC, 20, 85, 47, 8, SS_LEFT 72 | COMBOBOX IDC_COMBO_AUDIO_IOVS, 135, 35, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 73 | LTEXT "IO Vector Size", IDC_STATIC, 137, 25, 46, 8, SS_LEFT 74 | COMBOBOX IDC_COMBO_AUDIO_SIGVS, 135, 65, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 75 | LTEXT "Signal Vector Size", IDC_STATIC, 135, 55, 58, 8, SS_LEFT 76 | COMBOBOX IDC_COMBO_AUDIO_SR, 135, 95, 65, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 77 | LTEXT "Sampling Rate", IDC_STATIC, 135, 85, 47, 8, SS_LEFT 78 | GROUPBOX "Audio Device Settings", IDC_STATIC, 5, 10, 210, 170 79 | PUSHBUTTON "ASIO Config...", IDC_BUTTON_ASIO, 135, 155, 65, 14 80 | COMBOBOX IDC_COMBO_AUDIO_IN_L, 20, 125, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 81 | LTEXT "Input 1 (L)", IDC_STATIC, 20, 115, 33, 8, SS_LEFT 82 | COMBOBOX IDC_COMBO_AUDIO_IN_R, 65, 126, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 83 | LTEXT "Input 2 (R)", IDC_STATIC, 65, 115, 34, 8, SS_LEFT 84 | COMBOBOX IDC_COMBO_AUDIO_OUT_L, 20, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 85 | LTEXT "Output 1 (L)", IDC_STATIC, 20, 145, 38, 8, SS_LEFT 86 | COMBOBOX IDC_COMBO_AUDIO_OUT_R, 65, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 87 | LTEXT "Output 2 (R)", IDC_STATIC, 65, 145, 40, 8, SS_LEFT 88 | GROUPBOX "MIDI Device Settings", IDC_STATIC, 5, 190, 210, 85 89 | COMBOBOX IDC_COMBO_MIDI_OUT_DEV, 15, 250, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 90 | LTEXT "Output Device", IDC_STATIC, 15, 240, 47, 8, SS_LEFT 91 | COMBOBOX IDC_COMBO_MIDI_IN_DEV, 15, 220, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 92 | LTEXT "Input Device", IDC_STATIC, 15, 210, 42, 8, SS_LEFT 93 | LTEXT "Input Channel", IDC_STATIC, 125, 210, 45, 8, SS_LEFT 94 | COMBOBOX IDC_COMBO_MIDI_IN_CHAN, 125, 220, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 95 | LTEXT "Output Channel", IDC_STATIC, 125, 240, 50, 8, SS_LEFT 96 | COMBOBOX IDC_COMBO_MIDI_OUT_CHAN, 125, 250, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 97 | AUTOCHECKBOX "Mono Input", IDC_CB_MONO_INPUT, 135, 127, 56, 8 98 | } 99 | 100 | IDR_MENU1 MENU DISCARDABLE 101 | BEGIN 102 | POPUP "&File" 103 | BEGIN 104 | // MENUITEM SEPARATOR 105 | MENUITEM "Preferences...", ID_PREFERENCES 106 | MENUITEM "&Quit", ID_QUIT 107 | END 108 | POPUP "&Help" 109 | BEGIN 110 | MENUITEM "&About", ID_ABOUT 111 | END 112 | END 113 | 114 | //#endif // SA_API 115 | -------------------------------------------------------------------------------- /Evaluator-app.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {6a6c24bd-7110-4436-97af-07990da17abf} 6 | 7 | 8 | {ef87c677-1479-44bc-aef8-7ba960ef233d} 9 | 10 | 11 | {b91b9db4-5584-4959-a395-7394ba3cf5a3} 12 | 13 | 14 | 15 | 16 | app\RtAudioMidi 17 | 18 | 19 | app\RtAudioMidi 20 | 21 | 22 | app\ASIO_SDK 23 | 24 | 25 | app\ASIO_SDK 26 | 27 | 28 | app\ASIO_SDK 29 | 30 | 31 | app\ASIO_SDK 32 | 33 | 34 | app\ASIO_SDK 35 | 36 | 37 | app\ASIO_SDK 38 | 39 | 40 | app 41 | 42 | 43 | 44 | 45 | app 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | app\RtAudioMidi 58 | 59 | 60 | app\RtAudioMidi 61 | 62 | 63 | app\ASIO_SDK 64 | 65 | 66 | app\ASIO_SDK 67 | 68 | 69 | app\ASIO_SDK 70 | 71 | 72 | app 73 | 74 | 75 | app 76 | 77 | 78 | 79 | app 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /Evaluator-rtas.def: -------------------------------------------------------------------------------- 1 | LIBRARY Evaluator 2 | EXPORTS 3 | NewPlugIn @1 4 | _PI_GetRoutineDescriptor @2 -------------------------------------------------------------------------------- /Evaluator-rtas.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {73d47a52-ce2f-4264-9bb9-f0b3c16f889d} 6 | 7 | 8 | {f61218de-bb49-4fd2-b3b8-d4d3a4f905de} 9 | 10 | 11 | {f55aca3b-4b35-490a-99d6-51d6724f0396} 12 | 13 | 14 | {13073ee3-c4e8-497c-b935-b091b14197c2} 15 | 16 | 17 | 18 | 19 | Libs 20 | 21 | 22 | Libs 23 | 24 | 25 | Libs 26 | 27 | 28 | Libs 29 | 30 | 31 | Libs 32 | 33 | 34 | Libs 35 | 36 | 37 | Libs 38 | 39 | 40 | 41 | 42 | IPlug 43 | 44 | 45 | IPlug 46 | 47 | 48 | IPlug 49 | 50 | 51 | IPlug 52 | 53 | 54 | IPlug 55 | 56 | 57 | IPlug 58 | 59 | 60 | IPlug 61 | 62 | 63 | IPlug 64 | 65 | 66 | IPlug 67 | 68 | 69 | IPlug 70 | 71 | 72 | IPlug 73 | 74 | 75 | IPlug 76 | 77 | 78 | IPlug 79 | 80 | 81 | IPlug 82 | 83 | 84 | IPlug 85 | 86 | 87 | IPlug 88 | 89 | 90 | IPlug 91 | 92 | 93 | IPlug\RTAS 94 | 95 | 96 | IPlug\RTAS 97 | 98 | 99 | IPlug\RTAS 100 | 101 | 102 | IPlug\RTAS 103 | 104 | 105 | IPlug\RTAS 106 | 107 | 108 | IPlug\RTAS 109 | 110 | 111 | IPlug\RTAS 112 | 113 | 114 | IPlug\RTAS\include 115 | 116 | 117 | 118 | 119 | IPlug\RTAS 120 | 121 | 122 | 123 | 124 | IPlug 125 | 126 | 127 | IPlug 128 | 129 | 130 | IPlug 131 | 132 | 133 | IPlug 134 | 135 | 136 | IPlug 137 | 138 | 139 | IPlug 140 | 141 | 142 | IPlug 143 | 144 | 145 | IPlug 146 | 147 | 148 | IPlug 149 | 150 | 151 | IPlug 152 | 153 | 154 | IPlug 155 | 156 | 157 | IPlug\RTAS 158 | 159 | 160 | IPlug\RTAS 161 | 162 | 163 | IPlug\RTAS 164 | 165 | 166 | IPlug\RTAS 167 | 168 | 169 | IPlug\RTAS\include 170 | 171 | 172 | IPlug\RTAS\include 173 | 174 | 175 | IPlug\RTAS\include 176 | 177 | 178 | 179 | IPlug\RTAS 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /Evaluator-vst2.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Debug 7 | Win32 8 | 9 | 10 | Debug 11 | x64 12 | 13 | 14 | Release 15 | Win32 16 | 17 | 18 | Release 19 | x64 20 | 21 | 22 | Tracer 23 | Win32 24 | 25 | 26 | Tracer 27 | x64 28 | 29 | 30 | 31 | {2EB4846A-93E0-43A0-821E-12237105168F} 32 | Evaluator 33 | Evaluator-vst2 34 | 35 | 36 | 37 | DynamicLibrary 38 | true 39 | MultiByte 40 | v140 41 | 42 | 43 | DynamicLibrary 44 | true 45 | MultiByte 46 | v140 47 | 48 | 49 | DynamicLibrary 50 | false 51 | true 52 | MultiByte 53 | v140 54 | 55 | 56 | DynamicLibrary 57 | false 58 | true 59 | MultiByte 60 | v140 61 | 62 | 63 | DynamicLibrary 64 | false 65 | true 66 | MultiByte 67 | v140 68 | 69 | 70 | DynamicLibrary 71 | false 72 | true 73 | MultiByte 74 | v140 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | build-win\vst2\$(Platform)\bin\ 106 | 107 | 108 | build-win\vst2\$(Platform)\bin\ 109 | 110 | 111 | build-win\vst2\$(Platform)\$(Configuration)\ 112 | 113 | 114 | 115 | 116 | build-win\vst2\$(Platform)\$(Configuration)\ 117 | 118 | 119 | 120 | build-win\vst2\$(Platform)\bin\ 121 | 122 | 123 | build-win\vst2\$(Platform)\bin\ 124 | 125 | 126 | build-win\vst2\$(Platform)\$(Configuration)\ 127 | 128 | 129 | build-win\vst2\$(Platform)\$(Configuration)\ 130 | 131 | 132 | build-win\vst2\$(Platform)\bin\ 133 | 134 | 135 | build-win\vst2\$(Platform)\bin\ 136 | 137 | 138 | build-win\vst2\$(Platform)\$(Configuration)\ 139 | 140 | 141 | build-win\vst2\$(Platform)\$(Configuration)\ 142 | 143 | 144 | 145 | Level3 146 | Disabled 147 | $(VST_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 148 | MultiThreadedDebug 149 | 150 | 151 | true 152 | Windows 153 | 154 | 155 | copy /y $(TargetPath) S:\VST\$(TargetName)$(TargetExt) 156 | 157 | 158 | 159 | 160 | Level3 161 | Disabled 162 | $(VST_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 163 | MultiThreadedDebug 164 | 165 | 166 | true 167 | Windows 168 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 169 | 170 | 171 | 172 | 173 | Level3 174 | MaxSpeed 175 | true 176 | true 177 | $(VST_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 178 | true 179 | Speed 180 | 181 | 182 | true 183 | true 184 | true 185 | Windows 186 | 187 | 188 | copy /y $(TargetPath) S:\VST\$(TargetName)$(TargetExt) 189 | 190 | 191 | 192 | 193 | Level3 194 | MaxSpeed 195 | true 196 | true 197 | $(VST_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 198 | true 199 | Speed 200 | 201 | 202 | true 203 | true 204 | true 205 | Windows 206 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 207 | 208 | 209 | 210 | 211 | Level3 212 | MaxSpeed 213 | true 214 | true 215 | $(VST_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 216 | true 217 | 218 | 219 | true 220 | true 221 | true 222 | Windows 223 | $(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 224 | 225 | 226 | copy /y $(TargetPath) S:\VST\$(TargetName)$(TargetExt) 227 | 228 | 229 | 230 | 231 | Level3 232 | MaxSpeed 233 | true 234 | true 235 | $(VST_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 236 | true 237 | 238 | 239 | true 240 | true 241 | true 242 | Windows 243 | $(x64_LIB_PATHS);$(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | -------------------------------------------------------------------------------- /Evaluator-vst2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | vst2 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | vst2 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | {ea16de74-9d15-4c60-ba09-d0924088d3e5} 32 | 33 | 34 | -------------------------------------------------------------------------------- /Evaluator-vst3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | vst3\VST3SDK\pluginterfaces\base 7 | 8 | 9 | vst3\VST3SDK\pluginterfaces\base 10 | 11 | 12 | vst3\VST3SDK\public.sdk\common 13 | 14 | 15 | vst3\VST3SDK\public.sdk\vst 16 | 17 | 18 | vst3\VST3SDK\public.sdk\vst 19 | 20 | 21 | vst3\VST3SDK\public.sdk\vst 22 | 23 | 24 | vst3\VST3SDK\public.sdk\vst 25 | 26 | 27 | vst3\VST3SDK\public.sdk\vst 28 | 29 | 30 | vst3\VST3SDK\public.sdk\vst 31 | 32 | 33 | vst3\VST3SDK\public.sdk\main 34 | 35 | 36 | vst3\VST3SDK\public.sdk\main 37 | 38 | 39 | vst3\VST3SDK\public.sdk\vst 40 | 41 | 42 | vst3 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | vst3\VST3SDK\pluginterfaces\base 55 | 56 | 57 | vst3\VST3SDK\pluginterfaces\base 58 | 59 | 60 | vst3\VST3SDK\pluginterfaces\base 61 | 62 | 63 | vst3\VST3SDK\pluginterfaces\base 64 | 65 | 66 | vst3\VST3SDK\pluginterfaces\base 67 | 68 | 69 | vst3\VST3SDK\pluginterfaces\base 70 | 71 | 72 | vst3\VST3SDK\pluginterfaces\base 73 | 74 | 75 | vst3\VST3SDK\pluginterfaces\base 76 | 77 | 78 | vst3\VST3SDK\pluginterfaces\vst 79 | 80 | 81 | vst3\VST3SDK\pluginterfaces\vst 82 | 83 | 84 | vst3\VST3SDK\pluginterfaces\vst 85 | 86 | 87 | vst3\VST3SDK\pluginterfaces\vst 88 | 89 | 90 | vst3\VST3SDK\pluginterfaces\vst 91 | 92 | 93 | vst3\VST3SDK\pluginterfaces\vst 94 | 95 | 96 | vst3\VST3SDK\pluginterfaces\vst 97 | 98 | 99 | vst3\VST3SDK\pluginterfaces\vst 100 | 101 | 102 | vst3\VST3SDK\pluginterfaces\vst 103 | 104 | 105 | vst3\VST3SDK\pluginterfaces\vst 106 | 107 | 108 | vst3\VST3SDK\pluginterfaces\vst 109 | 110 | 111 | vst3\VST3SDK\pluginterfaces\vst 112 | 113 | 114 | vst3\VST3SDK\pluginterfaces\vst 115 | 116 | 117 | vst3\VST3SDK\pluginterfaces\gui 118 | 119 | 120 | vst3\VST3SDK\public.sdk\common 121 | 122 | 123 | vst3\VST3SDK\public.sdk\vst 124 | 125 | 126 | vst3\VST3SDK\public.sdk\vst 127 | 128 | 129 | vst3\VST3SDK\public.sdk\vst 130 | 131 | 132 | vst3\VST3SDK\public.sdk\vst 133 | 134 | 135 | vst3\VST3SDK\public.sdk\vst 136 | 137 | 138 | vst3\VST3SDK\public.sdk\vst 139 | 140 | 141 | vst3\VST3SDK\public.sdk\main 142 | 143 | 144 | vst3\VST3SDK\public.sdk\vst 145 | 146 | 147 | vst3 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | {0028f8fa-40ce-4098-b1d7-1930d1a7774b} 158 | 159 | 160 | {d33dc1fa-0b31-40b9-a240-b065db740979} 161 | 162 | 163 | {1da1c979-a505-4558-b877-1a2da0e4e758} 164 | 165 | 166 | {cf0c95d2-7b5a-4afa-8a3e-546800d9b337} 167 | 168 | 169 | {babb4a18-d1d6-467e-af1c-fb852400f591} 170 | 171 | 172 | {a0598a21-18c6-4da8-98a8-bebbf0f37b34} 173 | 174 | 175 | {bc78847c-a41c-4ad7-8a8e-2ea825bc2f8e} 176 | 177 | 178 | {23863805-5085-4669-8675-167aba1f0fc9} 179 | 180 | 181 | {00ff2592-e5ef-4ab1-8b06-c42242d80c52} 182 | 183 | 184 | {ec7b025c-4ef1-4403-956b-b3673b4715b8} 185 | 186 | 187 | 188 | 189 | 190 | -------------------------------------------------------------------------------- /Evaluator.cbp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 257 | 258 | -------------------------------------------------------------------------------- /Evaluator.exp: -------------------------------------------------------------------------------- 1 | _Evaluator_Entry 2 | _Evaluator_ViewEntry 3 | -------------------------------------------------------------------------------- /Evaluator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Evaluator.h 3 | // Evaluator 4 | // 5 | // Originally created from an IPlug example project, modified by Damien Quartz. 6 | // 7 | 8 | #ifndef __EVALUATOR__ 9 | #define __EVALUATOR__ 10 | 11 | #include "IPlug_include_in_plug_hdr.h" 12 | #include "Params.h" 13 | #include "Program.h" 14 | #include "Presets.h" 15 | #include "IMidiQueue.h" 16 | #include 17 | 18 | class Interface; 19 | 20 | class Evaluator : public IPlug 21 | { 22 | public: 23 | Evaluator(IPlugInstanceInfo instanceInfo); 24 | ~Evaluator(); 25 | 26 | void Reset() override; 27 | void OnParamChange(int paramIdx) override; 28 | void ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames) override; 29 | void ProcessMidiMsg(IMidiMsg* pMsg) override; 30 | 31 | // have to hook into the chunks so that we can include the contents of our text-entry boxes 32 | bool SerializeState(ByteChunk* pChunk) override; 33 | int UnserializeState(ByteChunk* pChunk, int startPos) override; 34 | bool CompareState(const unsigned char* incomingState, int startPos) override; 35 | 36 | // catch the About menu item to display what we wants in a box 37 | bool HostRequestingAboutBox() override; 38 | 39 | // get a string that represents the internal state of the program we want to display in the UI 40 | const char * GetProgramState() const; 41 | void SetWatchText(Interface* forInterface) const; 42 | 43 | private: 44 | 45 | void MakePresetFromData(const Presets::Data& data); 46 | void SerializeOurState(ByteChunk* pChunk); 47 | 48 | // the UI 49 | Interface* mInterface; 50 | 51 | // plug state 52 | Program* mProgram; 53 | int mProgramMemorySize; 54 | // will be false if user input produced a compilation error. 55 | // we want to keep track of this so we don't update the UI in ProcessDoubleReplacing. 56 | bool mProgramIsValid; 57 | TransportState mTransport; 58 | double mGain; 59 | int mBitDepth; 60 | int mScopeUpdate; 61 | RunMode mRunMode; 62 | bool mMidiNoteResetsTick; 63 | Program::Value mTick; 64 | IMidiQueue mMidiQueue; 65 | std::vector mNotes; 66 | }; 67 | 68 | #endif 69 | -------------------------------------------------------------------------------- /Evaluator.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | Evaluator 8 | SA_API;__WINDOWS_DS__;__WINDOWS_MM__;__WINDOWS_ASIO__; 9 | VST_API;VST_FORCE_DEPRECATED; 10 | VST3_API;VST3_PRESET_LIST 11 | _DEBUG; 12 | NDEBUG; 13 | TRACER_BUILD;NDEBUG; 14 | $(ProjectDir)\..\..\..\MyDSP\; 15 | ..\..\ASIO_SDK;..\..\WDL\rtaudiomidi; 16 | dsound.lib;winmm.lib; 17 | ..\..\VST3_SDK; 18 | .\..\..\AAX_SDK\Interfaces;.\..\..\AAX_SDK\Interfaces\ACF;.\..\..\WDL\IPlug\AAX 19 | AAX_API;_WINDOWS;WIN32;_WIN32;WINDOWS_VERSION;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE 20 | lice.lib;wininet.lib;odbc32.lib;odbccp32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comctl32.lib; 21 | .\..\..\WDL\IPlug\RTAS;.\ 22 | RTAS_API;_STDINT;_HAS_ITERATOR_DEBUGGING=0;_SECURE_SCL=0;_WINDOWS;WIN32;_WIN32;WINDOWS_VERSION;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE 23 | comdlg32.lib;uuid.lib;msimg32.lib;odbc32.lib;odbccp32.lib;user32.lib;gdi32.lib;advapi32.lib;shell32.lib 24 | 25 | 26 | $(BINARY_NAME) 27 | <_ProjectFileVersion>10.0.30319.1 28 | 29 | 30 | 31 | $(ADDITIONAL_INCLUDES);..\..\WDL;..\..\WDL\lice;..\..\WDL\IPlug 32 | 33 | 34 | IPlug.lib;lice.lib;%(AdditionalDependencies) 35 | 36 | 37 | 38 | 39 | $(BINARY_NAME) 40 | 41 | 42 | $(APP_DEFS) 43 | 44 | 45 | $(VST_DEFS) 46 | 47 | 48 | $(VST3_DEFS) 49 | 50 | 51 | $(DEBUG_DEFS) 52 | 53 | 54 | $(RELEASE_DEFS) 55 | 56 | 57 | $(TRACER_DEFS) 58 | 59 | 60 | $(ADDITIONAL_INCLUDES) 61 | 62 | 63 | $(APP_INCLUDES) 64 | 65 | 66 | $(APP_LIBS) 67 | 68 | 69 | $(VST3_INCLUDES) 70 | 71 | 72 | $(AAX_INCLUDES) 73 | 74 | 75 | $(AAX_DEFS) 76 | 77 | 78 | $(AAX_LIBS) 79 | 80 | 81 | $(RTAS_INCLUDES) 82 | 83 | 84 | $(RTAS_DEFS) 85 | 86 | 87 | $(RTAS_LIBS) 88 | 89 | 90 | -------------------------------------------------------------------------------- /Evaluator.rc: -------------------------------------------------------------------------------- 1 | #include "resource.h" 2 | 3 | BACKGROUND_ID PNG BACKGROUND_FN 4 | SLIDER_BACK_ID PNG SLIDER_BACK_FN 5 | SLIDER_KNOB_ID PNG SLIDER_KNOB_FN 6 | NUMBERBOX_ARROW_UP_ID PNG NUMBERBOX_ARROW_UP_FN 7 | NUMBERBOX_ARROW_DOWN_ID PNG NUMBERBOX_ARROW_DOWN_FN 8 | NUMBERBOX_BACK_ID PNG NUMBERBOX_BACK_FN 9 | RADIO_BUTTON_ID PNG RADIO_BUTTON_FN 10 | BUTTON_BACK_ID PNG BUTTON_BACK_FN 11 | 12 | #ifdef SA_API 13 | //Standalone stuff 14 | #include 15 | 16 | IDI_ICON1 ICON DISCARDABLE "resources\Evaluator.ico" 17 | 18 | IDD_DIALOG_MAIN DIALOG DISCARDABLE 0, 0, GUI_WIDTH, GUI_HEIGHT 19 | STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX 20 | CAPTION "Evaluator" 21 | MENU IDR_MENU1 22 | FONT 8, "MS Sans Serif" 23 | BEGIN 24 | // EDITTEXT IDC_EDIT1,59,50,145,14,ES_AUTOHSCROLL 25 | // LTEXT "Enter some text here:",IDC_STATIC,59,39,73,8 26 | END 27 | 28 | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 29 | IDD_DIALOG_PREF DIALOG DISCARDABLE 0, 0, 223, 309 30 | STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU 31 | CAPTION "Preferences" 32 | FONT 8, "MS Sans Serif" 33 | { 34 | DEFPUSHBUTTON "OK", IDOK, 110, 285, 50, 14 35 | PUSHBUTTON "Apply", IDAPPLY, 54, 285, 50, 14 36 | PUSHBUTTON "Cancel", IDCANCEL, 166, 285, 50, 14 37 | COMBOBOX IDC_COMBO_AUDIO_DRIVER, 20, 35, 100, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 38 | LTEXT "Driver Type", IDC_STATIC, 22, 25, 38, 8, SS_LEFT 39 | COMBOBOX IDC_COMBO_AUDIO_IN_DEV, 20, 65, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 40 | LTEXT "Input Device", IDC_STATIC, 20, 55, 42, 8, SS_LEFT 41 | COMBOBOX IDC_COMBO_AUDIO_OUT_DEV, 20, 95, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 42 | LTEXT "Output Device", IDC_STATIC, 20, 85, 47, 8, SS_LEFT 43 | COMBOBOX IDC_COMBO_AUDIO_IOVS, 135, 35, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 44 | LTEXT "IO Vector Size", IDC_STATIC, 137, 25, 46, 8, SS_LEFT 45 | COMBOBOX IDC_COMBO_AUDIO_SIGVS, 135, 65, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 46 | LTEXT "Signal Vector Size", IDC_STATIC, 135, 55, 58, 8, SS_LEFT 47 | COMBOBOX IDC_COMBO_AUDIO_SR, 135, 95, 65, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 48 | LTEXT "Sampling Rate", IDC_STATIC, 135, 85, 47, 8, SS_LEFT 49 | GROUPBOX "Audio Device Settings", IDC_STATIC, 5, 10, 210, 170 50 | PUSHBUTTON "ASIO Config...", IDC_BUTTON_ASIO, 135, 155, 65, 14 51 | COMBOBOX IDC_COMBO_AUDIO_IN_L, 20, 125, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 52 | LTEXT "Input 1 (L)", IDC_STATIC, 20, 115, 33, 8, SS_LEFT 53 | COMBOBOX IDC_COMBO_AUDIO_IN_R, 65, 126, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 54 | LTEXT "Input 2 (R)", IDC_STATIC, 65, 115, 34, 8, SS_LEFT 55 | COMBOBOX IDC_COMBO_AUDIO_OUT_L, 20, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 56 | LTEXT "Output 1 (L)", IDC_STATIC, 20, 145, 38, 8, SS_LEFT 57 | COMBOBOX IDC_COMBO_AUDIO_OUT_R, 65, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 58 | LTEXT "Output 2 (R)", IDC_STATIC, 65, 145, 40, 8, SS_LEFT 59 | GROUPBOX "MIDI Device Settings", IDC_STATIC, 5, 190, 210, 85 60 | COMBOBOX IDC_COMBO_MIDI_OUT_DEV, 15, 250, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 61 | LTEXT "Output Device", IDC_STATIC, 15, 240, 47, 8, SS_LEFT 62 | COMBOBOX IDC_COMBO_MIDI_IN_DEV, 15, 220, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 63 | LTEXT "Input Device", IDC_STATIC, 15, 210, 42, 8, SS_LEFT 64 | LTEXT "Input Channel", IDC_STATIC, 125, 210, 45, 8, SS_LEFT 65 | COMBOBOX IDC_COMBO_MIDI_IN_CHAN, 125, 220, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 66 | LTEXT "Output Channel", IDC_STATIC, 125, 240, 50, 8, SS_LEFT 67 | COMBOBOX IDC_COMBO_MIDI_OUT_CHAN, 125, 250, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 68 | AUTOCHECKBOX "Mono Input", IDC_CB_MONO_INPUT, 135, 127, 56, 8 69 | } 70 | 71 | IDR_MENU1 MENU DISCARDABLE 72 | BEGIN 73 | POPUP "&File" 74 | BEGIN 75 | // MENUITEM SEPARATOR 76 | MENUITEM "Preferences...", ID_PREFERENCES 77 | MENUITEM "&Quit", ID_QUIT 78 | END 79 | POPUP "&Help" 80 | BEGIN 81 | MENUITEM "&About", ID_ABOUT 82 | END 83 | END 84 | 85 | #endif // SA_API 86 | -------------------------------------------------------------------------------- /Evaluator.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Evaluator-app", "Evaluator-app.vcxproj", "{41785AE4-5B70-4A75-880B-4B418B4E13C6}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 9 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 10 | EndProjectSection 11 | EndProject 12 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IPlug", "..\..\WDL\IPlug\IPlug.vcxproj", "{33958832-2FFD-49D8-9C13-5F0B26739E81}" 13 | ProjectSection(ProjectDependencies) = postProject 14 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 15 | EndProjectSection 16 | EndProject 17 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lice", "..\..\WDL\lice\lice.vcxproj", "{3059A12C-2A45-439B-81EC-201D8ED347A3}" 18 | EndProject 19 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Evaluator-vst2", "Evaluator-vst2.vcxproj", "{2EB4846A-93E0-43A0-821E-12237105168F}" 20 | ProjectSection(ProjectDependencies) = postProject 21 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 22 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 23 | EndProjectSection 24 | EndProject 25 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Evaluator-vst3", "Evaluator-vst3.vcxproj", "{079FC65A-F0E5-4E97-B318-A16D1D0B89DF}" 26 | ProjectSection(ProjectDependencies) = postProject 27 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 28 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 29 | {5755CC40-C699-491B-BD7C-5D841C26C28D} = {5755CC40-C699-491B-BD7C-5D841C26C28D} 30 | EndProjectSection 31 | EndProject 32 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\VST3_SDK\base\win\base.vcxproj", "{5755CC40-C699-491B-BD7C-5D841C26C28D}" 33 | EndProject 34 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "expression_test", "expression_test\win\expression_test.vcxproj", "{5FE71BE5-DADD-4F82-9F38-AFF27849AC57}" 35 | EndProject 36 | Global 37 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 38 | Debug|Win32 = Debug|Win32 39 | Debug|x64 = Debug|x64 40 | Release|Win32 = Release|Win32 41 | Release|x64 = Release|x64 42 | Tracer|Win32 = Tracer|Win32 43 | Tracer|x64 = Tracer|x64 44 | EndGlobalSection 45 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 46 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.ActiveCfg = Debug|Win32 47 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.Build.0 = Debug|Win32 48 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.ActiveCfg = Debug|x64 49 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.Build.0 = Debug|x64 50 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.ActiveCfg = Release|Win32 51 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.Build.0 = Release|Win32 52 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.ActiveCfg = Release|x64 53 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.Build.0 = Release|x64 54 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.ActiveCfg = Tracer|Win32 55 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.Build.0 = Tracer|Win32 56 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.ActiveCfg = Tracer|x64 57 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.Build.0 = Tracer|x64 58 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|Win32.ActiveCfg = Debug|Win32 59 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|Win32.Build.0 = Debug|Win32 60 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|x64.ActiveCfg = Debug|x64 61 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|x64.Build.0 = Debug|x64 62 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|Win32.ActiveCfg = Release|Win32 63 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|Win32.Build.0 = Release|Win32 64 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|x64.ActiveCfg = Release|x64 65 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|x64.Build.0 = Release|x64 66 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|Win32.ActiveCfg = Tracer|Win32 67 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|Win32.Build.0 = Tracer|Win32 68 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|x64.ActiveCfg = Tracer|x64 69 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|x64.Build.0 = Tracer|x64 70 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|Win32.ActiveCfg = Debug|Win32 71 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|Win32.Build.0 = Debug|Win32 72 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|x64.ActiveCfg = Debug|x64 73 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|x64.Build.0 = Debug|x64 74 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|Win32.ActiveCfg = Release|Win32 75 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|Win32.Build.0 = Release|Win32 76 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|x64.ActiveCfg = Release|x64 77 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|x64.Build.0 = Release|x64 78 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|Win32.ActiveCfg = Release|Win32 79 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|Win32.Build.0 = Release|Win32 80 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|x64.ActiveCfg = Release|x64 81 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|x64.Build.0 = Release|x64 82 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|Win32.ActiveCfg = Debug|Win32 83 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|Win32.Build.0 = Debug|Win32 84 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|x64.ActiveCfg = Debug|x64 85 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|x64.Build.0 = Debug|x64 86 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|Win32.ActiveCfg = Release|Win32 87 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|Win32.Build.0 = Release|Win32 88 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|x64.ActiveCfg = Release|x64 89 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|x64.Build.0 = Release|x64 90 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|Win32.ActiveCfg = Tracer|Win32 91 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|Win32.Build.0 = Tracer|Win32 92 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|x64.ActiveCfg = Tracer|x64 93 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|x64.Build.0 = Tracer|x64 94 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.ActiveCfg = Debug|Win32 95 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.Build.0 = Debug|Win32 96 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.ActiveCfg = Debug|x64 97 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.Build.0 = Debug|x64 98 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.ActiveCfg = Release|Win32 99 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.Build.0 = Release|Win32 100 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.ActiveCfg = Release|x64 101 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.Build.0 = Release|x64 102 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.ActiveCfg = Tracer|Win32 103 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.Build.0 = Tracer|Win32 104 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.ActiveCfg = Tracer|x64 105 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.Build.0 = Tracer|x64 106 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|Win32.ActiveCfg = Debug|Win32 107 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|Win32.Build.0 = Debug|Win32 108 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|x64.ActiveCfg = Debug|x64 109 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|x64.Build.0 = Debug|x64 110 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|Win32.ActiveCfg = Release|Win32 111 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|Win32.Build.0 = Release|Win32 112 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|x64.ActiveCfg = Release|x64 113 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|x64.Build.0 = Release|x64 114 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|Win32.ActiveCfg = Release|Win32 115 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|Win32.Build.0 = Release|Win32 116 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|x64.ActiveCfg = Release|x64 117 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|x64.Build.0 = Release|x64 118 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Debug|Win32.ActiveCfg = Debug|Win32 119 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Debug|Win32.Build.0 = Debug|Win32 120 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Debug|x64.ActiveCfg = Debug|x64 121 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Debug|x64.Build.0 = Debug|x64 122 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Release|Win32.ActiveCfg = Release|Win32 123 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Release|Win32.Build.0 = Release|Win32 124 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Release|x64.ActiveCfg = Release|x64 125 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Release|x64.Build.0 = Release|x64 126 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Tracer|Win32.ActiveCfg = Debug|Win32 127 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Tracer|Win32.Build.0 = Debug|Win32 128 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Tracer|x64.ActiveCfg = Release|x64 129 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57}.Tracer|x64.Build.0 = Release|x64 130 | EndGlobalSection 131 | GlobalSection(SolutionProperties) = preSolution 132 | HideSolutionNode = FALSE 133 | EndGlobalSection 134 | EndGlobal 135 | -------------------------------------------------------------------------------- /Evaluator.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../common.xcconfig" 2 | 3 | //------------------------------ 4 | // Global settings 5 | 6 | // the basename of the vst, vst3, app, component, dpm, aaxplugin 7 | BINARY_NAME = Evaluator 8 | 9 | ADDITIONAL_INCLUDES = // $(SRCROOT)/../../../MyDSP/ 10 | //ADDITIONAL_LIBRARY_PATHS = // 11 | 12 | // for jack headers 13 | //ADDITIONAL_APP_INCLUDES = /usr/local/include 14 | 15 | // Flags to pass to compiler for all builds 16 | GCC_CFLAGS = -Wno-write-strings 17 | 18 | MACOSX_DEPLOYMENT_TARGET = 10.8 19 | DEPLOYMENT_TARGET = 10.8 20 | 21 | //------------------------------ 22 | // Preprocessor definitions 23 | 24 | // Preprocessor definitions for all VST builds 25 | VST_DEFS = VST_API VST_FORCE_DEPRECATED 26 | 27 | VST3_DEFS = VST3_API VST3_PRESET_LIST 28 | 29 | // Preprocessor definitions for all AU builds 30 | AU_DEFS = AU_API 31 | 32 | RTAS_DEFS = RTAS_API 33 | 34 | AAX_DEFS = AAX_API 35 | 36 | APP_DEFS = SA_API __MACOSX_CORE__ 37 | 38 | // Preprocessor definitions for all Debug builds 39 | DEBUG_DEFS = _DEBUG 40 | 41 | // Preprocessor definitions for all Release builds 42 | RELEASE_DEFS = NDEBUG //DEMO_VERSION 43 | 44 | // Preprocessor definitions for all Tracer builds 45 | TRACER_DEFS = TRACER_BUILD NDEBUG 46 | 47 | // Preprocessor definitions for cocoa uniqueness (all builds) 48 | // If you want to use swell inside of iplug, you need to make SWELL_APP_PREFIX unique too 49 | COCOA_DEFS = SWELL_CLEANUP_ON_UNLOAD COCOA_PREFIX=vEvaluator SWELL_APP_PREFIX=Swell_vEvaluator 50 | 51 | //------------------------------ 52 | // Release build options 53 | 54 | //Enable/Disable Profiling code 55 | PROFILE = NO //NO, YES - enable this if you want to use shark to profile a plugin 56 | 57 | // GCC optimization level - 58 | // None: [-O0] Fast: [-O, -O1] Faster:[-O2] Fastest: [-O3] Fastest, smallest: Optimize for size. [-Os] 59 | RELEASE_OPTIMIZE = 3 //0,1,2,3,s 60 | 61 | //------------------------------ 62 | // Debug build options 63 | DEBUG_OPTIMIZE = 0 //0,1,2,3,s 64 | 65 | -------------------------------------------------------------------------------- /Evaluator.xcodeproj/xcshareddata/xcschemes/APP.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Evaluator.xcodeproj/xcshareddata/xcschemes/AU.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 47 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 70 | 73 | 74 | 75 | 77 | 78 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /Evaluator.xcodeproj/xcshareddata/xcschemes/All.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Evaluator.xcodeproj/xcshareddata/xcschemes/VST2.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 49 | 50 | 51 | 57 | 58 | 59 | 60 | 61 | 62 | 68 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Evaluator.xcodeproj/xcshareddata/xcschemes/VST3.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 47 | 50 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 72 | 73 | 74 | 76 | 77 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /Interface.h: -------------------------------------------------------------------------------- 1 | // 2 | // Interface.h 3 | // Evaluator 4 | // 5 | // Created by Damien Quartz 6 | // 7 | 8 | #pragma once 9 | 10 | #include "Params.h" 11 | 12 | class Evaluator; 13 | class IGraphics; 14 | class ITextEdit; 15 | class ITextControl; 16 | class ConsoleText; 17 | class IControl; 18 | class Oscilloscope; 19 | class TransportButtons; 20 | class WDL_String; 21 | 22 | class Interface 23 | { 24 | public: 25 | Interface(Evaluator* plug, IGraphics* pGraphics); 26 | ~Interface(); 27 | 28 | void SetDirty(int paramIdx, bool pushToPlug); 29 | 30 | const char * GetProgramText() const; 31 | unsigned int GetProgramMemorySize() const; 32 | 33 | void SetProgramName(const char * programName); 34 | const char * GetProgramName() const; 35 | 36 | void SetProgramText(const char * programText); 37 | void SetConsoleText(const char * consoleText); 38 | void SetWatchValue(int idx, const char* watchText); 39 | 40 | void UpdateOscilloscope(double left, double right); 41 | int GetOscilloscopeWidth() const; 42 | 43 | const char * GetWatch(int idx) const; 44 | void SetWatch(int idx, const char * text); 45 | 46 | // made this so that the interface can update the program name when we load a preset 47 | void LoadPreset(int idx); 48 | 49 | TransportState GetTransportState() const; 50 | 51 | void ToggleHelp(); 52 | 53 | bool GetSupportPath(WDL_String* outPath) const; 54 | 55 | IGraphics* GetGUI() const { return mGraphics; } 56 | 57 | private: 58 | 59 | void CreateControls(IGraphics* pGraphics); 60 | 61 | Evaluator* mPlug; 62 | IGraphics* mGraphics; 63 | 64 | ITextEdit* textEdit; 65 | ITextControl* programName; 66 | ConsoleText* consoleTextControl; 67 | IControl* bitDepthControl; 68 | Oscilloscope* oscilloscope; 69 | TransportButtons* transportButtons; 70 | IControl* timeResetLabel; 71 | IControl* timeResetToggle; 72 | IControl* compilePrompt; 73 | 74 | struct Watch 75 | { 76 | ITextEdit* var; 77 | ConsoleText* val; 78 | }; 79 | 80 | Watch watches[kWatchNum]; 81 | }; 82 | 83 | -------------------------------------------------------------------------------- /KnobLineCoronaControl.cpp: -------------------------------------------------------------------------------- 1 | #include "KnobLineCoronaControl.h" 2 | 3 | #pragma region KnobLineCoronaControl 4 | KnobLineCoronaControl::KnobLineCoronaControl(IPlugBase* pPlug, IRECT pR, int paramIdx, 5 | const IColor* pColor, const IColor* pCoronaColor, 6 | float coronaThickness, 7 | double innerRadius, double outerRadius, 8 | double minAngle, double maxAngle, 9 | EDirection direction, double gearing) 10 | : IKnobLineControl(pPlug, pR, paramIdx, pColor, innerRadius, outerRadius, minAngle, maxAngle, direction, gearing) 11 | , mCX(mRECT.MW()) 12 | , mCY(mRECT.MH()) 13 | , mCoronaColor(*pCoronaColor) 14 | , mCoronaBlend(IChannelBlend::kBlendAdd, coronaThickness) 15 | , mLabelControl(nullptr) 16 | , mSharedLabel(false) 17 | , mHasMouse(false) 18 | { 19 | } 20 | 21 | bool KnobLineCoronaControl::Draw(IGraphics* pGraphics) 22 | { 23 | float v = mMinAngle + (float)mValue * (mMaxAngle - mMinAngle); 24 | for (int i = 0; i <= mCoronaBlend.mWeight; ++i) 25 | { 26 | IColor color = mCoronaColor; 27 | pGraphics->DrawArc(&color, mCX, mCY, mOuterRadius - i, mMinAngle, v, nullptr, true); 28 | color.R /= 2; 29 | color.G /= 2; 30 | color.B /= 2; 31 | pGraphics->DrawArc(&color, mCX, mCY, mOuterRadius - i, v, mMaxAngle, nullptr, true); 32 | } 33 | float sinV = (float)sin(v); 34 | float cosV = (float)cos(v); 35 | float x1 = mCX + mInnerRadius * sinV, y1 = mCY - mInnerRadius * cosV; 36 | float x2 = mCX + mOuterRadius * sinV, y2 = mCY - mOuterRadius * cosV; 37 | return pGraphics->DrawLine(&mColor, x1, y1, x2, y2, &mBlend, true); 38 | } 39 | 40 | void KnobLineCoronaControl::OnMouseDown(int x, int y, IMouseMod* pMod) 41 | { 42 | mHasMouse = true; 43 | } 44 | 45 | void KnobLineCoronaControl::OnMouseDrag(int x, int y, int dX, int dY, IMouseMod* pMod) 46 | { 47 | double gearing = mGearing; 48 | 49 | #ifdef PROTOOLS 50 | #ifdef OS_WIN 51 | if (pMod->C) gearing *= 10.0; 52 | #else 53 | if (pMod->R) gearing *= 10.0; 54 | #endif 55 | #else 56 | if (pMod->C || pMod->S) gearing *= 10.0; 57 | #endif 58 | 59 | mValue += (double)dY / (double)(mRECT.T - mRECT.B) / gearing; 60 | mValue += (double)dX / (double)(mRECT.R - mRECT.L) / gearing; 61 | 62 | SetDirty(); 63 | } 64 | 65 | void KnobLineCoronaControl::OnMouseUp(int x, int y, IMouseMod* pMod) 66 | { 67 | if (!mRECT.Contains(x, y)) 68 | { 69 | HideLabel(); 70 | } 71 | 72 | mHasMouse = false; 73 | } 74 | 75 | void KnobLineCoronaControl::OnMouseOver(int x, int y, IMouseMod* pMod) 76 | { 77 | ShowLabel(); 78 | } 79 | 80 | void KnobLineCoronaControl::OnMouseOut() 81 | { 82 | if (!mHasMouse) 83 | { 84 | HideLabel(); 85 | } 86 | } 87 | 88 | void KnobLineCoronaControl::ShowLabel() 89 | { 90 | if (mLabelControl != nullptr) 91 | { 92 | // if our label was hidden when we attached it, 93 | // that means we should reposition it below the knob before displaying it. 94 | if (mSharedLabel) 95 | { 96 | IRECT targetRect = mRECT; 97 | targetRect.T = targetRect.B - 16; 98 | IRECT& labelRect = *mLabelControl->GetRECT(); 99 | labelRect = targetRect; 100 | mLabelControl->SetTargetArea(targetRect); 101 | } 102 | SetValDisplayControl(mLabelControl); 103 | SetDirty(); 104 | } 105 | } 106 | 107 | void KnobLineCoronaControl::HideLabel() 108 | { 109 | SetValDisplayControl(nullptr); 110 | if (mLabelControl != nullptr) 111 | { 112 | mLabelControl->SetTextFromPlug(mLabelString.Get()); 113 | SetDirty(false); 114 | } 115 | } 116 | 117 | void KnobLineCoronaControl::SetLabelControl(ITextControl* control, bool bShared) 118 | { 119 | mLabelControl = control; 120 | mSharedLabel = bShared; 121 | if (mLabelControl != nullptr) 122 | { 123 | mLabelString.Set(mLabelControl->GetTextForPlug()); 124 | } 125 | else 126 | { 127 | mLabelString.Set(""); 128 | mSharedLabel = false; 129 | } 130 | 131 | // if our label control is shared, extend our rect to include where we will place the label when showing it. 132 | // this ensures that the area the label draws in will be cleared when the labels is moved elsewhere. 133 | if (mSharedLabel) 134 | { 135 | mRECT.L -= 15; 136 | mRECT.R += 15; 137 | mRECT.B += 15; 138 | } 139 | } 140 | 141 | #pragma endregion KnobLineCoronaControl 142 | -------------------------------------------------------------------------------- /KnobLineCoronaControl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "IControl.h" 4 | 5 | class KnobLineCoronaControl : public IKnobLineControl 6 | { 7 | public: 8 | KnobLineCoronaControl(IPlugBase* pPlug, IRECT pR, int paramIdx, 9 | const IColor* pLineColor, const IColor* pCoronaColor, 10 | float coronaThickness = 0.0f, double innerRadius = 0.0, double outerRadius = 0.0, 11 | double minAngle = -0.75 * PI, double maxAngle = 0.75 * PI, 12 | EDirection direction = kVertical, double gearing = DEFAULT_GEARING); 13 | 14 | bool Draw(IGraphics* pGraphics) override; 15 | 16 | void OnMouseDown(int x, int y, IMouseMod* pMod) override; 17 | void OnMouseDrag(int x, int y, int dX, int dY, IMouseMod* pMod) override; 18 | void OnMouseUp(int x, int y, IMouseMod* pMod) override; 19 | 20 | void OnMouseOver(int x, int y, IMouseMod* pMod) override; 21 | void OnMouseOut() override; 22 | 23 | void SetLabelControl(ITextControl* control, bool bShared = false); 24 | 25 | private: 26 | void ShowLabel(); 27 | void HideLabel(); 28 | 29 | float mCX, mCY; 30 | bool mHasMouse; 31 | IColor mCoronaColor; 32 | IChannelBlend mCoronaBlend; 33 | ITextControl* mLabelControl; 34 | WDL_String mLabelString; 35 | bool mSharedLabel; 36 | }; 37 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Damien Quartz 2 | 3 | This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. 4 | 5 | Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 6 | 7 | 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 8 | 9 | 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 10 | 11 | 3. This notice may not be removed or altered from any source distribution. -------------------------------------------------------------------------------- /Params.h: -------------------------------------------------------------------------------- 1 | // 2 | // Params.h 3 | // Evaluator 4 | // 5 | // Created by Damien Quartz on 11/28/17. 6 | // 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | enum EParams 13 | { 14 | kGain = 0, 15 | kBitDepth = 1, 16 | kRunMode = 2, // enumeration to control how we advance 't' in the program 17 | kScopeWindow = 3, // amount of time in seconds that the scope window represents 18 | kVControl0 = 4, 19 | kVControl7 = kVControl0 + 7, 20 | // this is only used by the standalone, 21 | // but is included in the plug versions so that if someone saves an fxp from a DAW 22 | // and then loads that fxp into the standalone, the tempo it was saved with will be present. 23 | // it will be set to be not automatible, which will hide it in the VST3 version, at least. 24 | kTempo, 25 | kMidiNoteResetsTime, // does receiving a note-on set t to zero 26 | kNumParams, 27 | 28 | // used for text edit fields so the UI can call OnParamChange 29 | kExpression = 101, 30 | kExpressionLengthMax = 1024, 31 | 32 | kWatch = 202, // starting paramIdx for watches 33 | kWatchNum = 10, // total number of watches available 34 | 35 | kTransportState = 301, // used to figure out if we should generate sound in the standalone 36 | 37 | kBitDepthMin = 1, 38 | kBitDepthMax = 24, 39 | 40 | // these are in milliseconds 41 | kScopeWindowMin = 1, 42 | kScopeWindowMax = 2000, 43 | 44 | kVControlMin = 0, 45 | kVControlMax = 255, 46 | 47 | kTempoMin = 1, 48 | kTempoMax = 960, 49 | }; 50 | 51 | enum RunMode : uint8_t 52 | { 53 | kRunModeAlways, 54 | kRunModeMIDI, // continuously increment t if we have notes 55 | 56 | #if !SA_API // there is no "Project Time" in the standalone version, so we don't allow this param to have that value 57 | kRunModeProjectTime, 58 | #endif 59 | 60 | kRunModeCount 61 | }; 62 | 63 | enum TransportState 64 | { 65 | kTransportStopped = 0, 66 | kTransportPaused, 67 | kTransportPlaying 68 | }; -------------------------------------------------------------------------------- /Presets.h: -------------------------------------------------------------------------------- 1 | // 2 | // Presets.h 3 | // Evaluator 4 | // 5 | // Created by Damien Quartz on 10/9/17 6 | // 7 | // 8 | 9 | #pragma once 10 | namespace Presets 11 | { 12 | struct Data 13 | { 14 | const char * const name; 15 | const float volume; 16 | const int bitDepth; 17 | const int runMode; 18 | const bool midiNoteResetsTime; 19 | const int V0, V1, V2, V3, V4, V5, V6, V7; 20 | const char * const program; 21 | const char * const W0, *const W1, *const W2, *const W3, *const W4, *const W5, *const W6, *const W7, *const W8, *const W9; 22 | }; 23 | 24 | // how many pre-defined presets are there 25 | int Count(); 26 | 27 | const Data& Get(int idx); 28 | }; 29 | 30 | -------------------------------------------------------------------------------- /Program.h: -------------------------------------------------------------------------------- 1 | // 2 | // Program.h 3 | // Evaluator 4 | // 5 | // Created by Damien Quartz on 10/9/17 6 | // 7 | // 8 | 9 | #pragma once 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | class Program 17 | { 18 | public: 19 | enum CompileError 20 | { 21 | CE_NONE, 22 | CE_MISSING_PAREN, 23 | CE_MISSING_BRACKET, 24 | CE_MISSING_BRACE, 25 | CE_MISSING_COLON_IN_TERNARY, 26 | CE_UNEXPECTED_CHAR, 27 | CE_FAILED_TO_PARSE_NUMBER, 28 | CE_ILLEGAL_ASSIGNMENT, 29 | CE_ILLEGAL_STATEMENT_TERMINATION, // found a semi-colon where one isn't allowed 30 | CE_ILLEGAL_VARIABLE_NAME, // found an uppercase letter where we expected a lowercase one 31 | CE_MISSING_PUT, // the program does not contain any PUT instructions 32 | }; 33 | 34 | enum RuntimeError 35 | { 36 | RE_NONE, 37 | RE_DIVIDE_BY_ZERO, 38 | RE_MISSING_OPERAND, // the stack did not contain data for the operation 39 | RE_MISSING_OPCODE, // the implementation for an Op::Code is missing 40 | RE_INCONSISTENT_STACK, // the stack was not empty after popping the final result 41 | RE_EMPTY_PROGRAM, // the program has no instructions to execute 42 | RE_GET_OUT_OF_BOUNDS, // index for GET was bigger than the size of the results array 43 | RE_PUT_OUT_OF_BOUNDS, // index for PUT was bigger than the size of the results array 44 | }; 45 | 46 | // type of the string expression for Compile 47 | typedef char Char; 48 | // type of the value returned by evaluation 49 | typedef uint64_t Value; 50 | 51 | struct Op 52 | { 53 | public: 54 | 55 | enum Code 56 | { 57 | NOP, // no operation (doesn't pop from the stack or push to it) 58 | PSH, // push a constant value onto the stack (eg when a numeric value is used) 59 | PEK, // get the value at a memory address 60 | POK, // set the value at a memory address 61 | FRQ, 62 | SQR, 63 | SIN, 64 | TRI, 65 | NEG, 66 | MUL, 67 | DIV, 68 | MOD, 69 | ADD, 70 | SUB, 71 | BSL, 72 | BSR, 73 | AND, 74 | OR, 75 | XOR, 76 | CEQ, // compare == 77 | CNE, // compare != 78 | CLT, // compare < 79 | CLE, // compare <= 80 | CGT, // compare > 81 | CGE, // compare >= 82 | CND, // conditional - ?: and ? 83 | POP, // ; (pop a value from the stack and do nothing with it) 84 | GET, // get the the current value of a result. eg [0] or [1]. 85 | PUT, // assign to an output result using [0] = expression. 86 | RND, // random number operator - operand is used to wrap value returned by rand() - so like Random.Range(0, operand) 87 | CCV, // use the operand to look up the current value of a midi control change value, eg 'a = C1' 88 | VCV, // use the operand to look up the current value of a "voltage" control value, eg 'a = V5' 89 | NOT, 90 | COM, 91 | JMP, // JMP to the address indicated by val 92 | }; 93 | 94 | // need default constructor or we can't use vector 95 | Op() : code(PSH), val(0) {} 96 | Op(Code _code, Value _val) : code(_code), val(_val) {} 97 | 98 | const Code code; 99 | // this is mutable because the compiler needs to be able to change it in some cases 100 | Value val; 101 | }; 102 | 103 | // userMemorySize is used to determine the size of read/write memory used by the program. 104 | // "user" memory is memory that is accessible only via the @ operator and is otherwise 105 | // not modified by the program (but can be externally modified from C++ by calling Peek). 106 | static Program* Compile(const Char* source, const size_t userMemorySize, CompileError& outError, int& outErrorPosition); 107 | // get the address in memory of a variable declared in a program with a particular userMemorySize. 108 | static Value GetAddress(const Char var, size_t userMemorySize); 109 | 110 | // get human-readable descriptions of errors 111 | static const char * GetErrorString(CompileError error); 112 | static const char * GetErrorString(RuntimeError error); 113 | 114 | Program(const std::vector& inOps, const size_t userMemorySize); 115 | ~Program(); 116 | 117 | uint64_t GetInstructionCount() const { return ops.size(); } 118 | 119 | // run the program placing the value it evaluates to into the results array. 120 | // count is provided so that we can prevent the program from overrunning the array. 121 | RuntimeError Run(Value* results, const size_t size); 122 | 123 | // get the current value of a var, eg Get('t') 124 | Value Get(const Char var) const; 125 | // set the value of a var, eg Set('m', 128) 126 | void Set(const Char var, const Value value); 127 | 128 | // get the value at this memory address 129 | Value Peek(const Value address) const; 130 | // set the value at this memory address 131 | void Poke(const Value address, const Value value); 132 | 133 | // get/set a control change. these are accessible in the program with the 'C' operator 134 | Value GetCC(const Value idx) const; 135 | void SetCC(const Value idx, const Value value); 136 | 137 | // get/set a "voltage" change. these are accessible in the program with the 'V' operator 138 | Value GetVC(const Value idx) const; 139 | void SetVC(const Value idx, const Value value); 140 | 141 | private: 142 | 143 | RuntimeError Exec(const Op& op, Value* results, size_t size); 144 | 145 | static const size_t kCCSize = 128; 146 | static const size_t kVCSize = 8; 147 | 148 | // the compiled code 149 | std::vector ops; 150 | size_t pc; // program counter, stored here because it can be changed by TRN and JMP 151 | const size_t userMemSize; // how much of mem is "user" memory 152 | const size_t memSize; // the actual size of mem 153 | // the memory space - read/write memory for the program (use Peek/Poke from C++) 154 | // this includes "user" memory accessible with @, where @0 maps to mem[0] 155 | // and also includes "variable" memory accessible with lowercase letters like 'a', 'b', 'c', etc. 156 | // it is also possible to access variable values with @ if you know the address of the variable. 157 | // for safety, we always wrap the address to the size of the array to prevent invalid access. 158 | Value* mem; 159 | // memory for storing MIDI CC values - readonly from within a program 160 | Value cc[kCCSize]; 161 | // memory for storing VC values = readonly from within a program 162 | Value vc[kVCSize]; 163 | // the execution stack (reused each time Run is called) 164 | std::stack stack; 165 | // rng because rand() doesn't generate a large enough range 166 | std::default_random_engine rng; 167 | }; 168 | 169 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![License: Zlib](https://img.shields.io/badge/License-Zlib-lightgrey.svg)](https://opensource.org/licenses/Zlib) 2 | 3 | # Evaluator 4 | 5 | Write short C-style programs whose output is used to generate sound! 6 | 7 | Evaluator is inspired by bytebeat, a "genre" of music discovered by viznut, which he documented in several youtube videos. 8 | 9 | Evaluator's approach, however, is not purist, and its language is not C. The language contains much of the same syntax, most of the operators, and the same operator precedence, but introduces some additional features that make generating musical sounds a little bit easier and also make real-time MIDI control of the program possible. It also includes several built-in presets that demonstrate all the language features, supports save/load to fxp, and loading a program from a plain text file. 10 | 11 | The basic idea is that a program operating on 64-bit unsigned integers is used to generate every audio sample. The program essentially runs in a while loop that automatically increments the variables t, m, and q before executing the program code each time. 12 | 13 | # How to Build 14 | 15 | - clone https://github.com/ddf/wdl-ol 16 | - create a folder named Projects in the root of the repo 17 | - clone this repo into the Projects folder 18 | - to build the VST version, follow the instructions here to install the VST SDK: https://github.com/ddf/wdl-ol/tree/master/VST_SDK 19 | - to build the VST3 version, follow the instructions to install the VST 3.6.6 SDK: https://github.com/ddf/wdl-ol/tree/master/VST3_SDK, it should not be necessary to modify any project files 20 | - open Evaluator.sln in Visual Studio 2015 or Evaluator.xcodeproj in XCode 9 and build the flavor you are interested in 21 | -------------------------------------------------------------------------------- /app_wrapper/app_main.h: -------------------------------------------------------------------------------- 1 | #ifndef _IPLUGAPP_APP_MAIN_H_ 2 | #define _IPLUGAPP_APP_MAIN_H_ 3 | 4 | #include "IPlugOSDetect.h" 5 | 6 | /* 7 | 8 | Standalone osx/win app wrapper for iPlug, using SWELL 9 | Oli Larkin 2012 10 | 11 | Notes: 12 | 13 | App settings are stored in a .ini file. The location is as follows: 14 | 15 | Windows7: C:\Users\USERNAME\AppData\Local\Evaluator\settings.ini 16 | Windows XP/Vista: C:\Documents and Settings\USERNAME\Local Settings\Application Data\Evaluator\settings.ini 17 | OSX: /Users/USERNAME/Library/Application\ Support/Evaluator/settings.ini 18 | 19 | */ 20 | 21 | #ifdef OS_WIN 22 | #include 23 | #include 24 | 25 | #define DEFAULT_INPUT_DEV "Default Device" 26 | #define DEFAULT_OUTPUT_DEV "Default Device" 27 | 28 | #define DAC_DS 0 29 | #define DAC_ASIO 1 30 | #elif defined OS_OSX 31 | #include "swell.h" 32 | #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) ) 33 | 34 | #define DEFAULT_INPUT_DEV "Built-in Input" 35 | #define DEFAULT_OUTPUT_DEV "Built-in Output" 36 | 37 | #define DAC_COREAUDIO 0 38 | // #define DAC_JACK 1 39 | #endif 40 | 41 | #include "wdltypes.h" 42 | #include "RtAudio.h" 43 | #include "RtMidi.h" 44 | #include 45 | #include 46 | 47 | #include "../Evaluator.h" // change this to match your iplug plugin .h file 48 | 49 | typedef unsigned short UInt16; 50 | 51 | struct AppState 52 | { 53 | // on osx core audio 0 or jack 1 54 | // on windows DS 0 or ASIO 1 55 | UInt16 mAudioDriverType; 56 | 57 | // strings 58 | char mAudioInDev[100]; 59 | char mAudioOutDev[100]; 60 | char mAudioSR[100]; 61 | char mAudioIOVS[100]; 62 | char mAudioSigVS[100]; 63 | 64 | UInt16 mAudioInChanL; 65 | UInt16 mAudioInChanR; 66 | UInt16 mAudioOutChanL; 67 | UInt16 mAudioOutChanR; 68 | UInt16 mAudioInIsMono; 69 | 70 | // strings containing the names of the midi devices 71 | char mMidiInDev[100]; 72 | char mMidiOutDev[100]; 73 | 74 | UInt16 mMidiInChan; 75 | UInt16 mMidiOutChan; 76 | 77 | AppState(): 78 | mAudioDriverType(0), // DS / CoreAudio by default 79 | mAudioInChanL(1), 80 | mAudioInChanR(2), 81 | mAudioOutChanL(1), 82 | mAudioOutChanR(2), 83 | mMidiInChan(0), 84 | mMidiOutChan(0) 85 | { 86 | strcpy(mAudioInDev, DEFAULT_INPUT_DEV); 87 | strcpy(mAudioOutDev, DEFAULT_OUTPUT_DEV); 88 | strcpy(mAudioSR, "44100"); 89 | strcpy(mAudioIOVS, "512"); 90 | strcpy(mAudioSigVS, "32"); 91 | 92 | strcpy(mMidiInDev, "off"); 93 | strcpy(mMidiOutDev, "off"); 94 | } 95 | }; 96 | 97 | extern WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 98 | extern WDL_DLGRET PreferencesDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 99 | extern HINSTANCE gHINST; 100 | extern HWND gHWND; 101 | extern UINT gScrollMessage; 102 | extern IPlug* gPluginInstance; // The iplug plugin instance 103 | 104 | extern std::string GetAudioDeviceName(int idx); 105 | extern int GetAudioDeviceID(char* deviceNameToTest); 106 | 107 | extern void ProbeAudioIO(); 108 | extern bool InitialiseAudio(unsigned int inId, 109 | unsigned int outId, 110 | unsigned int sr, 111 | unsigned int iovs, 112 | unsigned int chnls, 113 | unsigned int inChanL, 114 | unsigned int outChanL 115 | ); 116 | 117 | extern bool AudioSettingsInStateAreEqual(AppState* os, AppState* ns); 118 | extern bool MIDISettingsInStateAreEqual(AppState* os, AppState* ns); 119 | 120 | extern bool TryToChangeAudioDriverType(); 121 | extern bool TryToChangeAudio(); 122 | extern bool ChooseMidiInput(const char* pPortName); 123 | extern bool ChooseMidiOutput(const char* pPortName); 124 | 125 | extern bool AttachGUI(); 126 | 127 | extern RtAudio* gDAC; 128 | extern RtMidiIn *gMidiIn; 129 | extern RtMidiOut *gMidiOut; 130 | 131 | extern AppState *gState; 132 | extern AppState *gTempState; // The state is copied here when the pref dialog is opened, and restored if cancel is pressed 133 | extern AppState *gActiveState; // When the audio driver is started the current state is copied here so that if OK is pressed after APPLY nothing is changed 134 | 135 | extern unsigned int gSigVS; 136 | extern unsigned int gBufIndex; // index for signal vector, loops from 0 to gSigVS 137 | 138 | extern char *gINIPath; // path of ini file 139 | extern void UpdateINI(); 140 | 141 | extern std::vector gAudioInputDevs; 142 | extern std::vector gAudioOutputDevs; 143 | extern std::vector gMIDIInputDevNames; 144 | extern std::vector gMIDIOutputDevNames; 145 | 146 | #endif //_IPLUGAPP_APP_MAIN_H_ 147 | 148 | -------------------------------------------------------------------------------- /app_wrapper/app_resource.h: -------------------------------------------------------------------------------- 1 | // RESOURCE IDS FOR STANDALONE APP 2 | 3 | #ifndef IDC_STATIC 4 | #define IDC_STATIC (-1) 5 | #endif 6 | 7 | #define IDD_DIALOG_MAIN 40001 8 | #define IDD_DIALOG_PREF 40002 9 | #define IDI_ICON1 40003 10 | #define IDR_MENU1 40004 11 | 12 | #define ID_ABOUT 40005 13 | #define ID_PREFERENCES 40006 14 | #define ID_QUIT 40007 15 | 16 | #define IDC_COMBO_AUDIO_DRIVER 40008 17 | #define IDC_COMBO_AUDIO_IN_DEV 40009 18 | #define IDC_COMBO_AUDIO_OUT_DEV 40010 19 | #define IDC_COMBO_AUDIO_IOVS 40011 20 | #define IDC_COMBO_AUDIO_SIGVS 40012 21 | #define IDC_COMBO_AUDIO_SR 40013 22 | #define IDC_COMBO_AUDIO_IN_L 40014 23 | #define IDC_COMBO_AUDIO_IN_R 40015 24 | #define IDC_COMBO_AUDIO_OUT_R 40016 25 | #define IDC_COMBO_AUDIO_OUT_L 40017 26 | #define IDC_COMBO_MIDI_IN_DEV 40018 27 | #define IDC_COMBO_MIDI_OUT_DEV 40019 28 | #define IDC_COMBO_MIDI_IN_CHAN 40020 29 | #define IDC_COMBO_MIDI_OUT_CHAN 40021 30 | #define IDC_BUTTON_ASIO 40022 31 | #define IDC_CB_MONO_INPUT 40023 32 | 33 | #define IDAPPLY 40024 34 | 35 | // some options for the app 36 | 37 | #define ENABLE_SYSEX 0 38 | #define ENABLE_MIDICLOCK 0 39 | #define ENABLE_ACTIVE_SENSING 0 40 | #define NUM_CHANNELS 2 41 | #define N_VECTOR_WAIT 50 42 | #define APP_MULT 1 43 | -------------------------------------------------------------------------------- /app_wrapper/main.mm: -------------------------------------------------------------------------------- 1 | #import 2 | #include "swell.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | return NSApplicationMain(argc, (const char **) argv); 7 | } 8 | 9 | void CenterWindow(HWND hwnd) 10 | { 11 | if (!hwnd) return; 12 | 13 | id turd=(id)hwnd; 14 | 15 | if ([turd isKindOfClass:[NSView class]]) 16 | { 17 | NSWindow *w = [turd window]; 18 | [w center]; 19 | } 20 | if ([turd isKindOfClass:[NSWindow class]]) 21 | { 22 | [turd center]; 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /expression_test/main.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // main.cpp 3 | // expression_test 4 | // 5 | // Created by Damien Quartz on 11/25/16. 6 | // 7 | // 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "../Program.h" 14 | 15 | // Timer from http://stackoverflow.com/questions/1861294/how-to-calculate-execution-time-of-a-code-snippet-in-c 16 | class Timer 17 | { 18 | public: 19 | Timer() : beg_(clock_::now()) {} 20 | void reset() { beg_ = clock_::now(); } 21 | double elapsed() const { 22 | return std::chrono::duration_cast 23 | (clock_::now() - beg_).count(); } 24 | 25 | private: 26 | typedef std::chrono::high_resolution_clock clock_; 27 | typedef std::chrono::duration > second_; 28 | std::chrono::time_point beg_; 29 | }; 30 | 31 | static Program::Value w = 1<<15; 32 | static Program::Value n = 64; 33 | static Program::Value t = 112344324; 34 | static Program::Value m = t / (Program::Value)(44100/1000); 35 | static Program::Value p = 234125150; 36 | 37 | #define EEE_NO_ERROR Program::CE_NONE 38 | #define EEE_PARENTHESIS Program::CE_MISSING_PAREN 39 | #define EEE_WRONG_CHAR Program::CE_UNEXPECTED_CHAR 40 | 41 | static Program::Value $(Program::Value a) 42 | { 43 | Program::Value hr = w/2; 44 | Program::Value r1 = w+1; 45 | double s = sin(2 * M_PI * ((double)(a%r1)/r1)); 46 | return Program::Value(s*hr + hr); 47 | } 48 | 49 | static Program::Value s(Program::Value a) 50 | { 51 | return a%w < w/2 ? 0 : w-1; 52 | } 53 | 54 | static Program::Value F(Program::Value a) 55 | { 56 | double f = round(4.0 * 3.023625 * pow(2.0, (double)a / 12.0)); 57 | return (Program::Value)f; 58 | } 59 | 60 | static Program::Value T(Program::Value a) 61 | { 62 | a *= 2; 63 | return a*((a / w) % 2) + (w - a - 1)*(1 - (a / w) % 2); 64 | } 65 | 66 | // ddf (12/5/16) 67 | // if b is greater than the width of the int being shifted 68 | // and is present in the lamba as a numeric constant 69 | // the optimizer will recognize this fact and optimize out the operation. 70 | // however, when shift right runs in the Expression code, 71 | // it is operating on variables that the optimizer does not know the value of, 72 | // so the operation will actually execute and behavior is that b is wrapped to the width of type being shifted. 73 | static Program::Value sr(Program::Value a, Program::Value b) 74 | { 75 | return a>>(b%64); 76 | } 77 | 78 | struct Test 79 | { 80 | const char * expr; 81 | Program::Value (*eval)(void); 82 | const Program::CompileError error; 83 | }; 84 | 85 | #define EVAL(x) []()->Program::Value{ return x; } 86 | 87 | Test tests[] = { 88 | { "[*] = 1234", EVAL(1234) , EEE_NO_ERROR }, 89 | { "[*] = 1+2", EVAL(1+2), EEE_NO_ERROR }, 90 | { "[*] = 2-1", EVAL(2-1), EEE_NO_ERROR }, 91 | { "[*] = 2*2", EVAL(2*2), EEE_NO_ERROR }, 92 | { "[*] = 2/2", EVAL(2/2), EEE_NO_ERROR }, 93 | { "[*] = 1+2*3", EVAL(1+2*3), EEE_NO_ERROR }, 94 | { "[*] = Fn", EVAL(F(n)), EEE_NO_ERROR }, 95 | { "[*] = Tn", EVAL(T(n)), EEE_NO_ERROR }, 96 | { "[*] = --2", EVAL(2), EEE_NO_ERROR }, 97 | { "[*] = 2--2", EVAL(4), EEE_NO_ERROR }, 98 | { "[*] = 2+-2", EVAL(0), EEE_NO_ERROR }, 99 | { "[*] = 2-+-2", EVAL(4), EEE_NO_ERROR }, 100 | { "[*] = #$2", EVAL(s($(2))), EEE_NO_ERROR }, 101 | { "[*] = $#2", EVAL($(s(2))), EEE_NO_ERROR }, 102 | { "[*] = $(#2)", EVAL($((s(2)))), EEE_NO_ERROR }, 103 | { "[*] = $Fn", EVAL($(F(n))), EEE_NO_ERROR }, 104 | { "[*] = $(Fn)", EVAL($(F(n))), EEE_NO_ERROR }, 105 | { "[*] = (t*Fn)*((t*Fn/w)%2) + (w-t*Fn-1)*(1 - (t*Fn/w)%2)", EVAL((t*F(n))*((t*F(n)/w)%2) + (w-t*F(n)-1)*(1 - (t*F(n)/w)%2)), EEE_NO_ERROR }, 106 | { "[*] = (t*128 + $(t)) | t>>(t%(8*w))/w | t>>128", EVAL((t*128 + $(t)) | t>>(t%(8*w))/w | sr(t,128)), EEE_NO_ERROR }, 107 | { "[*] = (t*64 + $(t^$(m/2000))*$(m/2000)) | t*32", EVAL((t*64 + $(t^$(m/2000))*$(m/2000)) | t*32), EEE_NO_ERROR }, 108 | { "[*] = t*(128*(32-(m/50)%32)) | t*(128*((m/100)%64)) | t*128", EVAL(t*(128*(32-(m/50)%32)) | t*(128*((m/100)%64)) | t*128), EEE_NO_ERROR }, 109 | { "[*] = $(t*F(n + 7*((m/125)%3) - 3*((m/125)%5) + 2*((m/125)%7)))", EVAL($(t*F(n + 7*((m/125)%3) - 3*((m/125)%5) + 2*((m/125)%7)))), EEE_NO_ERROR }, 110 | { "[*] = (t<>t/16 & t>>t/32) / (t%(t/512+1) + 1) * 32", EVAL((t<>p%4", EVAL((1 + $(m)%32) ^ (t*128 & t*64 & t*32) | (p/16)<>p%4), EEE_NO_ERROR }, 113 | { "[*] = $(t*Fn) | t*n/10>>4 ^ p>>(m/250%12)", EVAL($(t*F(n)) | t*n/10>>4 ^ p>>(m/250%12)), EEE_NO_ERROR }, 114 | { "[*] = (t*128 | t*17>>2) | ((t-4500)*64 | (t-4500)*5>>3) | p<<12", EVAL((t*128 | t*17>>2) | ((t-4500)*64 | (t-4500)*5>>3) | p<<12), EEE_NO_ERROR }, 115 | 116 | // test syntax errors 117 | { "[*] = 5*(2*$(1+3+1)", EVAL(0), EEE_PARENTHESIS }, 118 | { "[*] = 5*/2", EVAL(0), Program::CE_FAILED_TO_PARSE_NUMBER }, 119 | }; 120 | 121 | const int testCount = sizeof(tests) / sizeof(Test); 122 | const int testIterations = 1024*8; 123 | 124 | void set(Program& e, Program::Value _t, Program::Value _p) 125 | { 126 | t = _t; 127 | m = t / (Program::Value)(44100/1000); 128 | e.Set('t', t); 129 | e.Set('m', m); 130 | 131 | p = _p; 132 | e.Set('p', _p); 133 | } 134 | 135 | int main(int argc, const char * argv[]) 136 | { 137 | Timer timer; 138 | Program::Char str[1024]; 139 | for(int i = 0; i < testCount; ++i) 140 | { 141 | Test& test = tests[i]; 142 | strcpy(str, test.expr); 143 | std::cout << '"' << str << '"'; 144 | Program::CompileError err; 145 | int errPos; 146 | Program* program = Program::Compile(str, 1024, err, errPos); 147 | if (program != nullptr) 148 | { 149 | program->Set('w', w); 150 | program->Set('n', n); 151 | program->Set('t', t); 152 | program->Set('m', m); 153 | program->Set('p', p); 154 | } 155 | switch( test.error ) 156 | { 157 | case EEE_NO_ERROR: 158 | { 159 | if ( err != EEE_NO_ERROR ) 160 | { 161 | std::cout << " FAILED with error: " << Program::GetErrorString(err) << '\n'; 162 | auto off = errPos - (int)str; 163 | for(int i = 0; i < off; ++i) 164 | { 165 | std::cout << ' '; 166 | } 167 | std::cout << "^\n"; 168 | } 169 | else 170 | { 171 | std::cout << " compiled to " << program->GetInstructionCount() << " instructions."; 172 | set(*program, 0, 0); 173 | double elapsed = 0; 174 | Program::Value result[2]; 175 | for(int i = 0; i < testIterations; ++i) 176 | { 177 | timer.reset(); 178 | program->Run(result, 2); 179 | elapsed += timer.elapsed(); 180 | result[1] = test.eval(); 181 | if ( result[0] != result[1] ) 182 | { 183 | std::cout << " FAILED! " << result[0] << " != " << result[1] << '\n'; 184 | } 185 | assert( result[0] == result[1] ); 186 | set(*program, t+1, result[0]); 187 | } 188 | elapsed /= testIterations; 189 | std::cout << " PASSED with " << (elapsed*1000) << " ms avg execution time" << std::endl; 190 | } 191 | } 192 | break; 193 | 194 | default: 195 | { 196 | if ( err != test.error ) 197 | { 198 | std::cout << " FAILED! " << Program::GetErrorString(err) << " != " << Program::GetErrorString(test.error) << std::endl; 199 | } 200 | else 201 | { 202 | std::cout << " PASSED" << std::endl; 203 | } 204 | } 205 | break; 206 | } 207 | 208 | assert(err == test.error); 209 | } 210 | return 0; 211 | } 212 | -------------------------------------------------------------------------------- /expression_test/win/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | CONSOLE APPLICATION : expression_test Project Overview 3 | ======================================================================== 4 | 5 | AppWizard has created this expression_test application for you. 6 | 7 | This file contains a summary of what you will find in each of the files that 8 | make up your expression_test application. 9 | 10 | 11 | expression_test.vcxproj 12 | This is the main project file for VC++ projects generated using an Application Wizard. 13 | It contains information about the version of Visual C++ that generated the file, and 14 | information about the platforms, configurations, and project features selected with the 15 | Application Wizard. 16 | 17 | expression_test.vcxproj.filters 18 | This is the filters file for VC++ projects generated using an Application Wizard. 19 | It contains information about the association between the files in your project 20 | and the filters. This association is used in the IDE to show grouping of files with 21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 22 | "Source Files" filter). 23 | 24 | expression_test.cpp 25 | This is the main application source file. 26 | 27 | ///////////////////////////////////////////////////////////////////////////// 28 | Other standard files: 29 | 30 | StdAfx.h, StdAfx.cpp 31 | These files are used to build a precompiled header (PCH) file 32 | named expression_test.pch and a precompiled types file named StdAfx.obj. 33 | 34 | ///////////////////////////////////////////////////////////////////////////// 35 | Other notes: 36 | 37 | AppWizard uses "TODO:" comments to indicate parts of the source code you 38 | should add to or customize. 39 | 40 | ///////////////////////////////////////////////////////////////////////////// 41 | -------------------------------------------------------------------------------- /expression_test/win/expression_test.cpp: -------------------------------------------------------------------------------- 1 | // expression_test.cpp : Defines the entry point for the console application. 2 | // 3 | 4 | #include "stdafx.h" 5 | #include 6 | 7 | #pragma warning(disable:4996) 8 | #pragma warning(disable:4146) 9 | 10 | #include "../../Program.cpp" 11 | #include "../main.cpp" 12 | 13 | -------------------------------------------------------------------------------- /expression_test/win/expression_test.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {5FE71BE5-DADD-4F82-9F38-AFF27849AC57} 23 | Win32Proj 24 | expression_test 25 | 8.1 26 | 27 | 28 | 29 | Application 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | Application 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | Application 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | Application 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | $(SolutionDir)build-win\test\$(Platform)\bin\ 75 | $(SolutionDir)build-win\test\$(Platform)\$(Configuration)\ 76 | 77 | 78 | true 79 | $(SolutionDir)build-win\test\$(Platform)\bin\ 80 | $(SolutionDir)build-win\test\$(Platform)\$(Configuration)\ 81 | 82 | 83 | false 84 | $(SolutionDir)build-win\test\$(Platform)\bin\ 85 | $(SolutionDir)build-win\test\$(Platform)\$(Configuration)\ 86 | 87 | 88 | false 89 | $(SolutionDir)build-win\test\$(Platform)\bin\ 90 | $(SolutionDir)build-win\test\$(Platform)\$(Configuration)\ 91 | 92 | 93 | 94 | Use 95 | Level3 96 | Disabled 97 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 98 | true 99 | 100 | 101 | Console 102 | true 103 | 104 | 105 | 106 | 107 | NotUsing 108 | Level3 109 | Disabled 110 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS 111 | true 112 | 113 | 114 | Console 115 | true 116 | 117 | 118 | 119 | 120 | Level3 121 | Use 122 | MaxSpeed 123 | true 124 | true 125 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 126 | true 127 | 128 | 129 | Console 130 | true 131 | true 132 | true 133 | 134 | 135 | 136 | 137 | TurnOffAllWarnings 138 | NotUsing 139 | MaxSpeed 140 | true 141 | true 142 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS 143 | true 144 | 145 | 146 | Console 147 | true 148 | true 149 | true 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | Create 163 | Create 164 | Create 165 | Create 166 | 167 | 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /expression_test/win/expression_test.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | 29 | 30 | Source Files 31 | 32 | 33 | Source Files 34 | 35 | 36 | -------------------------------------------------------------------------------- /expression_test/win/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // expression_test.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | 6 | #include "stdafx.h" 7 | 8 | // TODO: reference any additional headers you need in STDAFX.H 9 | // and not in this file 10 | -------------------------------------------------------------------------------- /expression_test/win/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #include 11 | #include 12 | 13 | 14 | 15 | // TODO: reference additional headers your program requires here 16 | -------------------------------------------------------------------------------- /expression_test/win/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /installer/Evaluator-installer-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/installer/Evaluator-installer-bg.png -------------------------------------------------------------------------------- /installer/Evaluator.iss: -------------------------------------------------------------------------------- 1 | [Setup] 2 | AppName=Evaluator 3 | AppVersion=1.1.0 4 | AppPublisher=Damien Quartz 5 | AppPublisherURL=https://damikyu.itch.io 6 | DefaultDirName={pf}\Evaluator 7 | DefaultGroupName=Evaluator 8 | Compression=lzma2 9 | SolidCompression=yes 10 | OutputDir=.\ 11 | ArchitecturesInstallIn64BitMode=x64 12 | OutputBaseFilename=Evaluator Installer 13 | LicenseFile=license.rtf 14 | SetupLogging=yes 15 | 16 | [Types] 17 | Name: "full"; Description: "Full installation" 18 | Name: "custom"; Description: "Custom installation"; Flags: iscustom 19 | 20 | [Components] 21 | Name: "app"; Description: "Standalone application (.exe)"; Types: full custom; 22 | Name: "vst2_32"; Description: "32-bit VST2 Plugin (.dll)"; Types: full custom; 23 | Name: "vst2_64"; Description: "64-bit VST2 Plugin (.dll)"; Types: full custom; Check: Is64BitInstallMode; 24 | Name: "vst3_32"; Description: "32-bit VST3 Plugin (.vst3)"; Types: full custom; 25 | Name: "vst3_64"; Description: "64-bit VST3 Plugin (.vst3)"; Types: full custom; Check: Is64BitInstallMode; 26 | ;Name: "rtas_32"; Description: "32-bit RTAS Plugin (.dpm)"; Types: full custom; 27 | ;Name: "aax_32"; Description: "32-bit AAX Plugin (.aaxplugin)"; Types: full custom; 28 | ;Name: "aax_64"; Description: "64-bit AAX Plugin (.aaxplugin)"; Types: full custom; Check: Is64BitInstallMode; 29 | Name: "manual"; Description: "User guide"; Types: full custom; Flags: fixed 30 | 31 | [Files] 32 | Source: "..\build-win\app\Win32\bin\Evaluator.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode; Components:app; Flags: ignoreversion; 33 | Source: "..\build-win\app\x64\bin\Evaluator.exe"; DestDir: "{app}"; Check: Is64BitInstallMode; Components:app; Flags: ignoreversion; 34 | 35 | Source: "..\build-win\vst2\Win32\bin\Evaluator.dll"; DestDir: {code:GetVST2Dir_32}; Check: not Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion; 36 | Source: "..\build-win\vst2\Win32\bin\Evaluator.dll"; DestDir: {code:GetVST2Dir_32}; Check: Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion; 37 | Source: "..\build-win\vst2\x64\bin\Evaluator.dll"; DestDir: {code:GetVST2Dir_64}; Check: Is64BitInstallMode; Components:vst2_64; Flags: ignoreversion; 38 | 39 | Source: "..\build-win\vst3\Win32\bin\Evaluator.vst3"; DestDir: "{cf}\VST3\"; Check: not Is64BitInstallMode; Components:vst3_32; Flags: ignoreversion; 40 | Source: "..\build-win\vst3\Win32\bin\Evaluator.vst3"; DestDir: "{cf32}\VST3\"; Check: Is64BitInstallMode; Components:vst3_32; Flags: ignoreversion; 41 | Source: "..\build-win\vst3\x64\bin\Evaluator.vst3"; DestDir: "{cf64}\VST3\"; Check: Is64BitInstallMode; Components:vst3_64; Flags: ignoreversion; 42 | 43 | ;Source: "..\build-win\rtas\bin\Evaluator.dpm"; DestDir: "{cf32}\Digidesign\DAE\Plug-Ins\"; Components:rtas_32; Flags: ignoreversion; 44 | ;Source: "..\build-win\rtas\bin\Evaluator.dpm.rsr"; DestDir: "{cf32}\Digidesign\DAE\Plug-Ins\"; Components:rtas_32; Flags: ignoreversion; 45 | 46 | ;Source: "..\build-win\aax\bin\Evaluator.aaxplugin\*.*"; DestDir: "{cf32}\Avid\Audio\Plug-Ins\Evaluator.aaxplugin\"; Components:aax_32; Flags: ignoreversion recursesubdirs; 47 | ;Source: "..\build-win\aax\bin\Evaluator.aaxplugin\*.*"; DestDir: "{cf}\Avid\Audio\Plug-Ins\Evaluator.aaxplugin\"; Components:aax_64; Flags: ignoreversion recursesubdirs; 48 | 49 | Source: "..\manual\Evaluator_manual.pdf"; DestDir: "{app}" 50 | Source: "changelog.txt"; DestDir: "{app}" 51 | Source: "readmewin.rtf"; DestDir: "{app}"; DestName: "readme.rtf"; Flags: isreadme 52 | 53 | [Icons] 54 | Name: "{group}\Evaluator"; Filename: "{app}\Evaluator.exe" 55 | Name: "{group}\User guide"; Filename: "{app}\Evaluator_manual.pdf" 56 | Name: "{group}\Changelog"; Filename: "{app}\changelog.txt" 57 | ;Name: "{group}\readme"; Filename: "{app}\readme.rtf" 58 | Name: "{group}\Uninstall Evaluator"; Filename: "{app}\unins000.exe" 59 | 60 | [INI] 61 | Filename: "{localappdata}\Evaluator\settings.ini"; Section: "install"; Flags: uninsdeletesection 62 | Filename: "{localappdata}\Evaluator\settings.ini"; Section: "install"; Key: "support path"; String: "{app}" 63 | 64 | ;[Dirs] 65 | ;Name: {cf}\Digidesign\DAE\Plugins\ 66 | 67 | [Code] 68 | var 69 | OkToCopyLog : Boolean; 70 | VST2DirPage_32: TInputDirWizardPage; 71 | VST2DirPage_64: TInputDirWizardPage; 72 | 73 | procedure InitializeWizard; 74 | begin 75 | if IsWin64 then begin 76 | VST2DirPage_64 := CreateInputDirPage(wpSelectDir, 77 | 'Confirm 64-Bit VST2 Plugin Directory', '', 78 | 'Select the folder in which setup should install the 64-bit VST2 Plugin, then click Next.', 79 | False, ''); 80 | VST2DirPage_64.Add(''); 81 | VST2DirPage_64.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\'); 82 | 83 | VST2DirPage_32 := CreateInputDirPage(wpSelectDir, 84 | 'Confirm 32-Bit VST2 Plugin Directory', '', 85 | 'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.', 86 | False, ''); 87 | VST2DirPage_32.Add(''); 88 | VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}\'); 89 | end else begin 90 | VST2DirPage_32 := CreateInputDirPage(wpSelectDir, 91 | 'Confirm 32-Bit VST2 Plugin Directory', '', 92 | 'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.', 93 | False, ''); 94 | VST2DirPage_32.Add(''); 95 | VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\'); 96 | end; 97 | end; 98 | 99 | function GetVST2Dir_32(Param: String): String; 100 | begin 101 | Result := VST2DirPage_32.Values[0] 102 | end; 103 | 104 | function GetVST2Dir_64(Param: String): String; 105 | begin 106 | Result := VST2DirPage_64.Values[0] 107 | end; 108 | 109 | procedure CurStepChanged(CurStep: TSetupStep); 110 | begin 111 | if CurStep = ssDone then 112 | OkToCopyLog := True; 113 | end; 114 | 115 | procedure DeinitializeSetup(); 116 | begin 117 | if OkToCopyLog then 118 | FileCopy (ExpandConstant ('{log}'), ExpandConstant ('{app}\InstallationLogFile.log'), FALSE); 119 | RestartReplace (ExpandConstant ('{log}'), ''); 120 | end; 121 | 122 | [UninstallDelete] 123 | Type: files; Name: "{app}\InstallationLogFile.log" -------------------------------------------------------------------------------- /installer/changelog.txt: -------------------------------------------------------------------------------- 1 | Evaluator changelog 2 | https://damikyu.itch.io/evaluator 3 | 4 | 01/30/19 - v1.1.0 5 | 6 | New and Changed: 7 | 8 | * increased overall output volume of the Standalone version to match the Plugin versions 9 | * the Plugin is now an Instrument instead of an Effect, so it can be used in DAWs that will only send MIDI to Instruments (eg Fruity) 10 | * improved conditional operator so it uses branching and can be used without the colon 11 | * added ==, !=, <=, and >= relational operators 12 | * improved VOL and V knobs so that hovering over the knob displays the current value above it 13 | * macOS builds are now only 64-bit (macOS no longer supports building 32-bit) 14 | 15 | Bug Fixes: 16 | 17 | * better handling of audio intialization failure 18 | * fixed handling of line-endings in the Program Window 19 | * fixed line-spacing on macOS in the Program Window 20 | * fixed handling of overlapped MIDI notes 21 | 22 | 02/03/18 - v1.0.1 23 | 24 | * fixed implementation of R operator 25 | * fixed possible MIDI related crash at startup in Windows 26 | * improved language syntax reference 27 | * improved UI look and text box behavior 28 | 29 | 01/09/18 - v1.0.0 initial release -------------------------------------------------------------------------------- /installer/intro.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830 2 | \cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} 3 | {\colortbl;\red255\green255\blue255;} 4 | {\*\expandedcolortbl;;} 5 | \paperw11900\paperh16840\margl1440\margr1440\vieww14440\viewh8920\viewkind0 6 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 7 | 8 | \f0\fs26 \cf0 I hope you enjoy using Evaluator as much as I did making it. Please let me know how you use it and if you make any interesting recordings, I'd love to hear them.\ 9 | \ 10 | Damien Quartz\ 11 | \ 12 | https://damikyu.itch.io/evaluator} -------------------------------------------------------------------------------- /installer/license.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fswiss\fcharset0 ArialMT;}} 2 | {\colortbl ;\red0\green0\blue255;} 3 | {\*\generator Riched20 10.0.17134}\viewkind4\uc1 4 | \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\b\f0\fs20\lang9 Caveat:\b0\par 5 | This software is provided as-is and by installing this software you agree to use it at your own risk. The developer cannot be held responsible for any damages caused as a result of its use.\par 6 | \par 7 | \b Distribution:\b0\par 8 | You are not permitted to distribute the software without the developer's permission. This includes, but is not limited to the distribution on magazine covers or software review websites.\par 9 | \par 10 | \b Multiple Installations:\b0 You are licensed to install and use the software on any computer you need to use it on, as long as you remove it afterwards (if it is a shared machine).\par 11 | \par 12 | \b Evaluator is \'a9 Copyright Damien Quartz 2018-2019\par 13 | \b0\par 14 | {{\field{\*\fldinst{HYPERLINK https://damikyu.itch.io/evaluator }}{\fldrslt{https://damikyu.itch.io/evaluator\ul0\cf0}}}}\f0\fs20\par 15 | \par 16 | VST and VST3 are trademarks of Steinberg Media Technologies GmbH. \par 17 | 18 | \pard\sa200\sl276\slmult1 Audio Unit is a trademark of Apple, Inc.\par 19 | } 20 | -------------------------------------------------------------------------------- /installer/readmeosx.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 LucidaGrande;}{\f1\fnil\fcharset0 Monaco;}} 2 | {\*\generator Riched20 10.0.17134}\viewkind4\uc1 3 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\f0\fs26\lang9 The plugins will be installed in your system plugin folders which will make them available to all user accounts on your computer.\f1\fs20 \f0\fs26 The standalone will be installed in the system Applications folder. \par 4 | \par 5 | If you don't want to install all components, click "Customize" on the "Installation Type" page.\par 6 | \par 7 | The plugins and app support only 64bit operation.\par 8 | \par 9 | If you experience any problems with Evaluator, please contact me at the following address:\par 10 | \par 11 | 12 | \pard\sa200\sl276\slmult1 support@compartmental.net\par 13 | } 14 | -------------------------------------------------------------------------------- /installer/readmewin.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830 2 | {\fonttbl\f0\fnil\fcharset0 LucidaGrande-Bold;\f1\fnil\fcharset0 LucidaGrande;} 3 | {\colortbl;\red255\green255\blue255;} 4 | {\*\expandedcolortbl;;} 5 | \vieww12000\viewh14200\viewkind0 6 | \deftab720 7 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\partightenfactor0 8 | 9 | \f0\b\fs26 \cf0 Thanks for installing Evaluator 10 | \f1\b0 \ 11 | \ 12 | I hope you enjoy using Evaluator as much as I did making it. Please let me know how you use it and if you make any interesting recordings, I'd love to hear them.\ 13 | \ 14 | Damien Quartz\ 15 | \ 16 | https://damikyu.itch.io/evaluator\ 17 | \ 18 | If you experience any problems with Evaluator, please contact me at the following address:\ 19 | \ 20 | \pard\pardeftab720\partightenfactor0 21 | 22 | \f0\b \cf0 support@compartmental.net 23 | \f1\b0 \ 24 | } -------------------------------------------------------------------------------- /interface/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/background.png -------------------------------------------------------------------------------- /interface/icon.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/icon.pdn -------------------------------------------------------------------------------- /interface/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/icon.png -------------------------------------------------------------------------------- /interface/itch_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/itch_icon.png -------------------------------------------------------------------------------- /interface/numberbox_arrow.pxm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/numberbox_arrow.pxm -------------------------------------------------------------------------------- /interface/numberbox_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/numberbox_arrow_down.png -------------------------------------------------------------------------------- /interface/numberbox_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/numberbox_arrow_up.png -------------------------------------------------------------------------------- /interface/numberbox_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/numberbox_background.png -------------------------------------------------------------------------------- /interface/numberbox_background.pxm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/numberbox_background.pxm -------------------------------------------------------------------------------- /interface/vslider_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/vslider_background.png -------------------------------------------------------------------------------- /interface/vslider_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/interface/vslider_handle.png -------------------------------------------------------------------------------- /makedist-mac.command: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | #shell script to automate IPlug Project build, code-signing and packaging on OSX 4 | 5 | BASEDIR=$(dirname $0) 6 | cd $BASEDIR 7 | 8 | #--------------------------------------------------------------------------------------------------------- 9 | 10 | #variables 11 | 12 | VERSION=`echo | grep PLUG_VER resource.h` 13 | VERSION=${VERSION//\#define PLUG_VER } 14 | VERSION=${VERSION//\'} 15 | MAJOR_VERSION=$(($VERSION & 0xFFFF0000)) 16 | MAJOR_VERSION=$(($MAJOR_VERSION >> 16)) 17 | MINOR_VERSION=$(($VERSION & 0x0000FF00)) 18 | MINOR_VERSION=$(($MINOR_VERSION >> 8)) 19 | BUG_FIX=$(($VERSION & 0x000000FF)) 20 | 21 | FULL_VERSION=$MAJOR_VERSION"."$MINOR_VERSION"."$BUG_FIX 22 | 23 | PLUGIN_NAME=`echo | grep BUNDLE_NAME resource.h` 24 | PLUGIN_NAME=${PLUGIN_NAME//\#define BUNDLE_NAME } 25 | PLUGIN_NAME=${PLUGIN_NAME//\"} 26 | 27 | # prompt for whether we should publish to itch after building 28 | PUBLISH= 29 | echo "Publish to Itch? (y/n): \c" 30 | read PUBLISH 31 | 32 | BUILD_FOLDER="" 33 | 34 | if [ "$PUBLISH" == "y" ] 35 | then 36 | BUILD_FOLDER=$HOME/dev/Builds/$PLUGIN_NAME 37 | echo "Will publish to $BUILD_FOLDER" 38 | fi 39 | 40 | # work out the paths to the binaries 41 | 42 | VST2=`echo | grep VST_FOLDER ../../common.xcconfig` 43 | VST2=${VST2//\VST_FOLDER = }/$PLUGIN_NAME.vst 44 | 45 | VST3=`echo | grep VST3_FOLDER ../../common.xcconfig` 46 | VST3=${VST3//\VST3_FOLDER = }/$PLUGIN_NAME.vst3 47 | 48 | AU=`echo | grep AU_FOLDER ../../common.xcconfig` 49 | AU=${AU//\AU_FOLDER = }/$PLUGIN_NAME.component 50 | 51 | APP=`echo | grep APP_FOLDER ../../common.xcconfig` 52 | APP=${APP//\APP_FOLDER = }/$PLUGIN_NAME.app 53 | 54 | # Dev build folder 55 | #RTAS=`echo | grep RTAS_FOLDER ../../common.xcconfig` 56 | #RTAS=${RTAS//\RTAS_FOLDER = }/$PLUGIN_NAME.dpm 57 | #RTAS_FINAL="/Library/Application Support/Digidesign/Plug-Ins/$PLUGIN_NAME.dpm" 58 | 59 | # Dev build folder 60 | #AAX=`echo | grep AAX_FOLDER ../../common.xcconfig` 61 | #AAX=${AAX//\AAX_FOLDER = }/$PLUGIN_NAME.aaxplugin 62 | #AAX_FINAL="/Library/Application Support/Avid/Audio/Plug-Ins/$PLUGIN_NAME.aaxplugin" 63 | 64 | PKG="installer/build-mac/$PLUGIN_NAME Installer.pkg" 65 | PKG_US="installer/build-mac/$PLUGIN_NAME Installer.unsigned.pkg" 66 | 67 | CERT_ID=`echo | grep CERTIFICATE_ID ../../common.xcconfig` 68 | CERT_ID=${CERT_ID//\CERTIFICATE_ID = } 69 | 70 | echo "making $PLUGIN_NAME version $FULL_VERSION mac distribution..." 71 | echo "" 72 | 73 | #--------------------------------------------------------------------------------------------------------- 74 | 75 | #call python script to update version numbers 76 | ./update_version.py 77 | 78 | #here you can use the touch command to force xcode to rebuild 79 | #touch MyPlugin.h 80 | 81 | #--------------------------------------------------------------------------------------------------------- 82 | 83 | #if you are zipping the binaries, remove existing dist folder 84 | #if [ -d installer/dist ] 85 | #then 86 | # rm -R installer/dist 87 | #fi 88 | 89 | #mkdir installer/dist 90 | 91 | #remove existing binaries 92 | if [ -d $APP ] 93 | then 94 | sudo rm -f -R -f $APP 95 | fi 96 | 97 | if [ -d $AU ] 98 | then 99 | sudo rm -f -R $AU 100 | fi 101 | 102 | if [ -d $VST2 ] 103 | then 104 | sudo rm -f -R $VST2 105 | fi 106 | 107 | if [ -d $VST3 ] 108 | then 109 | sudo rm -f -R $VST3 110 | fi 111 | 112 | if [ -d "${RTAS}" ] 113 | then 114 | sudo rm -f -R "${RTAS}" 115 | fi 116 | 117 | if [ -d "${RTAS_FINAL}" ] 118 | then 119 | sudo rm -f -R "${RTAS_FINAL}" 120 | fi 121 | 122 | if [ -d "${AAX}" ] 123 | then 124 | sudo rm -f -R "${AAX}" 125 | fi 126 | 127 | if [ -d "${AAX_FINAL}" ] 128 | then 129 | sudo rm -f -R "${AAX_FINAL}" 130 | fi 131 | 132 | #--------------------------------------------------------------------------------------------------------- 133 | 134 | # build xcode project. Change target to build individual formats 135 | xcodebuild -project $PLUGIN_NAME.xcodeproj -xcconfig $PLUGIN_NAME.xcconfig -target "All" -configuration Release 2> ./build-mac.log 136 | 137 | if [ -s build-mac.log ] 138 | then 139 | echo "build failed due to following errors:" 140 | echo "" 141 | cat build-mac.log 142 | exit 1 143 | else 144 | rm build-mac.log 145 | fi 146 | 147 | #--------------------------------------------------------------------------------------------------------- 148 | 149 | #echo "setting icons" 150 | #echo "" 151 | ./setfileicon.py resources/$PLUGIN_NAME.icns $AU 152 | ./setfileicon.py resources/$PLUGIN_NAME.icns $VST2 153 | ./setfileicon.py resources/$PLUGIN_NAME.icns $VST3 154 | #setfileicon resources/$PLUGIN_NAME.icns "${RTAS}" 155 | #setfileicon resources/$PLUGIN_NAME.icns "${AAX}" 156 | 157 | #--------------------------------------------------------------------------------------------------------- 158 | 159 | #strip debug symbols from binaries 160 | 161 | echo "striping binaries" 162 | strip -x $AU/Contents/MacOS/$PLUGIN_NAME 163 | strip -x $VST2/Contents/MacOS/$PLUGIN_NAME 164 | strip -x $VST3/Contents/MacOS/$PLUGIN_NAME 165 | strip -x $APP/Contents/MacOS/$PLUGIN_NAME 166 | #strip -x "${AAX}/Contents/MacOS/$PLUGIN_NAME" 167 | #strip -x "${RTAS}/Contents/MacOS/$PLUGIN_NAME" 168 | 169 | #--------------------------------------------------------------------------------------------------------- 170 | 171 | #ProTools stuff 172 | 173 | #echo "copying RTAS PLUGIN_NAME from 3PDev to main RTAS folder" 174 | #sudo cp -p -R "${RTAS}" "${RTAS_FINAL}" 175 | 176 | #echo "copying AAX PLUGIN_NAME from 3PDev to main AAX folder" 177 | #sudo cp -p -R "${AAX}" "${AAX_FINAL}" 178 | 179 | #echo "code sign AAX binary" 180 | #... consult PACE documentation 181 | 182 | #--------------------------------------------------------------------------------------------------------- 183 | 184 | #Mac AppStore stuff 185 | 186 | #xcodebuild -project $PLUGIN_NAME.xcodeproj -xcconfig $PLUGIN_NAME.xcconfig -target "APP" -configuration Release 2> ./build-mac.log 187 | 188 | #echo "code signing app for appstore" 189 | #echo "" 190 | #codesign -f -s "3rd Party Mac Developer Application: ""${CERT_ID}" $APP --entitlements resources/$PLUGIN_NAME.entitlements 191 | 192 | #echo "building pkg for app store" 193 | #echo "" 194 | #productbuild \ 195 | # --component $APP /Applications \ 196 | # --sign "3rd Party Mac Developer Installer: ""${CERT_ID}" \ 197 | # --product "/Applications/$PLUGIN_NAME.app/Contents/Info.plist" installer/$PLUGIN_NAME.pkg 198 | 199 | #--------------------------------------------------------------------------------------------------------- 200 | 201 | #10.8 Gatekeeper/Developer ID stuff 202 | 203 | echo "code app binary for Gatekeeper on 10.8" 204 | echo "" 205 | codesign -f -s "Developer ID Application: ""${CERT_ID}" $APP 206 | 207 | #TODO: code-sign plug-in binaries too? 208 | 209 | #--------------------------------------------------------------------------------------------------------- 210 | 211 | # installer, uses Packages http://s.sudre.free.fr/Software/Packages/about.html 212 | sudo sudo rm -R -f installer/$PLUGIN_NAME-mac.dmg 213 | 214 | echo "building installer" 215 | echo "" 216 | packagesbuild installer/$PLUGIN_NAME.pkgproj 217 | 218 | echo "code-sign installer for Gatekeeper on 10.8" 219 | echo "" 220 | mv "${PKG}" "${PKG_US}" 221 | productsign --sign "Developer ID Installer: ""${CERT_ID}" "${PKG_US}" "${PKG}" 222 | 223 | rm -R -f "${PKG_US}" 224 | 225 | #set installer icon 226 | ./setfileicon.py resources/$PLUGIN_NAME.icns "${PKG}" 227 | 228 | #--------------------------------------------------------------------------------------------------------- 229 | 230 | # dmg, can use dmgcanvas http://www.araelium.com/dmgcanvas/ to make a nice dmg 231 | 232 | echo "building dmg" 233 | echo "" 234 | 235 | if [ -d installer/$PLUGIN_NAME.dmgCanvas ] 236 | then 237 | dmgcanvas installer/$PLUGIN_NAME.dmgCanvas installer/$PLUGIN_NAME-mac.dmg 238 | else 239 | hdiutil create installer/$PLUGIN_NAME.dmg -srcfolder installer/build-mac/ -ov -anyowners -volname $PLUGIN_NAME 240 | 241 | if [ -f installer/$PLUGIN_NAME-mac.dmg ] 242 | then 243 | rm -f installer/$PLUGIN_NAME-mac.dmg 244 | fi 245 | 246 | hdiutil convert installer/$PLUGIN_NAME.dmg -format UDZO -o installer/$PLUGIN_NAME-mac.dmg 247 | sudo rm -R -f installer/$PLUGIN_NAME.dmg 248 | fi 249 | 250 | sudo rm -R -f installer/build-mac/ 251 | 252 | #--------------------------------------------------------------------------------------------------------- 253 | # zip 254 | 255 | # echo "copying binaries..." 256 | # echo "" 257 | # cp -R $AU installer/dist/$PLUGIN_NAME.component 258 | # cp -R $VST2 installer/dist/$PLUGIN_NAME.vst 259 | # cp -R $VST3 installer/dist/$PLUGIN_NAME.vst3 260 | # cp -R $RTAS installer/dist/$PLUGIN_NAME.dpm 261 | # cp -R $AAX installer/dist/$PLUGIN_NAME.aaxplugin 262 | # cp -R $APP installer/dist/$PLUGIN_NAME.app 263 | # 264 | # echo "zipping binaries..." 265 | # echo "" 266 | # ditto -c -k installer/dist installer/$PLUGIN_NAME-mac.zip 267 | # rm -R installer/dist 268 | 269 | #--------------------------------------------------------------------------------------------------------- 270 | # itch 271 | 272 | if [ "$BUILD_FOLDER" != "" ] 273 | then 274 | echo "Publishing to Itch..." 275 | cp -R -v $APP $BUILD_FOLDER/App/ 276 | cp -R -v manual/"$PLUGIN_NAME"_manual.pdf $BUILD_FOLDER/App/ 277 | cp -R -v installer/$PLUGIN_NAME-mac.dmg $BUILD_FOLDER/Installer/ 278 | echo $FULL_VERSION > $BUILD_FOLDER/version.txt 279 | cd $BUILD_FOLDER 280 | ./publish-itch.command 281 | fi 282 | 283 | echo "done" 284 | -------------------------------------------------------------------------------- /makedist-win.bat: -------------------------------------------------------------------------------- 1 | echo off 2 | 3 | REM - batch file to build VS2010 project and zip the resulting binaries (or make installer) 4 | REM - updating version numbers requires python and python path added to %PATH% env variable 5 | REM - zipping requires 7zip in %ProgramFiles%\7-Zip\7z.exe 6 | REM - building installer requires innotsetup in "%ProgramFiles(x86)%\Inno Setup 5\iscc" 7 | REM - AAX codesigning requires ashelper tool added to %PATH% env variable and aax.key/.crt in .\..\..\..\Certificates\ 8 | 9 | echo Making Evaluator win distribution ... 10 | 11 | set /P PUBLISH=Publish to Itch? (y/n): 12 | 13 | echo ------------------------------------------------------------------ 14 | echo Updating version numbers ... 15 | 16 | call python update_version.py 17 | 18 | echo ------------------------------------------------------------------ 19 | echo Building ... 20 | 21 | if exist "%ProgramFiles(x86)%" (goto 64-Bit) else (goto 32-Bit) 22 | 23 | :32-Bit 24 | echo 32-Bit O/S detected 25 | call "%ProgramFiles%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" 26 | goto END 27 | 28 | :64-Bit 29 | echo 64-Bit Host O/S detected 30 | call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" 31 | goto END 32 | :END 33 | 34 | REM - set preprocessor macros like this, for instance to enable demo build: 35 | REM - SET CMDLINE_DEFINES="DEMO_VERSION" 36 | 37 | REM - Could build individual targets like this: 38 | REM - msbuild Evaluator-app.vcxproj /p:configuration=release /p:platform=win32 39 | 40 | REM - do a clean and build for both platforms to ensure we don't build with any old object files that might have been from a debug build 41 | msbuild Evaluator.sln /t:Clean,Build /p:configuration=release /p:platform=win32 /nologo /noconsolelogger /fileLogger /v:quiet /flp:logfile=build-win.log;errorsonly 42 | msbuild Evaluator.sln /t:Clean,Build /p:configuration=release /p:platform=x64 /nologo /noconsolelogger /fileLogger /v:quiet /flp:logfile=build-win.log;errorsonly;append 43 | 44 | REM echo ------------------------------------------------------------------ 45 | REM echo Code sign aax binary... 46 | REM - x86 47 | REM - x64 48 | 49 | REM - Make Installer (InnoSetup) 50 | 51 | echo ------------------------------------------------------------------ 52 | echo Making Installer ... 53 | 54 | if exist "%ProgramFiles(x86)%" (goto 64-Bit-is) else (goto 32-Bit-is) 55 | 56 | :32-Bit-is 57 | "%ProgramFiles%\Inno Setup 5\iscc" ".\installer\Evaluator.iss" 58 | goto END-is 59 | 60 | :64-Bit-is 61 | "%ProgramFiles(x86)%\Inno Setup 5\iscc" ".\installer\Evaluator.iss" 62 | goto END-is 63 | 64 | :END-is 65 | 66 | REM - ZIP 67 | REM - "%ProgramFiles%\7-Zip\7z.exe" a .\installer\Evaluator-win-32bit.zip .\build-win\app\win32\bin\Evaluator.exe .\build-win\vst3\win32\bin\Evaluator.vst3 .\build-win\vst2\win32\bin\Evaluator.dll .\build-win\rtas\bin\Evaluator.dpm .\build-win\rtas\bin\Evaluator.dpm.rsr .\build-win\aax\bin\Evaluator.aaxplugin* .\installer\license.rtf .\installer\readmewin.rtf 68 | REM - "%ProgramFiles%\7-Zip\7z.exe" a .\installer\Evaluator-win-64bit.zip .\build-win\app\x64\bin\Evaluator.exe .\build-win\vst3\x64\bin\Evaluator.vst3 .\build-win\vst2\x64\bin\Evaluator.dll .\installer\license.rtf .\installer\readmewin.rtf 69 | 70 | if "%PUBLISH%" NEQ "y" goto LOG 71 | 72 | echo ------------------------------------------------------------------ 73 | echo copying files to builds folder... 74 | 75 | set BUILD_FOLDER=..\..\..\Builds\Evaluator 76 | 77 | xcopy /Y /F version.txt %BUILD_FOLDER%\version.txt 78 | xcopy /Y /F .\build-win\app\win32\bin\Evaluator.exe %BUILD_FOLDER%\App32\Evaluator.exe 79 | xcopy /Y /F .\manual\Evaluator_manual.pdf %BUILD_FOLDER%\App32\Evaluator_manual.pdf 80 | xcopy /Y /F .\build-win\app\x64\bin\Evaluator.exe %BUILD_FOLDER%\App64\Evaluator.exe 81 | xcopy /Y /F .\manual\Evaluator_manual.pdf %BUILD_FOLDER%\App64\Evaluator_manual.pdf 82 | xcopy /Y /F ".\installer\Evaluator Installer.exe" "%BUILD_FOLDER%\Installer\Evaluator Installer.exe" 83 | 84 | pushd %BUILD_FOLDER% 85 | call .\publish-itch.bat 86 | popd 87 | 88 | :LOG 89 | 90 | echo ------------------------------------------------------------------ 91 | echo Printing log file to console... 92 | 93 | type build-win.log 94 | 95 | pause -------------------------------------------------------------------------------- /manual/Evaluator_manual.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/Evaluator_manual.odt -------------------------------------------------------------------------------- /manual/Evaluator_manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/Evaluator_manual.pdf -------------------------------------------------------------------------------- /manual/audio-midi-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/audio-midi-setup.png -------------------------------------------------------------------------------- /manual/compile_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/compile_error.png -------------------------------------------------------------------------------- /manual/interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/interface.png -------------------------------------------------------------------------------- /manual/memory_sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/memory_sequence.png -------------------------------------------------------------------------------- /manual/presets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/presets.png -------------------------------------------------------------------------------- /manual/saw_wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/saw_wave.png -------------------------------------------------------------------------------- /manual/scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/scope.png -------------------------------------------------------------------------------- /manual/syntax_reference.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/syntax_reference.png -------------------------------------------------------------------------------- /manual/watches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/manual/watches.png -------------------------------------------------------------------------------- /oink-oink-weird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/oink-oink-weird.png -------------------------------------------------------------------------------- /reaper/drum-break.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/reaper/drum-break.wav -------------------------------------------------------------------------------- /reaper/drum-break.wav.reapeaks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/reaper/drum-break.wav.reapeaks -------------------------------------------------------------------------------- /resource.h: -------------------------------------------------------------------------------- 1 | #define PLUG_MFR "Damien Quartz" 2 | #define PLUG_NAME "Evaluator" 3 | 4 | #define PLUG_CLASS_NAME Evaluator 5 | 6 | #define BUNDLE_DOMAIN "net" 7 | #define BUNDLE_MFR "compartmental" 8 | #define BUNDLE_NAME "Evaluator" 9 | 10 | #define PLUG_ENTRY Evaluator_Entry 11 | #define PLUG_VIEW_ENTRY Evaluator_ViewEntry 12 | 13 | #define PLUG_ENTRY_STR "Evaluator_Entry" 14 | #define PLUG_VIEW_ENTRY_STR "Evaluator_ViewEntry" 15 | 16 | #define VIEW_CLASS Evaluator_View 17 | #define VIEW_CLASS_STR "Evaluator_View" 18 | 19 | // Format 0xMAJR.MN.BG - in HEX! so version 10.1.5 would be 0x000A0105 20 | #define PLUG_VER 0x00010100 21 | #define VST3_VER_STR "1.1.0" 22 | 23 | // http://service.steinberg.de/databases/plugin.nsf/plugIn?openForm 24 | // 4 chars, single quotes. At least one capital letter 25 | #define PLUG_UNIQUE_ID 'Eval' 26 | // make sure this is not the same as BUNDLE_MFR 27 | #define PLUG_MFR_ID 'Cmpt' 28 | 29 | // ProTools stuff 30 | 31 | #if (defined(AAX_API) || defined(RTAS_API)) && !defined(_PIDS_) 32 | #define _PIDS_ 33 | const int PLUG_TYPE_IDS[2] = {'EFN1', 'EFN2'}; 34 | const int PLUG_TYPE_IDS_AS[2] = {'EFA1', 'EFA2'}; // AudioSuite 35 | #endif 36 | 37 | #define PLUG_MFR_PT "Damien Quartz\nDamien Quartz\nCompartmental" 38 | #define PLUG_NAME_PT "Evaluator\nEVAL" 39 | #define PLUG_TYPE_PT "Effect" 40 | #define PLUG_DOES_AUDIOSUITE 1 41 | 42 | /* PLUG_TYPE_PT can be "None", "EQ", "Dynamics", "PitchShift", "Reverb", "Delay", "Modulation", 43 | "Harmonic" "NoiseReduction" "Dither" "SoundField" "Effect" 44 | instrument determined by PLUG _IS _INST 45 | */ 46 | 47 | #define PLUG_CHANNEL_IO "1-1 2-2" 48 | 49 | #define PLUG_LATENCY 0 50 | #define PLUG_IS_INST 1 51 | 52 | // if this is 0 RTAS can't get tempo info 53 | #define PLUG_DOES_MIDI 1 54 | 55 | #define PLUG_DOES_STATE_CHUNKS 1 56 | 57 | // Unique IDs for each image resource. 58 | #define BACKGROUND_ID 101 59 | #define SLIDER_BACK_ID 102 60 | #define SLIDER_KNOB_ID 103 61 | #define NUMBERBOX_ARROW_UP_ID 104 62 | #define NUMBERBOX_ARROW_DOWN_ID 105 63 | #define NUMBERBOX_BACK_ID 106 64 | #define RADIO_BUTTON_ID 107 65 | #define BUTTON_BACK_ID 108 66 | 67 | // Image resource locations for this plug. 68 | #define BACKGROUND_FN "resources/img/background.png" 69 | #define SLIDER_BACK_FN "resources/img/vslider_background.png" 70 | #define SLIDER_KNOB_FN "resources/img/vslider_handle.png" 71 | #define NUMBERBOX_ARROW_UP_FN "resources/img/numberbox_arrow_up.png" 72 | #define NUMBERBOX_ARROW_DOWN_FN "resources/img/numberbox_arrow_down.png" 73 | #define NUMBERBOX_BACK_FN "resources/img/numberbox_background.png" 74 | #define RADIO_BUTTON_FN "resources/img/radio_button.png" 75 | #define BUTTON_BACK_FN "resources/img/button_background.png" 76 | 77 | // GUI default dimensions 78 | #define GUI_WIDTH 640 79 | #define GUI_HEIGHT 640 80 | 81 | // on MSVC, you must define SA_API in the resource editor preprocessor macros as well as the c++ ones 82 | #if defined(SA_API) 83 | #include "app_wrapper/app_resource.h" 84 | #endif 85 | 86 | // vst3 stuff 87 | #define MFR_URL "www.compartmental.net" 88 | #define MFR_EMAIL "info@compartmental.net" 89 | #define EFFECT_TYPE_VST3 "Fx|Instrument" 90 | 91 | /* "Fx|Analyzer"", "Fx|Delay", "Fx|Distortion", "Fx|Dynamics", "Fx|EQ", "Fx|Filter", 92 | "Fx", "Fx|Instrument", "Fx|InstrumentExternal", "Fx|Spatial", "Fx|Generator", 93 | "Fx|Mastering", "Fx|Modulation", "Fx|PitchShift", "Fx|Restoration", "Fx|Reverb", 94 | "Fx|Surround", "Fx|Tools", "Instrument", "Instrument|Drum", "Instrument|Sampler", 95 | "Instrument|Synth", "Instrument|Synth|Sampler", "Instrument|External", "Spatial", 96 | "Spatial|Fx", "OnlyRT", "OnlyOfflineProcess", "Mono", "Stereo", 97 | "Surround" 98 | */ 99 | -------------------------------------------------------------------------------- /resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ -------------------------------------------------------------------------------- /resources/English.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /resources/Evaluator-AU-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${BINARY_NAME} 9 | CFBundleGetInfoString 10 | 1.1.0, Copyright Damien Quartz, 2019 11 | CFBundleIdentifier 12 | net.compartmental.audiounit.${BINARY_NAME} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${BINARY_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 1.1.0 21 | CFBundleSignature 22 | Acme 23 | CFBundleVersion 24 | 1.1.0 25 | LSMinimumSystemVersion 26 | 10.5.0 27 | NSPrincipalClass 28 | Evaluator_View 29 | 30 | 31 | -------------------------------------------------------------------------------- /resources/Evaluator-OSXAPP-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${BINARY_NAME} 9 | CFBundleGetInfoString 10 | 1.1.0, Copyright Damien Quartz, 2019 11 | CFBundleIconFile 12 | ${BINARY_NAME}.icns 13 | CFBundleIdentifier 14 | net.compartmental.standalone.${BINARY_NAME} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${BINARY_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.1.0 23 | CFBundleSignature 24 | Acme 25 | CFBundleVersion 26 | 1.1.0 27 | LSApplicationCategoryType 28 | public.app-category.music 29 | LSMinimumSystemVersion 30 | 10.5.0 31 | NSMainNibFile 32 | MainMenu 33 | NSPrincipalClass 34 | SWELLApplication 35 | 36 | 37 | -------------------------------------------------------------------------------- /resources/Evaluator-Pages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Evaluator by DamienQuartz. 6 | PageTable 1 7 | 8 | 9 | 10 | 11 | 1 12 | 13 | 14 | 15 | 16 | 17 | MasterBypass 18 | 19 | 20 | 21 | 22 | 1 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | MasterBypass 31 | 32 | 33 | 34 | 35 | MasterBypass 36 | 1 37 | 38 | 1 39 | 1 40 | 1 41 | 1 42 | 1 43 | 1 44 | 1 45 | 1 46 | 1 47 | 1 48 | 1 49 | 1 50 | 1 51 | 52 | 53 | 54 | 55 | 1 56 | MasterBypass 57 | 58 | 1 59 | 1 60 | 1 61 | 1 62 | 1 63 | 1 64 | 1 65 | 1 66 | 1 67 | 1 68 | 1 69 | 1 70 | 1 71 | 72 | 73 | 74 | 75 | 1 76 | MasterBypass 77 | 78 | 1 79 | 1 80 | 1 81 | 1 82 | 1 83 | 1 84 | 1 85 | 1 86 | 1 87 | 1 88 | 1 89 | 1 90 | 1 91 | 92 | 93 | 94 | MasterBypass 95 | 1 96 | 97 | 1 98 | 1 99 | 1 100 | 1 101 | 1 102 | 1 103 | 1 104 | 1 105 | 1 106 | 1 107 | 1 108 | 1 109 | 1 110 | 111 | 112 | 113 | MasterBypass 114 | 115 | 116 | 1 117 | 118 | 119 | 120 | 121 | 122 | 123 | Ma 124 | Byp 125 | MByp 126 | Mstr Byp 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | RTAS: Evaluator 136 | 137 | 138 | 139 | 140 | MasterBypass 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /resources/Evaluator-VST2-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${BINARY_NAME} 9 | CFBundleGetInfoString 10 | 1.1.0, Copyright Damien Quartz, 2019 11 | CFBundleIdentifier 12 | net.compartmental.vst.${BINARY_NAME} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${BINARY_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 1.1.0 21 | CFBundleSignature 22 | Acme 23 | CFBundleVersion 24 | 1.1.0 25 | LSMinimumSystemVersion 26 | 10.5.0 27 | 28 | 29 | -------------------------------------------------------------------------------- /resources/Evaluator-VST3-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${BINARY_NAME} 9 | CFBundleGetInfoString 10 | 1.1.0, Copyright Damien Quartz, 2019 11 | CFBundleIdentifier 12 | net.compartmental.vst3.${BINARY_NAME} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${BINARY_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 1.1.0 21 | CFBundleSignature 22 | Acme 23 | CFBundleVersion 24 | 1.1.0 25 | LSMinimumSystemVersion 26 | 10.5.0 27 | 28 | 29 | -------------------------------------------------------------------------------- /resources/Evaluator.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.device.microphone 8 | 9 | com.apple.security.device.usb 10 | 11 | com.apple.security.device.firewire 12 | 13 | com.apple.security.files.user-selected.read-write 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /resources/Evaluator.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/Evaluator.icns -------------------------------------------------------------------------------- /resources/Evaluator.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/Evaluator.ico -------------------------------------------------------------------------------- /resources/img/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/background.png -------------------------------------------------------------------------------- /resources/img/button_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/button_background.png -------------------------------------------------------------------------------- /resources/img/numberbox_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/numberbox_arrow_down.png -------------------------------------------------------------------------------- /resources/img/numberbox_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/numberbox_arrow_up.png -------------------------------------------------------------------------------- /resources/img/numberbox_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/numberbox_background.png -------------------------------------------------------------------------------- /resources/img/radio_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/radio_button.png -------------------------------------------------------------------------------- /resources/img/vslider_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/vslider_background.png -------------------------------------------------------------------------------- /resources/img/vslider_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ddf/evaluator/60ed46fd4b59e395605dd7182e7f619ce52fc08a/resources/img/vslider_handle.png -------------------------------------------------------------------------------- /setfileicon.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import Cocoa 4 | import sys 5 | 6 | Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit("Unable to set file icon") 7 | 8 | -------------------------------------------------------------------------------- /update_version.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # this script will update the versions in plist and installer files to match that in resource.h 4 | 5 | import plistlib, os, datetime, fileinput, glob, sys, string 6 | scriptpath = os.path.dirname(os.path.realpath(__file__)) 7 | 8 | def replacestrs(filename, s, r): 9 | files = glob.glob(filename) 10 | 11 | for line in fileinput.input(files,inplace=1): 12 | string.find(line, s) 13 | line = line.replace(s, r) 14 | sys.stdout.write(line) 15 | 16 | def main(): 17 | 18 | MajorStr = "" 19 | MinorStr = "" 20 | BugfixStr = "" 21 | 22 | for line in fileinput.input(scriptpath + "/resource.h",inplace=0): 23 | if "#define PLUG_VER " in line: 24 | FullVersion = int(string.lstrip(line, "#define PLUG_VER "), 16) 25 | major = FullVersion & 0xFFFF0000 26 | MajorStr = str(major >> 16) 27 | minor = FullVersion & 0x0000FF00 28 | MinorStr = str(minor >> 8) 29 | BugfixStr = str(FullVersion & 0x000000FF) 30 | 31 | 32 | FullVersionStr = MajorStr + "." + MinorStr + "." + BugfixStr 33 | 34 | today = datetime.date.today() 35 | CFBundleGetInfoString = FullVersionStr + ", Copyright Damien Quartz, " + str(today.year) 36 | CFBundleVersion = FullVersionStr 37 | 38 | print "update_version.py - setting version to " + FullVersionStr 39 | 40 | print "updating version.txt" 41 | 42 | version = open("version.txt", "w") 43 | version.write(FullVersionStr) 44 | version.close() 45 | 46 | print "Updating plist version info..." 47 | 48 | plistpath = scriptpath + "/resources/Evaluator-VST2-Info.plist" 49 | vst2 = plistlib.readPlist(plistpath) 50 | vst2['CFBundleGetInfoString'] = CFBundleGetInfoString 51 | vst2['CFBundleVersion'] = CFBundleVersion 52 | vst2['CFBundleShortVersionString'] = CFBundleVersion 53 | plistlib.writePlist(vst2, plistpath) 54 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 55 | 56 | plistpath = scriptpath + "/resources/Evaluator-AU-Info.plist" 57 | au = plistlib.readPlist(plistpath) 58 | au['CFBundleGetInfoString'] = CFBundleGetInfoString 59 | au['CFBundleVersion'] = CFBundleVersion 60 | au['CFBundleShortVersionString'] = CFBundleVersion 61 | plistlib.writePlist(au, plistpath) 62 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 63 | 64 | plistpath = scriptpath + "/resources/Evaluator-VST3-Info.plist" 65 | vst3 = plistlib.readPlist(plistpath) 66 | vst3['CFBundleGetInfoString'] = CFBundleGetInfoString 67 | vst3['CFBundleVersion'] = CFBundleVersion 68 | vst3['CFBundleShortVersionString'] = CFBundleVersion 69 | plistlib.writePlist(vst3, plistpath) 70 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 71 | 72 | plistpath = scriptpath + "/resources/Evaluator-OSXAPP-Info.plist" 73 | app = plistlib.readPlist(plistpath) 74 | app['CFBundleGetInfoString'] = CFBundleGetInfoString 75 | app['CFBundleVersion'] = CFBundleVersion 76 | app['CFBundleShortVersionString'] = CFBundleVersion 77 | plistlib.writePlist(app, plistpath) 78 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 79 | 80 | # plistpath = scriptpath + "/resources/Evaluator-RTAS-Info.plist" 81 | # rtas = plistlib.readPlist(plistpath) 82 | # rtas['CFBundleGetInfoString'] = CFBundleGetInfoString 83 | # rtas['CFBundleVersion'] = CFBundleVersion 84 | # rtas['CFBundleShortVersionString'] = CFBundleVersion 85 | # plistlib.writePlist(rtas, plistpath) 86 | # replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 87 | 88 | # plistpath = scriptpath + "/resources/Evaluator-AAX-Info.plist" 89 | # aax = plistlib.readPlist(plistpath) 90 | # aax['CFBundleGetInfoString'] = CFBundleGetInfoString 91 | # aax['CFBundleVersion'] = CFBundleVersion 92 | # aax['CFBundleShortVersionString'] = CFBundleVersion 93 | # plistlib.writePlist(aax, plistpath) 94 | # replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 95 | 96 | # plistpath = scriptpath + "/resources/Evaluator-IOSAPP-Info.plist" 97 | # iosapp = plistlib.readPlist(plistpath) 98 | # iosapp['CFBundleGetInfoString'] = CFBundleGetInfoString 99 | # iosapp['CFBundleVersion'] = CFBundleVersion 100 | # iosapp['CFBundleShortVersionString'] = CFBundleVersion 101 | # plistlib.writePlist(iosapp, plistpath) 102 | # replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 103 | 104 | print "Updating Mac Installer version info..." 105 | 106 | plistpath = scriptpath + "/installer/Evaluator.pkgproj" 107 | installer = plistlib.readPlist(plistpath) 108 | 109 | for x in range(0,5): 110 | installer['PACKAGES'][x]['PACKAGE_SETTINGS']['VERSION'] = FullVersionStr 111 | 112 | plistlib.writePlist(installer, plistpath) 113 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 114 | 115 | print "Updating Windows Installer version info..." 116 | 117 | for line in fileinput.input(scriptpath + "/installer/Evaluator.iss",inplace=1): 118 | if "AppVersion" in line: 119 | line="AppVersion=" + FullVersionStr + "\n" 120 | sys.stdout.write(line) 121 | 122 | if __name__ == '__main__': 123 | main() -------------------------------------------------------------------------------- /validate_audiounit.command: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | # shell script to validate your iplug audiounit using auval 3 | # run from terminal with the argument leaks to perform the leaks test (See auval docs) 4 | 5 | BASEDIR=$(dirname $0) 6 | 7 | cd $BASEDIR 8 | 9 | OS_VERSION=`sw_vers -productVersion | egrep -o '10\.[0-9]+'` 10 | 11 | x86_ARGS="" 12 | x64_ARGS="" 13 | 14 | if [[ $OS_VERSION == "10.9" ]] || [[ $OS_VERSION == "10.10" ]] 15 | then 16 | x86_ARGS="-32" 17 | x64_ARGS="" 18 | else 19 | x86_ARGS="" 20 | x64_ARGS="-64" 21 | fi 22 | 23 | PUID=`echo | grep PLUG_UNIQUE_ID resource.h` 24 | PUID=${PUID//\#define PLUG_UNIQUE_ID } 25 | PUID=${PUID//\'} 26 | 27 | PMID=`echo | grep PLUG_MFR_ID resource.h` 28 | PMID=${PMID//\#define PLUG_MFR_ID } 29 | PMID=${PMID//\'} 30 | 31 | PII=`echo | grep PLUG_IS_INST resource.h` 32 | PII=${PII//\#define PLUG_IS_INST } 33 | 34 | PDM=`echo | grep PLUG_DOES_MIDI resource.h` 35 | PDM=${PDM//\#define PLUG_DOES_MIDI } 36 | 37 | TYPE=aufx 38 | 39 | if [ $PII == 1 ] # instrument 40 | then 41 | TYPE=aumu 42 | else 43 | if [ $PDM == 1 ] # midi effect 44 | then 45 | TYPE=aumf 46 | fi 47 | fi 48 | 49 | if [ "$1" == "leaks" ] 50 | then 51 | echo "testing for leaks (i386 32 bit)" 52 | echo 'launch a new shell and type: ps axc|awk "{if (\$5==\"auvaltool\") print \$1}" to get the pid'; 53 | echo "then leaks PID" 54 | 55 | export MallocStackLogging=1 56 | set env MallocStackLoggingNoCompact=1 57 | 58 | auval $x86_ARGS -v $TYPE $PUID $PMID -w -q 59 | 60 | unset MallocStackLogging 61 | 62 | else 63 | 64 | echo "\nvalidating i386 32 bit... ------------------------" 65 | echo "--------------------------------------------------" 66 | echo "--------------------------------------------------" 67 | echo "--------------------------------------------------" 68 | echo "--------------------------------------------------" 69 | echo "--------------------------------------------------" 70 | 71 | auval $x86_ARGS -v $TYPE $PUID $PMID 72 | 73 | echo "\nvalidating i386 64 bit... ------------------------" 74 | echo "--------------------------------------------------" 75 | echo "--------------------------------------------------" 76 | echo "--------------------------------------------------" 77 | echo "--------------------------------------------------" 78 | echo "--------------------------------------------------" 79 | 80 | auval $x64_ARGS -v $TYPE $PUID $PMID 81 | 82 | fi 83 | 84 | echo "done" 85 | 86 | -------------------------------------------------------------------------------- /version.txt: -------------------------------------------------------------------------------- 1 | 1.1.0 --------------------------------------------------------------------------------