Compare commits
14 Commits
Author | SHA1 | Date |
---|---|---|
|
9f69ef4e6a | |
|
04446708c3 | |
|
1e1add37bb | |
|
c33fd60c5c | |
|
11df5c186f | |
|
80987f0875 | |
|
7607c71dad | |
|
b095ff1a0f | |
|
23e9e5f079 | |
|
d7fcc9c0b0 | |
|
9dc95dc07f | |
|
e7212cd5d5 | |
|
eda618bb04 | |
|
2d678b4437 |
|
@ -30,4 +30,38 @@
|
||||||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1
|
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1
|
||||||
#define DISTRHO_PLUGIN_HAS_UI 1
|
#define DISTRHO_PLUGIN_HAS_UI 1
|
||||||
|
|
||||||
|
enum Parameters {
|
||||||
|
pLFORate,
|
||||||
|
pLFODelay,
|
||||||
|
|
||||||
|
pVCORange,
|
||||||
|
pLFODepth,
|
||||||
|
pPWMDepth,
|
||||||
|
pSqr,
|
||||||
|
pSaw,
|
||||||
|
pSubLevel,
|
||||||
|
pNoiseLevel,
|
||||||
|
|
||||||
|
pHPF,
|
||||||
|
pCutoff,
|
||||||
|
pRes,
|
||||||
|
pEnv,
|
||||||
|
pLfo,
|
||||||
|
pKyb,
|
||||||
|
|
||||||
|
pVCALevel,
|
||||||
|
|
||||||
|
pAtk,
|
||||||
|
pDcy,
|
||||||
|
pStn,
|
||||||
|
pRls,
|
||||||
|
|
||||||
|
pChorus,
|
||||||
|
|
||||||
|
parameterCount,
|
||||||
|
|
||||||
|
btn16, btn8, btn4, btnPls, btnSaw, btnCh0, btnCh1, btnCh2
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,6 +15,8 @@ FILES_DSP = \
|
||||||
|
|
||||||
|
|
||||||
FILES_UI = \
|
FILES_UI = \
|
||||||
|
orangebutton.cpp \
|
||||||
|
panel.cpp \
|
||||||
slider.cpp \
|
slider.cpp \
|
||||||
peacock.cpp \
|
peacock.cpp \
|
||||||
ui.cpp
|
ui.cpp
|
||||||
|
|
|
@ -27,32 +27,6 @@ START_NAMESPACE_DISTRHO
|
||||||
|
|
||||||
class Chassis : public Plugin {
|
class Chassis : public Plugin {
|
||||||
public:
|
public:
|
||||||
enum Parameters {
|
|
||||||
pLFORate,
|
|
||||||
pLFODelay,
|
|
||||||
|
|
||||||
pLFODepth,
|
|
||||||
pPWMDepth,
|
|
||||||
pSubLevel,
|
|
||||||
pNoiseLevel,
|
|
||||||
|
|
||||||
pHPF,
|
|
||||||
pCutoff,
|
|
||||||
pRes,
|
|
||||||
pEnv,
|
|
||||||
pLfo,
|
|
||||||
pKyb,
|
|
||||||
|
|
||||||
pVCALevel,
|
|
||||||
|
|
||||||
pAtk,
|
|
||||||
pDcy,
|
|
||||||
pStn,
|
|
||||||
pRls,
|
|
||||||
|
|
||||||
parameterCount
|
|
||||||
};
|
|
||||||
|
|
||||||
Chassis();
|
Chassis();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -0,0 +1,367 @@
|
||||||
|
#include "peacock.hpp"
|
||||||
|
static const char tempOrngUp[] = {
|
||||||
|
"jF#\377\213].\377\230e\062\377\223b\061\377\230e\062\377\224c\061\377\226d\061"
|
||||||
|
"\377\222a\060\377\230e\062\377\225c\061\377\232f\063\377\224c\061\377\223b\060"
|
||||||
|
"\377\227e\062\377\227d\062\377\233g\063\377\223b\060\377\225c\061\377\222a\060"
|
||||||
|
"\377\224b\061\377\227e\062\377\227d\062\377\226d\062\377\226d\062\377\224c\061"
|
||||||
|
"\377\223b\060\377\231f\062\377\223b\061\377\222a\060\377\226d\062\377\227e\062"
|
||||||
|
"\377\223b\060\377\220`\060\377\224b\061\377\233g\063\377\232f\063\377\226d\062"
|
||||||
|
"\377\223b\060\377\217_/\377\004\003\001\000\004\003\001\000\243l\066\377\331\263\215\377\321"
|
||||||
|
"\242s\377\321\243u\377\320\241q\377\321\243u\377\321\243u\377\320\240o\377"
|
||||||
|
"\320\241r\377\320\241r\377\321\243u\377\320\241r\377\320\241r\377\322\244"
|
||||||
|
"u\377\322\245w\377\321\242s\377\320\240q\377\321\242r\377\321\243u\377\317"
|
||||||
|
"\237n\377\320\241r\377\321\242s\377\321\242r\377\322\244v\377\321\242s\377"
|
||||||
|
"\317\237o\377\321\242s\377\320\240o\377\321\242s\377\320\241r\377\320\241"
|
||||||
|
"q\377\321\242s\377\321\242s\377\321\242s\377\320\237o\377\321\243t\377\321"
|
||||||
|
"\242s\377\271{=\377\253r\070\377\217_/\062\004\003\001\000\237i\064\377\322\245x\377"
|
||||||
|
"\305\212O\377\304\207K\377\305\212P\377\304\207K\377\306\214R\377\305\212"
|
||||||
|
"O\377\303\207J\377\305\211N\377\307\215T\377\303\206J\377\305\211N\377\305"
|
||||||
|
"\212O\377\304\207K\377\303\206J\377\305\212P\377\302\204G\377\304\211M\377"
|
||||||
|
"\304\207K\377\304\211M\377\303\206I\377\306\213Q\377\305\212N\377\304\207"
|
||||||
|
"K\377\303\206H\377\305\212O\377\305\211N\377\305\212P\377\305\212P\377\304"
|
||||||
|
"\207K\377\303\206H\377\304\207K\377\305\212P\377\306\214R\377\304\207K\377"
|
||||||
|
"\304\211M\377\300\201A\377\262v;\377rK$\377>(\024\226\237j\064\377\320\240"
|
||||||
|
"p\377\301\201B\377\270z=\377\270z=\377\300\200A\377\265y<\377\266y<\377\301"
|
||||||
|
"\202C\377\265x<\377\271{=\377\271{=\377\267y<\377\275~>\377\300\200@\377"
|
||||||
|
"\273}>\377\267z<\377\273}>\377\266y<\377\300\200@\377\272{=\377\265y<\377"
|
||||||
|
"\272|=\377\264x;\377\300\200@\377\300\201A\377\276\177?\377\261v:\377\301"
|
||||||
|
"\202C\377\267z<\377\275~>\377\267z<\377\267z<\377\275~>\377\267z<\377\267"
|
||||||
|
"z<\377\301\201B\377\275}>\377\237j\064\377hD\040\377>(\024n\234h\063\377\317"
|
||||||
|
"\237n\377\267y<\377\276~?\377\261u:\377\267y<\377\271{=\377\273|>\377\276"
|
||||||
|
"~?\377\275~>\377\266y<\377\274}>\377\275~>\377\265y<\377\275~>\377\262v;"
|
||||||
|
"\377\270{=\377\267z<\377\267y<\377\276~?\377\265y<\377\273}>\377\300\200"
|
||||||
|
"@\377\276\177?\377\263w;\377\270z=\377\275~>\377\265y<\377\270z=\377\272"
|
||||||
|
"|=\377\266y<\377\275~>\377\272|=\377\272|=\377\270z=\377\264x;\377\273|>"
|
||||||
|
"\377\276~?\377\232f\063\377eB\037\377\065\"\020\303\235i\064\377\321\242s\377"
|
||||||
|
"\301\203D\377\274}>\377\267y<\377\300\200A\377\271{=\377\273|>\377\277\177"
|
||||||
|
"?\377\264x<\377\266y<\377\272{=\377\275~>\377\260u:\377\267y<\377\300\200"
|
||||||
|
"@\377\300\200A\377\275}>\377\267y<\377\270z=\377\264x;\377\276~?\377\265"
|
||||||
|
"x<\377\275~>\377\272|=\377\276~?\377\300\200@\377\271{=\377\272{=\377\270"
|
||||||
|
"{=\377\263w;\377\276~?\377\272{=\377\262v;\377\263w;\377\300\200A\377\267"
|
||||||
|
"y<\377\274}>\377\234h\064\377b@\037\377\065\"\020\370\237j\064\377\320\240p\377"
|
||||||
|
"\301\202C\377\273|>\377\262v;\377\267y<\377\301\201B\377\274}>\377\274}>"
|
||||||
|
"\377\277\177?\377\300\201A\377\270z=\377\267y<\377\301\201B\377\275~>\377"
|
||||||
|
"\272|=\377\274}>\377\266y<\377\271{=\377\271{=\377\274}>\377\300\200@\377"
|
||||||
|
"\277\177?\377\275}>\377\273|>\377\273|>\377\275~>\377\276~?\377\271{=\377"
|
||||||
|
"\301\201B\377\271{=\377\271{=\377\277\177?\377\301\201B\377\274}>\377\261"
|
||||||
|
"u:\377\301\202C\377\301\201B\377\231f\063\377cA\037\377\065\"\020\370\237j\064"
|
||||||
|
"\377\321\241r\377\303\206I\377\271{=\377\265x<\377\272|=\377\275~>\377\273"
|
||||||
|
"}>\377\301\202C\377\277\177?\377\272|=\377\265x<\377\266y<\377\264x;\377"
|
||||||
|
"\273|>\377\274}>\377\272{=\377\274}>\377\266y<\377\267z<\377\271{=\377\266"
|
||||||
|
"y<\377\271{=\377\267z<\377\264x;\377\275}>\377\266y<\377\274}>\377\301\201"
|
||||||
|
"B\377\277\177?\377\272|=\377\262v;\377\301\201B\377\300\201A\377\273|>\377"
|
||||||
|
"\276~?\377\301\201B\377\264x<\377\243m\066\377b@\037\377\065\"\020\370\237i\064"
|
||||||
|
"\377\320\240p\377\302\204F\377\267z<\377\263w;\377\265x<\377\267z<\377\262"
|
||||||
|
"v;\377\265y<\377\300\200A\377\277\177?\377\274}>\377\277\177?\377\270z=\377"
|
||||||
|
"\262v;\377\300\200@\377\272|>\377\261v:\377\267y<\377\266y<\377\301\201B"
|
||||||
|
"\377\272|=\377\267z<\377\272{=\377\271{=\377\270z=\377\272|=\377\274}>\377"
|
||||||
|
"\266y<\377\300\200@\377\270{=\377\267y<\377\274}>\377\275}>\377\274}>\377"
|
||||||
|
"\271{=\377\275}>\377\274}>\377\236i\064\377gD\040\377\065\"\020\370\240j\065\377"
|
||||||
|
"\320\240p\377\300\200@\377\301\201B\377\277\177?\377\276~?\377\266y<\377"
|
||||||
|
"\275}>\377\271{=\377\267y<\377\273|>\377\264x;\377\274}>\377\276~?\377\271"
|
||||||
|
"{=\377\267y<\377\274}>\377\267y<\377\265x<\377\275}>\377\267y<\377\300\201"
|
||||||
|
"A\377\276~?\377\267y<\377\264x;\377\276~?\377\301\202C\377\271{=\377\270"
|
||||||
|
"z=\377\272|=\377\275~>\377\266y<\377\272|>\377\271{=\377\300\200@\377\300"
|
||||||
|
"\200@\377\267z<\377\274}>\377\237j\064\377dB\037\377\065\"\020\370\237j\064\377"
|
||||||
|
"\321\242s\377\274}>\377\261u:\377\267y<\377\267y<\377\272{=\377\276~?\377"
|
||||||
|
"\271{=\377\266y<\377\271{=\377\272|>\377\300\200A\377\271{=\377\273|>\377"
|
||||||
|
"\265y<\377\264x<\377\300\200@\377\271{=\377\262v;\377\262w;\377\264x<\377"
|
||||||
|
"\301\201B\377\274}>\377\272|=\377\265x<\377\300\200@\377\271{=\377\301\203"
|
||||||
|
"D\377\265x<\377\277\177?\377\301\202C\377\274}>\377\276~?\377\264x;\377\271"
|
||||||
|
"{=\377\271{=\377\272|=\377\235i\064\377eB\037\377\065\"\020\370\237i\064\377\320"
|
||||||
|
"\240p\377\267z<\377\271{=\377\300\200@\377\267z<\377\271{=\377\262v;\377"
|
||||||
|
"\276~?\377\263w;\377\265x<\377\266y<\377\272|=\377\300\177?\377\274}>\377"
|
||||||
|
"\266y<\377\300\200@\377\267y<\377\275~>\377\275}>\377\276~?\377\266y<\377"
|
||||||
|
"\275}>\377\300\177?\377\263w;\377\266y<\377\270z=\377\263w;\377\264x<\377"
|
||||||
|
"\274}>\377\277\177?\377\271{=\377\300\200@\377\277\177?\377\271{=\377\300"
|
||||||
|
"\201A\377\273|>\377\266y<\377\250p\067\377dB\037\377\065\"\020\370\235i\064\377"
|
||||||
|
"\320\237o\377\277\177?\377\300\200@\377\275}>\377\270z=\377\267y<\377\275"
|
||||||
|
"~>\377\271{=\377\266y<\377\271{=\377\274}>\377\271{=\377\263w;\377\260u:"
|
||||||
|
"\377\277\177?\377\262w;\377\275}>\377\273|>\377\301\201B\377\262v;\377\267"
|
||||||
|
"y<\377\272|>\377\267y<\377\274}>\377\273|>\377\300\200A\377\267z<\377\265"
|
||||||
|
"y<\377\275}>\377\266y<\377\271{=\377\262v;\377\273|>\377\271{=\377\300\200"
|
||||||
|
"@\377\274}>\377\274}>\377\243l\066\377jE!\377\065\"\020\370\232g\063\377\316"
|
||||||
|
"\234k\377\267z<\377\267z<\377\266y<\377\264x;\377\266y<\377\266y<\377\300"
|
||||||
|
"\200A\377\272|>\377\271{=\377\272|=\377\273}>\377\274}>\377\273|>\377\272"
|
||||||
|
"|=\377\301\201B\377\276~?\377\265y<\377\265x<\377\270z=\377\266y<\377\262"
|
||||||
|
"v;\377\267z<\377\264x;\377\301\202C\377\274}>\377\266y<\377\265x<\377\301"
|
||||||
|
"\202C\377\265y<\377\267y<\377\274}>\377\263w;\377\270{=\377\263w;\377\266"
|
||||||
|
"y<\377\275~>\377\242l\066\377gC\040\377\065\"\020\370\234h\063\377\317\236n\377"
|
||||||
|
"\271{=\377\267y<\377\267y<\377\274}>\377\274}>\377\266y<\377\274}>\377\273"
|
||||||
|
"|>\377\276~?\377\277\177?\377\266y<\377\301\202C\377\274}>\377\274}>\377"
|
||||||
|
"\261v:\377\275~>\377\267z<\377\273|>\377\265x<\377\264x<\377\274}>\377\271"
|
||||||
|
"{=\377\274}>\377\274}>\377\266y<\377\274}>\377\274}>\377\300\201A\377\301"
|
||||||
|
"\202C\377\276~?\377\275~>\377\273|>\377\276~?\377\261v;\377\266y<\377\276"
|
||||||
|
"~?\377\232f\063\377fC\040\377\065\"\020\370\233g\063\377\317\235l\377\277\177"
|
||||||
|
"?\377\263w;\377\272|=\377\267y<\377\270z=\377\266y<\377\300\200@\377\267"
|
||||||
|
"z<\377\277\177?\377\300\200@\377\276~?\377\274}>\377\272|=\377\275~>\377"
|
||||||
|
"\275}>\377\273|>\377\270z=\377\277\177?\377\266y<\377\265x<\377\264x;\377"
|
||||||
|
"\267z<\377\267y<\377\267z=\377\274}>\377\275}>\377\272|=\377\271{=\377\275"
|
||||||
|
"}>\377\270z=\377\265x<\377\275}>\377\267y<\377\266y<\377\274}>\377\274}>"
|
||||||
|
"\377\240j\065\377b@\037\377\065\"\020\370\234h\063\377\316\233i\377\300\201A\377"
|
||||||
|
"\300\200@\377\265x<\377\276~?\377\267z<\377\274}>\377\271{=\377\267y<\377"
|
||||||
|
"\265x<\377\274}>\377\276~?\377\272|=\377\276~?\377\274}>\377\263w;\377\266"
|
||||||
|
"y<\377\274}>\377\267z=\377\266y<\377\272|=\377\275}>\377\274}>\377\272|>"
|
||||||
|
"\377\265x<\377\273|>\377\275}>\377\267z<\377\300\201A\377\271{=\377\266y"
|
||||||
|
"<\377\275~>\377\274}>\377\300\200@\377\270{=\377\301\201B\377\266y<\377\243"
|
||||||
|
"l\066\377eB\040\377\065\"\020\370\232g\063\377\320\237o\377\270z=\377\263w;\377"
|
||||||
|
"\275}>\377\267y<\377\277\177?\377\277\177?\377\267z<\377\274}>\377\277\177"
|
||||||
|
"?\377\267y<\377\274}>\377\300\200A\377\273|>\377\276~?\377\274}>\377\272"
|
||||||
|
"|=\377\277\177?\377\272|=\377\272|=\377\264w;\377\300\200@\377\274}>\377"
|
||||||
|
"\271{=\377\266y<\377\271{=\377\273|>\377\273|>\377\271{=\377\272|=\377\275"
|
||||||
|
"~>\377\270z=\377\270z=\377\266y<\377\300\200@\377\273|>\377\266y<\377\242"
|
||||||
|
"l\065\377gC\040\377\065\"\020\370\232g\063\377\317\236l\377\275~?\377\271{=\377"
|
||||||
|
"\275}>\377\271{=\377\260u:\377\271{=\377\274}>\377\274}>\377\267z<\377\262"
|
||||||
|
"w;\377\300\200@\377\274}>\377\266y<\377\274}>\377\277\177?\377\275~>\377"
|
||||||
|
"\300\177?\377\272|=\377\266y<\377\273|>\377\274}>\377\271{=\377\266y<\377"
|
||||||
|
"\275~>\377\274}>\377\300\200@\377\272|=\377\275}>\377\267y<\377\274}>\377"
|
||||||
|
"\272{=\377\277\177?\377\270z=\377\277\177?\377\265x<\377\277\177?\377\244"
|
||||||
|
"m\066\377fC\040\377\065\"\020\370\233g\063\377\321\242r\377\301\201B\377\272|"
|
||||||
|
"=\377\300\177?\377\265x<\377\267z<\377\271{=\377\271{=\377\271{=\377\274"
|
||||||
|
"}>\377\267z<\377\275~>\377\300\201A\377\271{=\377\265y<\377\272|>\377\263"
|
||||||
|
"w;\377\300\200A\377\271{=\377\275~>\377\274}>\377\271{=\377\300\200A\377"
|
||||||
|
"\264x;\377\266y<\377\274}>\377\267z<\377\272|=\377\267z<\377\273|>\377\272"
|
||||||
|
"|=\377\271{=\377\267y<\377\271{=\377\273|>\377\274}>\377\276\177?\377\242"
|
||||||
|
"l\065\377gD\040\377\065\"\020\370\235i\064\377\320\240p\377\265x<\377\266y<\377"
|
||||||
|
"\272|=\377\262v;\377\273}>\377\271{=\377\301\203D\377\271{=\377\300\201A"
|
||||||
|
"\377\270z=\377\273|>\377\267y<\377\267z<\377\266y<\377\301\201B\377\272|"
|
||||||
|
"=\377\270z=\377\265y<\377\272|=\377\263w;\377\266y<\377\274}>\377\275~>\377"
|
||||||
|
"\275}>\377\272|>\377\261u:\377\271{=\377\275~>\377\275~>\377\266y<\377\271"
|
||||||
|
"{=\377\263w;\377\300\200@\377\266y<\377\277\177?\377\276~?\377\235h\064\377"
|
||||||
|
"fC\040\377\065\"\020\370\233g\063\377\317\236n\377\275~?\377\270{=\377\277\177"
|
||||||
|
"?\377\263w;\377\300\200@\377\274}>\377\267y<\377\301\202C\377\267z<\377\271"
|
||||||
|
"{=\377\276~?\377\266y<\377\274}>\377\262v;\377\300\200A\377\266y<\377\270"
|
||||||
|
"z=\377\267z<\377\272|=\377\270z=\377\277\177?\377\266y<\377\301\202C\377"
|
||||||
|
"\266y<\377\272{=\377\274}>\377\276~?\377\274}>\377\270z=\377\267z<\377\264"
|
||||||
|
"x<\377\266y<\377\265y<\377\262v;\377\271{=\377\301\202D\377\237j\064\377d"
|
||||||
|
"A\037\377\065\"\020\370\234h\063\377\317\235l\377\301\202C\377\274}>\377\274"
|
||||||
|
"}>\377\276~?\377\271{=\377\271{=\377\276~?\377\301\201B\377\300\200@\377"
|
||||||
|
"\277\177?\377\273|>\377\273|>\377\271{=\377\265y<\377\274}>\377\276~?\377"
|
||||||
|
"\273|>\377\275~>\377\300\200?\377\277\177?\377\300\200@\377\262v;\377\301"
|
||||||
|
"\202C\377\263w;\377\275~>\377\266y<\377\263w;\377\266y<\377\266y<\377\277"
|
||||||
|
"\177?\377\261v:\377\267z<\377\275}>\377\274}>\377\267z<\377\300\200@\377"
|
||||||
|
"\237j\064\377eB\037\377\065\"\020\370\237j\064\377\317\236n\377\271{=\377\302"
|
||||||
|
"\203E\377\274}>\377\275~>\377\266y<\377\264x;\377\274}>\377\264x;\377\274"
|
||||||
|
"}>\377\300\177?\377\266y<\377\270z=\377\266y<\377\271{=\377\300\200?\377"
|
||||||
|
"\277\177?\377\262v;\377\275~>\377\263w;\377\271{=\377\275}>\377\276~?\377"
|
||||||
|
"\274}>\377\267z<\377\272|>\377\274}>\377\302\203E\377\271{=\377\271{=\377"
|
||||||
|
"\277\177?\377\272|=\377\261v:\377\275~>\377\264x;\377\267y<\377\301\201B"
|
||||||
|
"\377\235i\064\377eB\037\377\065\"\020\370\233g\063\377\317\235l\377\303\205H\377"
|
||||||
|
"\266y<\377\274}>\377\274}>\377\270z=\377\273|>\377\270{=\377\276~?\377\273"
|
||||||
|
"}>\377\266y<\377\275~>\377\302\203E\377\274}>\377\276~?\377\276~?\377\276"
|
||||||
|
"\177?\377\266y<\377\267z<\377\271{=\377\274}>\377\300\200A\377\274}>\377"
|
||||||
|
"\276~?\377\271{=\377\264x;\377\266y<\377\276\177?\377\300\200@\377\276~?"
|
||||||
|
"\377\276~?\377\302\203E\377\275~>\377\265y<\377\266y<\377\275~>\377\276\177"
|
||||||
|
"?\377\240j\065\377dB\037\377\065\"\020\370\264x;\377\331\263\215\377\302\204"
|
||||||
|
"F\377\263w;\377\300\201A\377\300\200@\377\274}>\377\271{=\377\273}>\377\300"
|
||||||
|
"\201A\377\266y<\377\267y<\377\272|=\377\300\201A\377\301\202B\377\273}>\377"
|
||||||
|
"\300\200@\377\300\200@\377\273|>\377\276~?\377\300\200@\377\276~?\377\272"
|
||||||
|
"|=\377\270{=\377\300\201A\377\277\177?\377\274}>\377\266y<\377\301\201B\377"
|
||||||
|
"\273}>\377\270z=\377\274}>\377\274}>\377\275~>\377\300\200@\377\301\202C"
|
||||||
|
"\377\301\202B\377\264x;\377\241k\065\377eB\040\377\065\"\020\370kG#\377\210["
|
||||||
|
"-\377\233g\063\377\215^.\377\214].\377\215^/\377\216^/\377\207Z-\377\206Y"
|
||||||
|
",\377\201V+\377\214].\377\207Z-\377\204X,\377\210Z-\377\216_/\377\233g\063"
|
||||||
|
"\377\223b\061\377\222a\060\377\226d\062\377\214].\377\210[-\377\210Z-\377\215"
|
||||||
|
"^/\377\224c\061\377\225c\061\377\230e\062\377\224b\061\377\227e\062\377\225c\061"
|
||||||
|
"\377\231f\062\377\227d\062\377\230e\062\377\223b\061\377\224b\061\377\223b\061"
|
||||||
|
"\377\232g\063\377\231f\062\377\216_/\377\211[-\377fC\040\377\065\"\020\370\304"
|
||||||
|
"\206I\025[\071\034\377P\063\031\377cA\037\377gC!\377eA\040\377cA\040\377eB\040\377"
|
||||||
|
"cA\037\377b@\037\377c@\037\377cA\037\377c@\037\377c@\037\377c@\037\377b@\037\377"
|
||||||
|
"b@\037\377c@\037\377c@\037\377_>\036\377a?\037\377a?\037\377c@\037\377b?\037\377"
|
||||||
|
"a?\037\377`>\036\377^>\036\377^>\036\377_>\036\377^>\036\377`>\036\377`>\036\377"
|
||||||
|
"`>\036\377`>\036\377`>\036\377a?\037\377`>\036\377c@\037\377Y:\034\377L\061\027\377"
|
||||||
|
"\065\"\020\370\004\003\001\000a@\040\377D,\025\377C+\025\377S\066\032\377V\070\033\377U\066"
|
||||||
|
"\032\377S\066\032\377U\067\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377"
|
||||||
|
"S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032"
|
||||||
|
"\377Q\064\031\377R\065\032\377R\065\032\377S\066\032\377S\065\032\377R\065\032\377Q\064"
|
||||||
|
"\031\377P\064\031\377P\064\031\377Q\064\031\377P\064\031\377Q\064\031\377Q\064\031\377"
|
||||||
|
"Q\064\031\377Q\064\031\377Q\064\031\377R\065\032\377Q\064\031\377O\063\030\377='\022\377"
|
||||||
|
"\065\"\020\373\004\003\001\000J\061\031\334A*\024\377L\061\030\377N\063\030\377V\070\033\377"
|
||||||
|
"U\066\032\377S\066\032\377U\067\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032"
|
||||||
|
"\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066\032\377S\066"
|
||||||
|
"\032\377Q\064\031\377R\065\032\377R\065\032\377S\066\032\377S\065\032\377R\065\032\377"
|
||||||
|
"Q\064\031\377P\064\031\377P\064\031\377Q\064\031\377P\064\031\377Q\064\031\377Q\064\031"
|
||||||
|
"\377Q\064\031\377Q\064\031\377Q\064\031\377R\065\032\377Q\064\031\377S\066\032\377I/"
|
||||||
|
"\027\377\065\"\020\376",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char tempOrngDn[] = {
|
||||||
|
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
|
||||||
|
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
|
||||||
|
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
|
||||||
|
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000"
|
||||||
|
"\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000\004\003\001\000>(\024&>(\024\331>(\024\235"
|
||||||
|
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
|
||||||
|
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
|
||||||
|
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
|
||||||
|
">(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235>(\024\235"
|
||||||
|
">(\024\235>(\024\235>(\024\235\004\003\001\000\004\003\001\000\004\003\001\000eC!\377_@\036\377\217_"
|
||||||
|
"/\377\212\\.\377\217_/\377\213].\377\215^.\377\211[-\377\217_/\377\214]."
|
||||||
|
"\377\221`\060\377\213].\377\212\\-\377\216_/\377\216^/\377\222a\060\377\212"
|
||||||
|
"\\-\377\214].\377\211[-\377\213\\.\377\216_/\377\216^/\377\215^/\377\215"
|
||||||
|
"^/\377\213].\377\212\\-\377\220`/\377\212\\.\377\211[-\377\215^/\377\216"
|
||||||
|
"_/\377\212\\-\377\210Z-\377\213\\.\377\222a\060\377\221`\060\377\215^/\377"
|
||||||
|
"\212\\-\377\217_/\360\004\003\001\000\004\003\001\000a?\037\377K\066\"\377uX;\377}^A\377|]"
|
||||||
|
">\377}^A\377}^A\377|]=\377|]?\377|]?\377}^A\377|]?\377|]?\377}_A\377}_B\377"
|
||||||
|
"}^@\377|]>\377}^?\377}^A\377|\\=\377|]?\377}^@\377}^?\377}_A\377}^@\377|"
|
||||||
|
"\\=\377}^@\377|]=\377}^@\377|]?\377|]>\377}^@\377}^@\377}^@\377|\\=\377}"
|
||||||
|
"^@\377}^@\377pJ$\375jF!\313>(\024+\004\003\001\000_>\036\377vY=\377\264~G\377\265|"
|
||||||
|
"E\377\266\177I\377\265|E\377\267\201K\377\266\177H\377\264|D\377\266~G\377"
|
||||||
|
"\270\202M\377\264{D\377\266~G\377\266\177H\377\265|E\377\264{D\377\266\177"
|
||||||
|
"I\377\263zA\377\265~G\377\265|E\377\265~G\377\264{C\377\267\200J\377\266"
|
||||||
|
"\177G\377\265|E\377\264{B\377\266\177H\377\266~G\377\266\177I\377\266\177"
|
||||||
|
"I\377\265|E\377\264{B\377\265|E\377\266\177I\377\267\201K\377\265|E\377\265"
|
||||||
|
"~G\377\261w<\377\245m\066\360>(\024\036\004\003\001\000_>\036\377\204cC\377\301\201B"
|
||||||
|
"\377\270z=\377\270z=\377\300\200A\377\265y<\377\266y<\377\301\202C\377\265"
|
||||||
|
"x<\377\271{=\377\271{=\377\267y<\377\275~>\377\300\200@\377\273}>\377\267"
|
||||||
|
"z<\377\273}>\377\266y<\377\300\200@\377\272{=\377\265y<\377\272|=\377\264"
|
||||||
|
"x;\377\300\200@\377\300\201A\377\276\177?\377\261v:\377\301\202C\377\267"
|
||||||
|
"z<\377\275~>\377\267z<\377\267z<\377\275~>\377\267z<\377\267z<\377\301\201"
|
||||||
|
"B\377\275}>\377\237j\064\377\065\"\020\262\004\003\001\000^>\036\377\204cB\377\267y<"
|
||||||
|
"\377\276~?\377\261u:\377\267y<\377\271{=\377\273|>\377\276~?\377\275~>\377"
|
||||||
|
"\266y<\377\274}>\377\275~>\377\265y<\377\275~>\377\262v;\377\270{=\377\267"
|
||||||
|
"z<\377\267y<\377\276~?\377\265y<\377\273}>\377\300\200@\377\276\177?\377"
|
||||||
|
"\263w;\377\270z=\377\275~>\377\265y<\377\270z=\377\272|=\377\266y<\377\275"
|
||||||
|
"~>\377\272|=\377\272|=\377\270z=\377\264x;\377\273|>\377\276~?\377\232f\063"
|
||||||
|
"\377\065\"\020\262\004\003\001\000^>\036\377\205eE\377\301\203D\377\274}>\377\267y<"
|
||||||
|
"\377\300\200A\377\271{=\377\273|>\377\277\177?\377\264x<\377\266y<\377\272"
|
||||||
|
"{=\377\275~>\377\260u:\377\267y<\377\300\200@\377\300\200A\377\275}>\377"
|
||||||
|
"\267y<\377\270z=\377\264x;\377\276~?\377\265x<\377\275~>\377\272|=\377\276"
|
||||||
|
"~?\377\300\200@\377\271{=\377\272{=\377\270{=\377\263w;\377\276~?\377\272"
|
||||||
|
"{=\377\262v;\377\263w;\377\300\200A\377\267y<\377\274}>\377\234h\064\377\065"
|
||||||
|
"\"\020\262\004\003\001\000_>\036\377\204cC\377\301\202C\377\273|>\377\262v;\377\267"
|
||||||
|
"y<\377\301\201B\377\274}>\377\274}>\377\277\177?\377\300\201A\377\270z=\377"
|
||||||
|
"\267y<\377\301\201B\377\275~>\377\272|=\377\274}>\377\266y<\377\271{=\377"
|
||||||
|
"\271{=\377\274}>\377\300\200@\377\277\177?\377\275}>\377\273|>\377\273|>"
|
||||||
|
"\377\275~>\377\276~?\377\271{=\377\301\201B\377\271{=\377\271{=\377\277\177"
|
||||||
|
"?\377\301\201B\377\274}>\377\261u:\377\301\202C\377\301\201B\377\231f\063"
|
||||||
|
"\377\065\"\020\262\004\003\001\000_>\036\377\205dD\377\303\206I\377\271{=\377\265x<"
|
||||||
|
"\377\272|=\377\275~>\377\273}>\377\301\202C\377\277\177?\377\272|=\377\265"
|
||||||
|
"x<\377\266y<\377\264x;\377\273|>\377\274}>\377\272{=\377\274}>\377\266y<"
|
||||||
|
"\377\267z<\377\271{=\377\266y<\377\271{=\377\267z<\377\264x;\377\275}>\377"
|
||||||
|
"\266y<\377\274}>\377\301\201B\377\277\177?\377\272|=\377\262v;\377\301\201"
|
||||||
|
"B\377\300\201A\377\273|>\377\276~?\377\301\201B\377\264x<\377\243m\066\377"
|
||||||
|
"\065\"\020\262\004\003\001\000_>\036\377\204cC\377\302\204F\377\267z<\377\263w;\377"
|
||||||
|
"\265x<\377\267z<\377\262v;\377\265y<\377\300\200A\377\277\177?\377\274}>"
|
||||||
|
"\377\277\177?\377\270z=\377\262v;\377\300\200@\377\272|>\377\261v:\377\267"
|
||||||
|
"y<\377\266y<\377\301\201B\377\272|=\377\267z<\377\272{=\377\271{=\377\270"
|
||||||
|
"z=\377\272|=\377\274}>\377\266y<\377\300\200@\377\270{=\377\267y<\377\274"
|
||||||
|
"}>\377\275}>\377\274}>\377\271{=\377\275}>\377\274}>\377\236i\064\377\065\""
|
||||||
|
"\020\262\004\003\001\000_>\037\377\204cC\377\300\200@\377\301\201B\377\277\177?\377"
|
||||||
|
"\276~?\377\266y<\377\275}>\377\271{=\377\267y<\377\273|>\377\264x;\377\274"
|
||||||
|
"}>\377\276~?\377\271{=\377\267y<\377\274}>\377\267y<\377\265x<\377\275}>"
|
||||||
|
"\377\267y<\377\300\201A\377\276~?\377\267y<\377\264x;\377\276~?\377\301\202"
|
||||||
|
"C\377\271{=\377\270z=\377\272|=\377\275~>\377\266y<\377\272|>\377\271{=\377"
|
||||||
|
"\300\200@\377\300\200@\377\267z<\377\274}>\377\237j\064\377\065\"\020\262\004"
|
||||||
|
"\003\001\000_>\036\377\205eE\377\274}>\377\261u:\377\267y<\377\267y<\377\272{=\377"
|
||||||
|
"\276~?\377\271{=\377\266y<\377\271{=\377\272|>\377\300\200A\377\271{=\377"
|
||||||
|
"\273|>\377\265y<\377\264x<\377\300\200@\377\271{=\377\262v;\377\262w;\377"
|
||||||
|
"\264x<\377\301\201B\377\274}>\377\272|=\377\265x<\377\300\200@\377\271{="
|
||||||
|
"\377\301\203D\377\265x<\377\277\177?\377\301\202C\377\274}>\377\276~?\377"
|
||||||
|
"\264x;\377\271{=\377\271{=\377\272|=\377\235i\064\377\065\"\020\262\004\003\001\000"
|
||||||
|
"_>\036\377\204cC\377\267z<\377\271{=\377\300\200@\377\267z<\377\271{=\377"
|
||||||
|
"\262v;\377\276~?\377\263w;\377\265x<\377\266y<\377\272|=\377\300\177?\377"
|
||||||
|
"\274}>\377\266y<\377\300\200@\377\267y<\377\275~>\377\275}>\377\276~?\377"
|
||||||
|
"\266y<\377\275}>\377\300\177?\377\263w;\377\266y<\377\270z=\377\263w;\377"
|
||||||
|
"\264x<\377\274}>\377\277\177?\377\271{=\377\300\200@\377\277\177?\377\271"
|
||||||
|
"{=\377\300\201A\377\273|>\377\266y<\377\250p\067\377\065\"\020\262\004\003\001\000^"
|
||||||
|
">\036\377\204cB\377\277\177?\377\300\200@\377\275}>\377\270z=\377\267y<\377"
|
||||||
|
"\275~>\377\271{=\377\266y<\377\271{=\377\274}>\377\271{=\377\263w;\377\260"
|
||||||
|
"u:\377\277\177?\377\262w;\377\275}>\377\273|>\377\301\201B\377\262v;\377"
|
||||||
|
"\267y<\377\272|>\377\267y<\377\274}>\377\273|>\377\300\200A\377\267z<\377"
|
||||||
|
"\265y<\377\275}>\377\266y<\377\271{=\377\262v;\377\273|>\377\271{=\377\300"
|
||||||
|
"\200@\377\274}>\377\274}>\377\243l\066\377\065\"\020\262\004\003\001\000]>\036\377\203"
|
||||||
|
"a@\377\267z<\377\267z<\377\266y<\377\264x;\377\266y<\377\266y<\377\300\200"
|
||||||
|
"A\377\272|>\377\271{=\377\272|=\377\273}>\377\274}>\377\273|>\377\272|=\377"
|
||||||
|
"\301\201B\377\276~?\377\265y<\377\265x<\377\270z=\377\266y<\377\262v;\377"
|
||||||
|
"\267z<\377\264x;\377\301\202C\377\274}>\377\266y<\377\265x<\377\301\202C"
|
||||||
|
"\377\265y<\377\267y<\377\274}>\377\263w;\377\270{=\377\263w;\377\266y<\377"
|
||||||
|
"\275~>\377\242l\066\377\065\"\020\262\004\003\001\000^>\036\377\204bB\377\271{=\377\267"
|
||||||
|
"y<\377\267y<\377\274}>\377\274}>\377\266y<\377\274}>\377\273|>\377\276~?"
|
||||||
|
"\377\277\177?\377\266y<\377\301\202C\377\274}>\377\274}>\377\261v:\377\275"
|
||||||
|
"~>\377\267z<\377\273|>\377\265x<\377\264x<\377\274}>\377\271{=\377\274}>"
|
||||||
|
"\377\274}>\377\266y<\377\274}>\377\274}>\377\300\201A\377\301\202C\377\276"
|
||||||
|
"~?\377\275~>\377\273|>\377\276~?\377\261v;\377\266y<\377\276~?\377\232f\063"
|
||||||
|
"\377\065\"\020\262\004\003\001\000^>\036\377\204b@\377\277\177?\377\263w;\377\272|="
|
||||||
|
"\377\267y<\377\270z=\377\266y<\377\300\200@\377\267z<\377\277\177?\377\300"
|
||||||
|
"\200@\377\276~?\377\274}>\377\272|=\377\275~>\377\275}>\377\273|>\377\270"
|
||||||
|
"z=\377\277\177?\377\266y<\377\265x<\377\264x;\377\267z<\377\267y<\377\267"
|
||||||
|
"z=\377\274}>\377\275}>\377\272|=\377\271{=\377\275}>\377\270z=\377\265x<"
|
||||||
|
"\377\275}>\377\267y<\377\266y<\377\274}>\377\274}>\377\240j\065\377\065\"\020"
|
||||||
|
"\262\004\003\001\000^>\036\377\203`>\377\300\201A\377\300\200@\377\265x<\377\276~"
|
||||||
|
"?\377\267z<\377\274}>\377\271{=\377\267y<\377\265x<\377\274}>\377\276~?\377"
|
||||||
|
"\272|=\377\276~?\377\274}>\377\263w;\377\266y<\377\274}>\377\267z=\377\266"
|
||||||
|
"y<\377\272|=\377\275}>\377\274}>\377\272|>\377\265x<\377\273|>\377\275}>"
|
||||||
|
"\377\267z<\377\300\201A\377\271{=\377\266y<\377\275~>\377\274}>\377\300\200"
|
||||||
|
"@\377\270{=\377\301\201B\377\266y<\377\243l\066\377\065\"\020\262\004\003\001\000]>"
|
||||||
|
"\036\377\204cB\377\270z=\377\263w;\377\275}>\377\267y<\377\277\177?\377\277"
|
||||||
|
"\177?\377\267z<\377\274}>\377\277\177?\377\267y<\377\274}>\377\300\200A\377"
|
||||||
|
"\273|>\377\276~?\377\274}>\377\272|=\377\277\177?\377\272|=\377\272|=\377"
|
||||||
|
"\264w;\377\300\200@\377\274}>\377\271{=\377\266y<\377\271{=\377\273|>\377"
|
||||||
|
"\273|>\377\271{=\377\272|=\377\275~>\377\270z=\377\270z=\377\266y<\377\300"
|
||||||
|
"\200@\377\273|>\377\266y<\377\242l\065\377\065\"\020\262\004\003\001\000]>\036\377\204"
|
||||||
|
"b@\377\275~?\377\271{=\377\275}>\377\271{=\377\260u:\377\271{=\377\274}>"
|
||||||
|
"\377\274}>\377\267z<\377\262w;\377\300\200@\377\274}>\377\266y<\377\274}"
|
||||||
|
">\377\277\177?\377\275~>\377\300\177?\377\272|=\377\266y<\377\273|>\377\274"
|
||||||
|
"}>\377\271{=\377\266y<\377\275~>\377\274}>\377\300\200@\377\272|=\377\275"
|
||||||
|
"}>\377\267y<\377\274}>\377\272{=\377\277\177?\377\270z=\377\277\177?\377"
|
||||||
|
"\265x<\377\277\177?\377\244m\066\377\065\"\020\262\004\003\001\000^>\036\377\205eD\377"
|
||||||
|
"\301\201B\377\272|=\377\300\177?\377\265x<\377\267z<\377\271{=\377\271{="
|
||||||
|
"\377\271{=\377\274}>\377\267z<\377\275~>\377\300\201A\377\271{=\377\265y"
|
||||||
|
"<\377\272|>\377\263w;\377\300\200A\377\271{=\377\275~>\377\274}>\377\271"
|
||||||
|
"{=\377\300\200A\377\264x;\377\266y<\377\274}>\377\267z<\377\272|=\377\267"
|
||||||
|
"z<\377\273|>\377\272|=\377\271{=\377\267y<\377\271{=\377\273|>\377\274}>"
|
||||||
|
"\377\276\177?\377\242l\065\377\065\"\020\262\004\003\001\000^>\036\377\204cC\377\265"
|
||||||
|
"x<\377\266y<\377\272|=\377\262v;\377\273}>\377\271{=\377\301\203D\377\271"
|
||||||
|
"{=\377\300\201A\377\270z=\377\273|>\377\267y<\377\267z<\377\266y<\377\301"
|
||||||
|
"\201B\377\272|=\377\270z=\377\265y<\377\272|=\377\263w;\377\266y<\377\274"
|
||||||
|
"}>\377\275~>\377\275}>\377\272|>\377\261u:\377\271{=\377\275~>\377\275~>"
|
||||||
|
"\377\266y<\377\271{=\377\263w;\377\300\200@\377\266y<\377\277\177?\377\276"
|
||||||
|
"~?\377\235h\064\377\065\"\020\262\004\003\001\000^>\036\377\204bB\377\275~?\377\270{"
|
||||||
|
"=\377\277\177?\377\263w;\377\300\200@\377\274}>\377\267y<\377\301\202C\377"
|
||||||
|
"\267z<\377\271{=\377\276~?\377\266y<\377\274}>\377\262v;\377\300\200A\377"
|
||||||
|
"\266y<\377\270z=\377\267z<\377\272|=\377\270z=\377\277\177?\377\266y<\377"
|
||||||
|
"\301\202C\377\266y<\377\272{=\377\274}>\377\276~?\377\274}>\377\270z=\377"
|
||||||
|
"\267z<\377\264x<\377\266y<\377\265y<\377\262v;\377\271{=\377\301\202D\377"
|
||||||
|
"\237j\064\377\065\"\020\262\004\003\001\000^>\036\377\204b@\377\301\202C\377\274}>\377"
|
||||||
|
"\274}>\377\276~?\377\271{=\377\271{=\377\276~?\377\301\201B\377\300\200@"
|
||||||
|
"\377\277\177?\377\273|>\377\273|>\377\271{=\377\265y<\377\274}>\377\276~"
|
||||||
|
"?\377\273|>\377\275~>\377\300\200?\377\277\177?\377\300\200@\377\262v;\377"
|
||||||
|
"\301\202C\377\263w;\377\275~>\377\266y<\377\263w;\377\266y<\377\266y<\377"
|
||||||
|
"\277\177?\377\261v:\377\267z<\377\275}>\377\274}>\377\267z<\377\300\200@"
|
||||||
|
"\377\237j\064\377\065\"\020\262\004\003\001\000_>\036\377\204bB\377\271{=\377\302\203"
|
||||||
|
"E\377\274}>\377\275~>\377\266y<\377\264x;\377\274}>\377\264x;\377\274}>\377"
|
||||||
|
"\300\177?\377\266y<\377\270z=\377\266y<\377\271{=\377\300\200?\377\277\177"
|
||||||
|
"?\377\262v;\377\275~>\377\263w;\377\271{=\377\275}>\377\276~?\377\274}>\377"
|
||||||
|
"\267z<\377\272|>\377\274}>\377\302\203E\377\271{=\377\271{=\377\277\177?"
|
||||||
|
"\377\272|=\377\261v:\377\275~>\377\264x;\377\267y<\377\301\201B\377\235i"
|
||||||
|
"\064\377\065\"\020\262\004\003\001\000^>\036\377nQ\064\377\303\205H\377\266y<\377\274"
|
||||||
|
"}>\377\274}>\377\270z=\377\273|>\377\270{=\377\276~?\377\273}>\377\266y<"
|
||||||
|
"\377\275~>\377\302\203E\377\274}>\377\276~?\377\276~?\377\276\177?\377\266"
|
||||||
|
"y<\377\267z<\377\271{=\377\274}>\377\300\200A\377\274}>\377\276~?\377\271"
|
||||||
|
"{=\377\264x;\377\266y<\377\276\177?\377\300\200@\377\276~?\377\276~?\377"
|
||||||
|
"\302\203E\377\275~>\377\265y<\377\266y<\377\275~>\377\276\177?\377\240j\065"
|
||||||
|
"\377\065\"\020\262\004\003\001\000L\062\030\377>(\024\377\302\204F\377\263w;\377\300\201"
|
||||||
|
"A\377\300\200@\377\274}>\377\271{=\377\273}>\377\300\201A\377\266y<\377\267"
|
||||||
|
"y<\377\272|=\377\300\201A\377\301\202B\377\273}>\377\300\200@\377\300\200"
|
||||||
|
"@\377\273|>\377\276~?\377\300\200@\377\276~?\377\272|=\377\270{=\377\300"
|
||||||
|
"\201A\377\277\177?\377\274}>\377\266y<\377\301\201B\377\273}>\377\270z=\377"
|
||||||
|
"\274}>\377\274}>\377\275~>\377\300\200@\377\301\202C\377\301\202B\377\264"
|
||||||
|
"x;\377\241k\065\377\065\"\020\262\004\003\001\000fC!\377cA\040\377\233g\063\377\215^."
|
||||||
|
"\377\214].\377\215^/\377\216^/\377\207Z-\377\206Y,\377\201V+\377\214].\377"
|
||||||
|
"\207Z-\377\204X,\377\210Z-\377\216_/\377\233g\063\377\223b\061\377\222a\060"
|
||||||
|
"\377\226d\062\377\214].\377\210[-\377\210Z-\377\215^/\377\224c\061\377\225"
|
||||||
|
"c\061\377\230e\062\377\224b\061\377\227e\062\377\225c\061\377\231f\062\377\227"
|
||||||
|
"d\062\377\230e\062\377\223b\061\377\224b\061\377\223b\061\377\232g\063\377\231"
|
||||||
|
"f\062\377\216_/\377\211[-\377\065\"\020\262\004\003\001\000V\071\035\177F-\026\377P\063"
|
||||||
|
"\031\377cA\037\377gC!\377eA\040\377cA\040\377eB\040\377cA\037\377b@\037\377c@\037"
|
||||||
|
"\377cA\037\377c@\037\377c@\037\377c@\037\377b@\037\377b@\037\377c@\037\377c@\037"
|
||||||
|
"\377_>\036\377a?\037\377a?\037\377c@\037\377b?\037\377a?\037\377`>\036\377^>\036"
|
||||||
|
"\377^>\036\377_>\036\377^>\036\377`>\036\377`>\036\377`>\036\377`>\036\377`>\036"
|
||||||
|
"\377a?\037\377`>\036\377c@\037\377Y:\034\377\065\"\020\324",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char* Artwork::orngBtnUp = (const char*)tempOrngUp;
|
||||||
|
const char* Artwork::orngBtnDn = (const char*)tempOrngDn;
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
#include "peacock.hpp"
|
||||||
|
|
||||||
|
static const char tempLedOn[] = {
|
||||||
|
"\025\036(\000\025\035&\000\025\033#\000\025\025\"\000\242\000\000\001\203\000\000\002r\000\000\004g\000\000\006n"
|
||||||
|
"\000\000\010p\000\000\012\210\000\000\013\231\000\000\013\235\000\000\013\250\000\000\013\261\000\000\011\261"
|
||||||
|
"\000\000\007\304\000\000\005\357\000\000\003\377\000\000\001\025$\063\000\025%\065\000\025'\071\000\025)=\000\025"
|
||||||
|
"*@\000\025\035&\000\025\035&\000\025\036&\000\062\000\000\001\062\000\000\004E\000\000\006j\000\000\011{\000\000\013"
|
||||||
|
"\227\000\000\015\255\000\000\017\300\000\000\021\323\000\000\022\330\000\000\022\336\000\000\022\336\000"
|
||||||
|
"\000\020\325\000\000\016\323\000\000\013\306\000\000\010\313\000\000\005\327\000\000\002\344\000\000\001\025*"
|
||||||
|
"?\000\025';\000\025&\071\000\025\037&\000\025!&\000\066\000\000\001L\000\000\004p\000\000\007\203\000\000\012\244"
|
||||||
|
"\000\000\015\271\000\000\021\315!!\025\340\034\034\027\361\030\030\030\364\024\024\031\372\000"
|
||||||
|
"\000\031\374\000\000\030\374\000\000\030\374\000\000\025\372\000\000\021\370\000\000\016\366\000\000\011\353"
|
||||||
|
"\000\000\006\377\000\000\003\377\000\000\001\024\037\063\000\024\035/\000\025/,\000+\000\000\001<\000\000\004a\000\000"
|
||||||
|
"\007\231\000\000\012\261\000\000\017\317##\024\334\030\030\027\351\017\021\033\366\007\011\036\377"
|
||||||
|
"\004\005\040\377\002\004!\377\002\004!\377\002\002!\377\000\000\037\377\000\000\033\377\000\000\030\377\000"
|
||||||
|
"\000\024\377\000\000\017\377\000\000\012\377\000\000\006\377\000\000\003\377\000\000\001\014\015\026\000\064\000"
|
||||||
|
"\000\001\034\000\000\003\203\000\000\007\246\021\021\013\306::\017\321#%\024\342\022\024\031\363\005"
|
||||||
|
"\007\037\377\000\000#\377\000\000'\375\000\000*\377\000\000*\377\000\000*\377\000\000)\377\000\000&\377"
|
||||||
|
"\000\000#\377\000\000\037\377\000\000\032\377\000\000\025\377\000\000\017\377\000\000\012\377\000\000\005\377"
|
||||||
|
"\000\000\002\013\012\020\000I\000\000\002:\000\000\006\227\000\000\012\265\000\000\016\323%%\024\351\022\022"
|
||||||
|
"\032\376\004\004\040\377\000\000&\377\000\000,\370\001\000\063\340\002\002Q\346\002\002B\355\001\001>\374"
|
||||||
|
"\000\000\064\377\000\000/\377\000\000+\377\000\000&\377\000\000!\377\000\000\033\377\000\000\024\377\000\000"
|
||||||
|
"\016\377\000\000\010\377\000\000\004\377\000\000\001P\000\000\004w\000\000\010\267\002\002\015\332))\023\361"
|
||||||
|
"\024\026\031\377\004\005\040\377\000\000'\371\000\001\060\337\002\003G\316\003\003]\244\004\003\331\264"
|
||||||
|
"\004\003\307\313\003\003\256\330\003\004d\337\002\004L\366\001\002\070\377\000\000-\377\000\000(\377\000"
|
||||||
|
"\000!\377\000\000\032\377\000\000\022\377\000\000\014\377\000\000\006\377\000\000\002V\000\000\005\250\000\000\012"
|
||||||
|
"\327\000\000\017\361\036\036\026\377\011\013\035\377\000\000&\373\000\000/\320\003\004U\216\004\004"
|
||||||
|
"\346e\002\002\370M\001\001\376P\001\001\376S\001\001\375\\\001\002\373\230\003\004\356\327\003\023\204"
|
||||||
|
"\366\001\002\071\377\000\000-\377\000\000&\377\000\000\037\377\000\000\027\377\000\000\017\377\000\000\011"
|
||||||
|
"\377\000\000\003\201\000\000\006\310\013\013\013\357--\022\377\022\024\031\377\000\000\"\377\000\000"
|
||||||
|
"*\344\002\002B\225\004\005\315m\002\003\375\202\002\002\377\235\002\002\377\212\001\001\377\252\001"
|
||||||
|
"\002\377\223\001\001\377\215\001\001\377\304\003\005\357\321\003\006\\\372\000\001\064\377\000\000+"
|
||||||
|
"\377\000\000#\377\000\000\033\377\000\000\022\377\000\000\013\377\000\000\005\250\000\000\010\334\004\004\015"
|
||||||
|
"\372))\023\377\015\017\033\377\000\000%\373\000\000\060\322\003\004Vm\003\003\364\215\003\005\377"
|
||||||
|
"\323@F\377\325@F\377\270\001\001\377\272\001\001\377\323\001\002\377\326\001\003\377\247"
|
||||||
|
"\001\002\377\305\004\011\340\342\002\005H\377\000\000.\377\000\000&\377\000\000\035\377\000\000\024\377"
|
||||||
|
"\000\000\015\377\000\000\006\300\000\000\010\364\000\000\016\377##\024\377\013\013\035\377\000\000&\347"
|
||||||
|
"\002\002<\227\003\005\272l\002\003\373\272\015\017\377\372\356\360\377\377\376\376\377"
|
||||||
|
"\313\024\"\377\374\000\001\377\367\001\001\377\360\001\002\377\331\001\002\377\300\003\006\362"
|
||||||
|
"\337\002\004M\377\000\000/\377\000\000'\377\000\000\036\377\000\000\026\377\000\000\016\377\000\000\007\340"
|
||||||
|
"\000\000\011\377\000\000\016\377!!\025\377\011\013\035\377\000\000'\363\001\001\067\302\003\004\221"
|
||||||
|
"k\002\003\372\254\002\004\377\316\022\026\377\307\026,\377\347\003\010\377\377\000\013\377"
|
||||||
|
"\367\001\005\377\364\001\002\377\362\001\002\377\316\003\006\364\337\002\004M\377\000\000\060\377"
|
||||||
|
"\000\000(\377\000\000\037\377\000\000\026\377\000\000\016\377\000\000\010\357\000\000\010\377\000\000\016\377"
|
||||||
|
"!!\025\377\013\015\034\377\000\000&\370\001\001\063\331\002\004\201r\002\002\372\262\001\002\377\323"
|
||||||
|
"\000\001\377\373\000\017\377\377\000\022\377\374\000\034\377\373\000\030\377\363\001\011\377"
|
||||||
|
"\361\001\011\377\330\003\007\365\337\002\005M\377\000\000\060\377\000\000'\377\000\000\036\377\000\000"
|
||||||
|
"\026\377\000\000\016\377\000\000\010\347\000\000\007\377\000\000\015\377\000\000\024\377\015\015\034\377"
|
||||||
|
"\000\000%\375\000\000/\335\002\004L\301\003\006\352\307\002\003\376\353\000\001\377\374\000\022\377"
|
||||||
|
"\377\000\034\377\371\000\032\377\370\001\021\377\357\001\013\377\366\001\006\377\327\003\005"
|
||||||
|
"\366\336\002\004K\377\000\000/\377\000\000'\377\000\000\035\377\000\000\024\377\000\000\015\377\000\000"
|
||||||
|
"\007\355\000\000\006\377\000\000\014\377\000\000\023\377\021\022\032\377\002\002!\377\000\000*\372\000\001"
|
||||||
|
"\064\321\003\006^\316\003\010\352\306\000\001\377\330\000\000\377\376\000\034\377\370\001\026\377"
|
||||||
|
"\364\001\006\377\360\001\003\377\347\002\004\377\261\005\010\357\334\002\004I\377\000\000+\377\000"
|
||||||
|
"\000$\377\000\000\033\377\000\000\022\377\000\000\013\377\000\000\005\363\000\000\004\377\000\000\012\377\000"
|
||||||
|
"\000\020\377\000\000\026\377\011\011\035\377\000\000%\377\000\000?\373\000\000Y\324\003\010^\311\004"
|
||||||
|
"\015\346\342\002\005\371\317\000\000\377\351\000\003\377\346\002\003\377\314\003\006\377\244\005"
|
||||||
|
"\011\375\215\006\010\330\333\002\003B\377\000\000'\377\000\000\037\377\000\000\027\377\000\000\020\377"
|
||||||
|
"\000\000\011\377\000\000\004\363\000\000\003\377\000\000\007\377\000\000\015\377\000\000\023\377\022\022\032"
|
||||||
|
"\377\004\005\040\377\000\000'\377\000\000-\372\000\001\065\342\007\014L\321\031\035c\271\006\017\256"
|
||||||
|
"\252\005\013\346\231\006\011\353\216\006\011\352\216\006\011\331\307\004\005T\370\000\001+\377"
|
||||||
|
"\000\000\"\377\000\000\033\377\000\000\023\377\000\000\015\377\000\000\007\377\000\000\002\377\000\000\001\377"
|
||||||
|
"\000\000\004\377\000\000\011\377\000\000\017\377\000\000\024\377\000\000\033\377\002\002!\377\000\000&\377"
|
||||||
|
"\000\000+\377\000\000\060\373\007\010\065\353\002\006@\336\002\005I\334\002\004I\331\003\004F\331\011\012"
|
||||||
|
"B\371\002\002+\377\000\000\"\377\000\000\034\377\000\000\025\377\000\000\017\377\000\000\011\377\000\000"
|
||||||
|
"\005\377\000\000\001\025*&\000\377\000\000\002\377\000\000\006\377\000\000\012\377\000\000\020\377\000\000\026"
|
||||||
|
"\377\000\000\033\377\000\000\040\377\000\000%\377\000\000(\377\000\000+\377\000\000,\377\000\000,\377\000"
|
||||||
|
"\000+\377\000\000)\377\000\000%\377\000\000!\377\000\000\033\377\000\000\025\377\000\000\020\377\000\000\012"
|
||||||
|
"\377\000\000\006\377\000\000\002\013\033\032\000\025-)\000\377\000\000\001\377\000\000\003\377\000\000\006\377"
|
||||||
|
"\000\000\013\377\000\000\020\377\000\000\025\377\000\000\031\377\000\000\035\377\000\000\040\377\000\000\""
|
||||||
|
"\377\000\000#\377\000\000#\377\000\000#\377\000\000!\377\000\000\036\377\000\000\031\377\000\000\025\377"
|
||||||
|
"\000\000\020\377\000\000\013\377\000\000\007\377\000\000\003\377\000\000\001\013\034\033\000\025-)\000\025,(\000"
|
||||||
|
"\377\000\000\001\377\000\000\003\377\000\000\006\377\000\000\012\377\000\000\016\377\000\000\022\377\000\000\026"
|
||||||
|
"\377\000\000\031\377\000\000\032\377\000\000\033\377\000\000\033\377\000\000\032\377\000\000\030\377\000"
|
||||||
|
"\000\026\377\000\000\022\377\000\000\016\377\000\000\012\377\000\000\006\377\000\000\003\377\000\000\001\013\024"
|
||||||
|
"\033\000\013\024\032\000\025/+\000\025)%\000\025\065\062\000\377\000\000\001\377\000\000\002\377\000\000\005\377"
|
||||||
|
"\000\000\010\377\000\000\013\377\000\000\015\377\000\000\020\377\000\000\021\377\000\000\022\377\000\000\022"
|
||||||
|
"\377\000\000\022\377\000\000\020\377\000\000\016\377\000\000\013\377\000\000\011\377\000\000\005\377\000\000"
|
||||||
|
"\003\377\000\000\001\013\024!\000\013\015\031\000\013\014\027\000\304\301\273\000\304\301\273\000\025"
|
||||||
|
"-)\000\025$\040\000\025$\040\000\377\000\000\001\377\000\000\002\377\000\000\004\377\000\000\006\377\000\000\010"
|
||||||
|
"\377\000\000\012\377\000\000\013\377\000\000\012\377\000\000\012\377\000\000\011\377\000\000\007\377\000\000"
|
||||||
|
"\005\377\000\000\003\377\000\000\001\025\030D\000\025\027\063\000\025\030:\000\025\027\064\000\025\030\070\000"
|
||||||
|
"\025-)\000\025'#\000\307\304\276\000\312\307\301\000\025>/\000\025\065\026\000\025\071\027\000\377"
|
||||||
|
"\000\000\001\377\000\000\002\377\000\000\003\377\000\000\004\377\000\000\004\377\000\000\005\377\000\000\004\377\000"
|
||||||
|
"\000\003\377\000\000\002\377\000\000\001\025\032C\000\025\031>\000\025\027\063\000\025\026\061\000\025\030<\000"
|
||||||
|
"\025\031>\000\025\033I\000",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* Artwork::ledOnData = (const char*)tempLedOn;
|
|
@ -0,0 +1,499 @@
|
||||||
|
/*
|
||||||
|
Chassis polysynth framework
|
||||||
|
|
||||||
|
Copyright 2024 Gordon JC Pearce <gordonjcp@gjcp.net>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||||
|
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "chassis.hpp"
|
||||||
|
|
||||||
|
void Chassis::initParameter(uint32_t index, Parameter& parameter) {
|
||||||
|
parameter.ranges.min = 0.0f;
|
||||||
|
parameter.ranges.max = 127.0f;
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.ranges.def = 0.0f;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case pLFORate:
|
||||||
|
parameter.name = "LFO Rate";
|
||||||
|
parameter.symbol = "ch_lforate";
|
||||||
|
parameter.midiCC = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pLFODelay:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "LFO Delay";
|
||||||
|
parameter.symbol = "ch_lfodelay";
|
||||||
|
parameter.midiCC = 9;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pVCORange:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
|
||||||
|
parameter.name = "Range";
|
||||||
|
parameter.symbol = "ch_vcorange";
|
||||||
|
parameter.ranges.max = 2.0f;
|
||||||
|
parameter.midiCC = 12;
|
||||||
|
parameter.enumValues.count = 3;
|
||||||
|
parameter.enumValues.restrictedMode = true;
|
||||||
|
{
|
||||||
|
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[3];
|
||||||
|
enumValues[0].value = 0.0f;
|
||||||
|
enumValues[0].label = "16'";
|
||||||
|
enumValues[1].value = 1.0f;
|
||||||
|
enumValues[1].label = "8'";
|
||||||
|
enumValues[2].value = 2.0f;
|
||||||
|
enumValues[2].label = "4'";
|
||||||
|
parameter.enumValues.values = enumValues;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pLFODepth:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "LFO";
|
||||||
|
parameter.symbol = "ch_lfo";
|
||||||
|
parameter.midiCC = 13;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pPWMDepth:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "PWM";
|
||||||
|
parameter.symbol = "ch_pwm";
|
||||||
|
parameter.midiCC = 14;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramPWMMode:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
||||||
|
parameter.name = "PWM Mode";
|
||||||
|
parameter.symbol = "ch_pwmmode";
|
||||||
|
parameter.ranges.min = 0.0f;
|
||||||
|
parameter.ranges.max = 1.0f;
|
||||||
|
parameter.ranges.def = 1.0f;
|
||||||
|
parameter.midiCC = 15;
|
||||||
|
parameter.enumValues.count = 2;
|
||||||
|
parameter.enumValues.restrictedMode = true;
|
||||||
|
{
|
||||||
|
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
|
||||||
|
enumValues[0].value = 0.0f;
|
||||||
|
enumValues[0].label = "LFO";
|
||||||
|
enumValues[1].value = 1.0f;
|
||||||
|
enumValues[1].label = "MAN";
|
||||||
|
parameter.enumValues.values = enumValues;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case pSaw:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
||||||
|
parameter.name = "Saw";
|
||||||
|
parameter.symbol = "ch_saw";
|
||||||
|
parameter.ranges.max = 1.0f;
|
||||||
|
parameter.midiCC = 17;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pSqr:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
||||||
|
parameter.name = "Square";
|
||||||
|
parameter.symbol = "ch_sqr";
|
||||||
|
parameter.ranges.max = 1.0f;
|
||||||
|
parameter.midiCC = 16;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pSubLevel:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Sub Osc";
|
||||||
|
parameter.symbol = "ch_sub";
|
||||||
|
parameter.midiCC = 18;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pNoiseLevel:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Noise";
|
||||||
|
parameter.symbol = "ch_noise";
|
||||||
|
parameter.midiCC = 19;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pHPF:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
|
||||||
|
parameter.name = "HPF";
|
||||||
|
parameter.symbol = "ch_hpf";
|
||||||
|
parameter.ranges.max = 4.0f;
|
||||||
|
parameter.midiCC = 20;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pCutoff:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Freq";
|
||||||
|
parameter.symbol = "ch_freq";
|
||||||
|
parameter.midiCC = 74;
|
||||||
|
break;
|
||||||
|
case pRes:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Res";
|
||||||
|
parameter.symbol = "ch_reso";
|
||||||
|
parameter.midiCC = 71;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramVCFMode:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
|
||||||
|
parameter.name = "Polarity";
|
||||||
|
parameter.symbol = "ch_vcfmode";
|
||||||
|
parameter.ranges.min = 0.0f;
|
||||||
|
parameter.ranges.max = 1.0f;
|
||||||
|
parameter.ranges.def = 1.0f;
|
||||||
|
parameter.midiCC = 21;
|
||||||
|
parameter.enumValues.count = 2;
|
||||||
|
parameter.enumValues.restrictedMode = true;
|
||||||
|
{
|
||||||
|
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
|
||||||
|
enumValues[0].value = 0.0f;
|
||||||
|
enumValues[0].label = "POS";
|
||||||
|
enumValues[1].value = 1.0f;
|
||||||
|
enumValues[1].label = "INV";
|
||||||
|
parameter.enumValues.values = enumValues;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case pEnv:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Env";
|
||||||
|
parameter.symbol = "ch_vcfenv";
|
||||||
|
parameter.midiCC = 22;
|
||||||
|
break;
|
||||||
|
case pLfo:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "LFO";
|
||||||
|
parameter.symbol = "ch_vcflfo";
|
||||||
|
parameter.midiCC = 23;
|
||||||
|
break;
|
||||||
|
case pKyb:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Kybd";
|
||||||
|
parameter.symbol = "ch_vcfkey";
|
||||||
|
parameter.midiCC = 24;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pAtk:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Attack";
|
||||||
|
parameter.symbol = "ch_attack";
|
||||||
|
parameter.midiCC = 73;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pDcy:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Decay";
|
||||||
|
parameter.symbol = "ch_decay";
|
||||||
|
parameter.midiCC = 75;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pStn:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Sustain";
|
||||||
|
parameter.symbol = "ch_sustain";
|
||||||
|
parameter.midiCC = 27;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pRls:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "Release";
|
||||||
|
parameter.symbol = "ch_release";
|
||||||
|
parameter.midiCC = 72;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramEnvGate:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsInteger; // | kParameterIsBoolean;
|
||||||
|
parameter.name = "Env-Gate";
|
||||||
|
parameter.symbol = "ch_envgate";
|
||||||
|
parameter.ranges.min = 0.0f;
|
||||||
|
parameter.ranges.max = 1.0f;
|
||||||
|
parameter.ranges.def = 1.0f;
|
||||||
|
parameter.midiCC = 25;
|
||||||
|
parameter.enumValues.count = 2;
|
||||||
|
parameter.enumValues.restrictedMode = true;
|
||||||
|
{
|
||||||
|
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[2];
|
||||||
|
enumValues[0].value = 0.0f;
|
||||||
|
enumValues[0].label = "ENV";
|
||||||
|
enumValues[1].value = 1.0f;
|
||||||
|
enumValues[1].label = "GATE";
|
||||||
|
parameter.enumValues.values = enumValues;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case pVCALevel:
|
||||||
|
parameter.hints = kParameterIsAutomatable;
|
||||||
|
parameter.name = "VCA Level";
|
||||||
|
parameter.symbol = "ch_vcalevel";
|
||||||
|
parameter.midiCC = 26;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pChorus:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
|
||||||
|
parameter.name = "Chorus Mode";
|
||||||
|
parameter.symbol = "ch_chorus";
|
||||||
|
parameter.ranges.max = 2.0f;
|
||||||
|
parameter.midiCC = 12;
|
||||||
|
parameter.enumValues.count = 3;
|
||||||
|
parameter.enumValues.restrictedMode = true;
|
||||||
|
{
|
||||||
|
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[3];
|
||||||
|
enumValues[0].value = 0.0f;
|
||||||
|
enumValues[0].label = "Off";
|
||||||
|
enumValues[1].value = 1.0f;
|
||||||
|
enumValues[1].label = "Slow";
|
||||||
|
enumValues[2].value = 2.0f;
|
||||||
|
enumValues[2].label = "Fast";
|
||||||
|
parameter.enumValues.values = enumValues;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramModWheel:
|
||||||
|
parameter.hints = kParameterIsAutomatable | kParameterIsHidden;
|
||||||
|
parameter.name = "Mod wheel";
|
||||||
|
parameter.symbol = "ch_modwheel";
|
||||||
|
parameter.ranges.min = 0.0f;
|
||||||
|
parameter.ranges.max = 127.0f;
|
||||||
|
parameter.ranges.def = 0.0f;
|
||||||
|
parameter.midiCC = 1;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
// chorus, porta, bend range, key mode still to do
|
||||||
|
}
|
||||||
|
|
||||||
|
void Chassis::setParameterValue(uint32_t index, float value) {
|
||||||
|
// should be trapped by host, but let's be safe
|
||||||
|
if (value < 0.0f) value = 0.0f;
|
||||||
|
if (value > 127.0f) value = 127.0f;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case pLFORate:
|
||||||
|
patchRam.lfoRate = value;
|
||||||
|
break;
|
||||||
|
case pLFODelay:
|
||||||
|
patchRam.lfoDelay = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pLFODepth:
|
||||||
|
patchRam.vcoLfo = value;
|
||||||
|
break;
|
||||||
|
case pPWMDepth:
|
||||||
|
patchRam.pwmLfo = value / 1.27;
|
||||||
|
break;
|
||||||
|
case pSubLevel:
|
||||||
|
patchRam.sub = value;
|
||||||
|
break;
|
||||||
|
case pNoiseLevel:
|
||||||
|
patchRam.noise = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pCutoff:
|
||||||
|
patchRam.vcfFreq = value;
|
||||||
|
break;
|
||||||
|
case pRes:
|
||||||
|
patchRam.vcfReso = value;
|
||||||
|
break;
|
||||||
|
case pEnv:
|
||||||
|
patchRam.vcfEnv = value;
|
||||||
|
break;
|
||||||
|
case pLfo:
|
||||||
|
patchRam.vcfLfo = value;
|
||||||
|
break;
|
||||||
|
case pKyb:
|
||||||
|
patchRam.vcfKey = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pVCALevel:
|
||||||
|
patchRam.vca = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pAtk:
|
||||||
|
patchRam.env_a = value;
|
||||||
|
break;
|
||||||
|
case pDcy:
|
||||||
|
patchRam.env_d = value;
|
||||||
|
break;
|
||||||
|
case pStn:
|
||||||
|
patchRam.env_s = value;
|
||||||
|
break;
|
||||||
|
case pRls:
|
||||||
|
patchRam.env_r = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// switch 1 params
|
||||||
|
case pVCORange: // bits 0-2 of switch 1
|
||||||
|
// doesn't look great in Carla because of odd behaviour with small integer knobs
|
||||||
|
patchRam.switch1 &= 0xf8;
|
||||||
|
patchRam.switch1 |= (1 << (int)(value - 1));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pSqr: // bit 3 of switch 1
|
||||||
|
patchRam.switch1 &= 0xf7;
|
||||||
|
patchRam.switch1 |= (value >= 0.5) << 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pSaw: // bit 4 of switch 1
|
||||||
|
patchRam.switch1 &= 0xef;
|
||||||
|
patchRam.switch1 |= (value >= 0.5) << 4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pChorus:
|
||||||
|
patchRam.switch1 &= 0x9f;
|
||||||
|
// 60, 40, 00
|
||||||
|
switch ((int)value) {
|
||||||
|
case 0:
|
||||||
|
patchRam.switch1 |= 0x60;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
patchRam.switch1 |= 0x40;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
patchRam.switch1 |= 0x00;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
// switch 2 params
|
||||||
|
case paramPWMMode: // bit 0 of switch 2
|
||||||
|
patchRam.switch2 &= 0xfe;
|
||||||
|
patchRam.switch2 |= (value >= 0.5);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case paramVCFMode: // bit 1 of switch 2
|
||||||
|
patchRam.switch2 &= 0xfd;
|
||||||
|
patchRam.switch2 |= (value >= 0.5) << 1;
|
||||||
|
break;
|
||||||
|
case paramEnvGate:
|
||||||
|
patchRam.switch2 &= 0xfb;
|
||||||
|
patchRam.switch2 |= (value >= 0.5) << 2;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case pHPF: // bits 3-4 of switch 2
|
||||||
|
// doesn't look great in Carla because of odd behaviour with small integer knobs
|
||||||
|
if (value > 3) value = 3;
|
||||||
|
patchRam.switch2 &= 0xe7;
|
||||||
|
patchRam.switch2 |= (3 - (int)value) << 3;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramModWheel:
|
||||||
|
s.ff64 = (int)value << 1;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float Chassis::getParameterValue(uint32_t index) const {
|
||||||
|
switch (index) {
|
||||||
|
case pLFORate:
|
||||||
|
return patchRam.lfoRate;
|
||||||
|
break;
|
||||||
|
case pLFODelay:
|
||||||
|
return patchRam.lfoDelay;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pVCORange:
|
||||||
|
// FIXME this needs to be better generally
|
||||||
|
switch (patchRam.switch1 & 0x07) {
|
||||||
|
case 1:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
return 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pLFODepth:
|
||||||
|
return patchRam.vcoLfo;
|
||||||
|
break;
|
||||||
|
case pPWMDepth:
|
||||||
|
return patchRam.pwmLfo * 1.27f;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramPWMMode:
|
||||||
|
return (patchRam.switch2 & 0x01) != 0;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case pSaw:
|
||||||
|
return (patchRam.switch1 & 0x10) != 0;
|
||||||
|
break;
|
||||||
|
case pSqr:
|
||||||
|
return (patchRam.switch1 & 0x08) != 0;
|
||||||
|
|
||||||
|
case pSubLevel:
|
||||||
|
return patchRam.sub;
|
||||||
|
break;
|
||||||
|
case pNoiseLevel:
|
||||||
|
return patchRam.noise;
|
||||||
|
break;
|
||||||
|
case pHPF:
|
||||||
|
return 3 - ((patchRam.switch2 & 0x18) >> 3);
|
||||||
|
break;
|
||||||
|
case pCutoff:
|
||||||
|
return patchRam.vcfFreq;
|
||||||
|
break;
|
||||||
|
case pRes:
|
||||||
|
return patchRam.vcfReso;
|
||||||
|
break;
|
||||||
|
case pEnv:
|
||||||
|
return patchRam.vcfEnv;
|
||||||
|
break;
|
||||||
|
case pLfo:
|
||||||
|
return patchRam.vcfLfo;
|
||||||
|
break;
|
||||||
|
case pKyb:
|
||||||
|
return patchRam.vcfKey;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramVCFMode:
|
||||||
|
return (patchRam.switch2 & 0x02) != 0;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case pAtk:
|
||||||
|
return patchRam.env_a;
|
||||||
|
break;
|
||||||
|
case pDcy:
|
||||||
|
return patchRam.env_d;
|
||||||
|
break;
|
||||||
|
case pStn:
|
||||||
|
return patchRam.env_s;
|
||||||
|
break;
|
||||||
|
case pRls:
|
||||||
|
return patchRam.env_r;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case paramEnvGate:
|
||||||
|
return (patchRam.switch2 & 0x04) != 0;
|
||||||
|
*/
|
||||||
|
case pVCALevel:
|
||||||
|
return patchRam.vca;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pChorus:
|
||||||
|
// FIXME this needs to be better generally
|
||||||
|
switch (patchRam.switch1 & 0x60) {
|
||||||
|
case 0x40:
|
||||||
|
return 1;
|
||||||
|
case 0x00:
|
||||||
|
return 2;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
30924
plugin/peacock.cpp
30924
plugin/peacock.cpp
File diff suppressed because it is too large
Load Diff
|
@ -2,18 +2,29 @@
|
||||||
|
|
||||||
namespace Artwork {
|
namespace Artwork {
|
||||||
|
|
||||||
|
extern const char *orngBtnUp;
|
||||||
|
extern const char *orngBtnDn;
|
||||||
|
const unsigned int orngBtnSize = 41 * 30 * 4;
|
||||||
|
const unsigned int orngBtnWidth = 41;
|
||||||
|
const unsigned int orngBtnHeight = 30;
|
||||||
|
|
||||||
|
|
||||||
|
extern const char *ledOnData;
|
||||||
|
const unsigned int ledDataSize = 24 * 24 * 4;
|
||||||
|
const unsigned int ledWidth = 24;
|
||||||
|
const unsigned int ledHeight = 24;
|
||||||
|
|
||||||
extern const char *orangeData;
|
extern const char *orangeData;
|
||||||
extern const char *greenData;
|
extern const char *greenData;
|
||||||
extern const char *blueData;
|
extern const char *blueData;
|
||||||
extern const char *whiteData;
|
extern const char *whiteData;
|
||||||
|
|
||||||
const unsigned int sliderDataSize = 38*17*3;
|
const unsigned int sliderDataSize = 38 * 17 * 3;
|
||||||
const unsigned int sliderWidth = 41;
|
const unsigned int sliderWidth = 41;
|
||||||
const unsigned int sliderHeight = 26;
|
const unsigned int sliderHeight = 26;
|
||||||
|
|
||||||
|
|
||||||
extern const char *backgroundData;
|
extern const char *backgroundData;
|
||||||
const unsigned int backgroundDataSize = 700*400*3;
|
const unsigned int backgroundDataSize = 700 * 400 * 3;
|
||||||
const unsigned int backgroundWidth = 700;
|
const unsigned int backgroundWidth = 700;
|
||||||
const unsigned int backgroundHeight = 400;
|
const unsigned int backgroundHeight = 400;
|
||||||
} // namespace Artwork
|
} // namespace Artwork
|
293
plugin/ui.cpp
293
plugin/ui.cpp
|
@ -7,8 +7,17 @@ START_NAMESPACE_DISTRHO
|
||||||
|
|
||||||
namespace Art = Artwork;
|
namespace Art = Artwork;
|
||||||
|
|
||||||
|
void prepSlider(ImageSlider* s, uint id, int x, int y) {
|
||||||
|
s->setId(id);
|
||||||
|
s->setStartPos(x, y);
|
||||||
|
s->setEndPos(x, y + 79); // 80px high
|
||||||
|
s->setInverted(true);
|
||||||
|
s->setRange(0, 127.0f);
|
||||||
|
}
|
||||||
|
|
||||||
DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundHeight, true),
|
DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundHeight, true),
|
||||||
fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight, kImageFormatRGB)
|
fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight, kImageFormatRGB),
|
||||||
|
fImgLedOn(Art::ledOnData, Art::ledWidth, Art::ledHeight, kImageFormatRGBA)
|
||||||
|
|
||||||
{
|
{
|
||||||
Image orangeSlider(Art::orangeData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
|
Image orangeSlider(Art::orangeData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
|
||||||
|
@ -17,125 +26,119 @@ DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundH
|
||||||
Image whiteSlider(Art::whiteData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
|
Image whiteSlider(Art::whiteData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA);
|
||||||
|
|
||||||
xSliderLFORate = new ImageSlider(this, orangeSlider);
|
xSliderLFORate = new ImageSlider(this, orangeSlider);
|
||||||
xSliderLFORate->setId(Chassis::pLFORate);
|
prepSlider(xSliderLFORate, pLFORate, 46, 72);
|
||||||
xSliderLFORate->setStartPos(50, 72);
|
|
||||||
xSliderLFORate->setEndPos(50, 151);
|
|
||||||
xSliderLFORate->setRange(0, 127.0f);
|
|
||||||
xSliderLFORate->setCallback(this);
|
xSliderLFORate->setCallback(this);
|
||||||
|
|
||||||
xSliderLFODelay = new ImageSlider(this, orangeSlider);
|
xSliderLFODelay = new ImageSlider(this, orangeSlider);
|
||||||
xSliderLFODelay->setId(Chassis::pLFODelay);
|
prepSlider(xSliderLFODelay, pLFODelay, 84, 72);
|
||||||
xSliderLFODelay->setStartPos(92, 72);
|
|
||||||
xSliderLFODelay->setEndPos(92, 151);
|
|
||||||
xSliderLFODelay->setRange(0, 127.0f);
|
|
||||||
xSliderLFODelay->setCallback(this);
|
xSliderLFODelay->setCallback(this);
|
||||||
|
|
||||||
xSliderLFODepth = new ImageSlider(this, greenSlider);
|
xSliderLFODepth = new ImageSlider(this, greenSlider);
|
||||||
xSliderLFODepth->setId(Chassis::pLFODepth);
|
prepSlider(xSliderLFODepth, pLFODepth, 290, 72);
|
||||||
xSliderLFODepth->setStartPos(292, 72);
|
|
||||||
xSliderLFODepth->setEndPos(292, 151);
|
|
||||||
xSliderLFODepth->setRange(0, 127.0f);
|
|
||||||
xSliderLFODepth->setCallback(this);
|
xSliderLFODepth->setCallback(this);
|
||||||
|
|
||||||
xSliderPWMDepth = new ImageSlider(this, greenSlider);
|
xSliderPWMDepth = new ImageSlider(this, greenSlider);
|
||||||
xSliderPWMDepth->setId(Chassis::pPWMDepth);
|
prepSlider(xSliderPWMDepth, pPWMDepth, 329, 72);
|
||||||
xSliderPWMDepth->setStartPos(331, 72);
|
|
||||||
xSliderPWMDepth->setEndPos(331, 151);
|
|
||||||
xSliderPWMDepth->setRange(0, 127.0f);
|
|
||||||
xSliderPWMDepth->setCallback(this);
|
xSliderPWMDepth->setCallback(this);
|
||||||
|
|
||||||
xSliderSubLevel = new ImageSlider(this, greenSlider);
|
xSliderSubLevel = new ImageSlider(this, greenSlider);
|
||||||
xSliderSubLevel->setId(Chassis::pSubLevel);
|
prepSlider(xSliderSubLevel, pSubLevel, 510, 72);
|
||||||
xSliderSubLevel->setStartPos(518, 72);
|
|
||||||
xSliderSubLevel->setEndPos(518, 151);
|
|
||||||
xSliderSubLevel->setRange(0, 127.0f);
|
|
||||||
xSliderSubLevel->setCallback(this);
|
xSliderSubLevel->setCallback(this);
|
||||||
|
|
||||||
xSliderNoiseLevel = new ImageSlider(this, greenSlider);
|
xSliderNoiseLevel = new ImageSlider(this, greenSlider);
|
||||||
xSliderNoiseLevel->setId(Chassis::pNoiseLevel);
|
prepSlider(xSliderNoiseLevel, pNoiseLevel, 551, 72);
|
||||||
xSliderNoiseLevel->setStartPos(560, 72);
|
|
||||||
xSliderNoiseLevel->setEndPos(560, 151);
|
|
||||||
xSliderNoiseLevel->setRange(0, 127.0f);
|
|
||||||
xSliderNoiseLevel->setCallback(this);
|
xSliderNoiseLevel->setCallback(this);
|
||||||
|
|
||||||
xSliderHPF = new ImageSlider(this, blueSlider);
|
xSliderHPF = new ImageSlider(this, blueSlider);
|
||||||
xSliderHPF->setId(Chassis::pHPF);
|
prepSlider(xSliderHPF, pHPF, 618, 72);
|
||||||
xSliderHPF->setStartPos(619, 72);
|
|
||||||
xSliderHPF->setEndPos(619, 151);
|
|
||||||
xSliderHPF->setRange(0, 3.0f);
|
|
||||||
xSliderHPF->setStep(1);
|
xSliderHPF->setStep(1);
|
||||||
|
xSliderHPF->setRange(0, 3);
|
||||||
xSliderHPF->setCallback(this);
|
xSliderHPF->setCallback(this);
|
||||||
|
|
||||||
xSliderCutoff = new ImageSlider(this, blueSlider);
|
xSliderCutoff = new ImageSlider(this, blueSlider);
|
||||||
xSliderCutoff->setId(Chassis::pCutoff);
|
prepSlider(xSliderCutoff, pCutoff, 26, 261);
|
||||||
xSliderCutoff->setStartPos(21, 261);
|
|
||||||
xSliderCutoff->setEndPos(21, 340);
|
|
||||||
xSliderCutoff->setRange(0, 127.0f);
|
|
||||||
xSliderCutoff->setCallback(this);
|
xSliderCutoff->setCallback(this);
|
||||||
|
|
||||||
xSliderRes = new ImageSlider(this, blueSlider);
|
xSliderRes = new ImageSlider(this, blueSlider);
|
||||||
xSliderRes->setId(Chassis::pRes);
|
prepSlider(xSliderRes, pRes, 65, 261);
|
||||||
xSliderRes->setStartPos(60, 261);
|
|
||||||
xSliderRes->setEndPos(60, 340);
|
|
||||||
xSliderRes->setRange(0, 127.0f);
|
|
||||||
xSliderRes->setCallback(this);
|
xSliderRes->setCallback(this);
|
||||||
|
|
||||||
xSliderEnv = new ImageSlider(this, blueSlider);
|
xSliderEnv = new ImageSlider(this, blueSlider);
|
||||||
xSliderEnv->setId(Chassis::pEnv);
|
prepSlider(xSliderEnv, pEnv, 149, 261);
|
||||||
xSliderEnv->setStartPos(144, 261);
|
|
||||||
xSliderEnv->setEndPos(144, 340);
|
|
||||||
xSliderEnv->setRange(0, 127.0f);
|
|
||||||
xSliderEnv->setCallback(this);
|
xSliderEnv->setCallback(this);
|
||||||
|
|
||||||
xSliderLfo = new ImageSlider(this, blueSlider);
|
xSliderLfo = new ImageSlider(this, blueSlider);
|
||||||
xSliderLfo->setId(Chassis::pLfo);
|
prepSlider(xSliderLfo, pLfo, 189, 261);
|
||||||
xSliderLfo->setStartPos(183, 261);
|
|
||||||
xSliderLfo->setEndPos(183, 340);
|
|
||||||
xSliderLfo->setRange(0, 127.0f);
|
|
||||||
xSliderLfo->setCallback(this);
|
xSliderLfo->setCallback(this);
|
||||||
|
|
||||||
xSliderKyb = new ImageSlider(this, blueSlider);
|
xSliderKyb = new ImageSlider(this, blueSlider);
|
||||||
xSliderKyb->setId(Chassis::pKyb);
|
prepSlider(xSliderKyb, pKyb, 228, 261);
|
||||||
xSliderKyb->setStartPos(222, 261);
|
|
||||||
xSliderKyb->setEndPos(222, 340);
|
|
||||||
xSliderKyb->setRange(0, 127.0f);
|
|
||||||
xSliderKyb->setCallback(this);
|
xSliderKyb->setCallback(this);
|
||||||
|
|
||||||
xSliderVCALevel = new ImageSlider(this, whiteSlider);
|
xSliderVCALevel = new ImageSlider(this, whiteSlider);
|
||||||
xSliderVCALevel->setId(Chassis::pVCALevel);
|
prepSlider(xSliderVCALevel, pVCALevel, 319, 261);
|
||||||
xSliderVCALevel->setStartPos(314, 261);
|
|
||||||
xSliderVCALevel->setEndPos(314, 340);
|
|
||||||
xSliderVCALevel->setRange(0, 127.0f);
|
|
||||||
xSliderVCALevel->setCallback(this);
|
xSliderVCALevel->setCallback(this);
|
||||||
|
|
||||||
xSliderAtk = new ImageSlider(this, whiteSlider);
|
xSliderAtk = new ImageSlider(this, whiteSlider);
|
||||||
xSliderAtk->setId(Chassis::pAtk);
|
prepSlider(xSliderAtk, pVCALevel, 385, 261);
|
||||||
xSliderAtk->setStartPos(375, 261);
|
|
||||||
xSliderAtk->setEndPos(375, 340);
|
|
||||||
xSliderAtk->setRange(0, 127.0f);
|
|
||||||
xSliderAtk->setCallback(this);
|
xSliderAtk->setCallback(this);
|
||||||
|
|
||||||
xSliderDcy = new ImageSlider(this, whiteSlider);
|
xSliderDcy = new ImageSlider(this, whiteSlider);
|
||||||
xSliderDcy->setId(Chassis::pDcy);
|
prepSlider(xSliderDcy, pDcy, 425, 261);
|
||||||
xSliderDcy->setStartPos(414, 261);
|
|
||||||
xSliderDcy->setEndPos(414, 340);
|
|
||||||
xSliderDcy->setRange(0, 127.0f);
|
|
||||||
xSliderDcy->setCallback(this);
|
xSliderDcy->setCallback(this);
|
||||||
|
|
||||||
xSliderStn = new ImageSlider(this, whiteSlider);
|
xSliderStn = new ImageSlider(this, whiteSlider);
|
||||||
xSliderStn->setId(Chassis::pStn);
|
prepSlider(xSliderStn, pStn, 465, 261);
|
||||||
xSliderStn->setStartPos(454, 261);
|
|
||||||
xSliderStn->setEndPos(454, 340);
|
|
||||||
xSliderStn->setRange(0, 127.0f);
|
|
||||||
xSliderStn->setCallback(this);
|
xSliderStn->setCallback(this);
|
||||||
|
|
||||||
xSliderRls = new ImageSlider(this, whiteSlider);
|
xSliderRls = new ImageSlider(this, whiteSlider);
|
||||||
xSliderRls->setId(Chassis::pRls);
|
prepSlider(xSliderRls, pRls, 505, 261);
|
||||||
xSliderRls->setStartPos(493, 261);
|
|
||||||
xSliderRls->setEndPos(493, 340);
|
|
||||||
xSliderRls->setRange(0, 127.0f);
|
|
||||||
xSliderRls->setCallback(this);
|
xSliderRls->setCallback(this);
|
||||||
|
|
||||||
|
xBtn16ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtn16ft->setAbsolutePos(149, 104);
|
||||||
|
xBtn16ft->setId(btn16);
|
||||||
|
xBtn16ft->setCallback(this);
|
||||||
|
xBtn8ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtn8ft->setAbsolutePos(190, 104);
|
||||||
|
xBtn8ft->setId(btn8);
|
||||||
|
xBtn8ft->setCallback(this);
|
||||||
|
xBtn4ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtn4ft->setAbsolutePos(231, 104);
|
||||||
|
xBtn4ft->setId(btn4);
|
||||||
|
xBtn4ft->setCallback(this);
|
||||||
|
|
||||||
|
// waveform
|
||||||
|
xBtnPls = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtnPls->setAbsolutePos(414, 104);
|
||||||
|
xBtnPls->setId(btnPls);
|
||||||
|
xBtnPls->setCallback(this);
|
||||||
|
xBtnSaw = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtnSaw->setAbsolutePos(455, 104);
|
||||||
|
xBtnSaw->setId(btnSaw);
|
||||||
|
xBtnSaw->setCallback(this);
|
||||||
|
|
||||||
|
// Chorus
|
||||||
|
xBtnCh0 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtnCh0->setAbsolutePos(562, 293);
|
||||||
|
xBtnCh0->setId(btnCh0);
|
||||||
|
xBtnCh0->setCallback(this);
|
||||||
|
xBtnCh1 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtnCh1->setAbsolutePos(603, 293);
|
||||||
|
xBtnCh1->setId(btnCh1);
|
||||||
|
xBtnCh1->setCallback(this);
|
||||||
|
xBtnCh2 = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA),
|
||||||
|
Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGBA));
|
||||||
|
xBtnCh2->setAbsolutePos(644, 293);
|
||||||
|
xBtnCh2->setId(btnCh2);
|
||||||
|
xBtnCh2->setCallback(this);
|
||||||
programLoaded(0);
|
programLoaded(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,42 +147,95 @@ DistrhoUIchassis::~DistrhoUIchassis() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DistrhoUIchassis::programLoaded(uint32_t index) {
|
void DistrhoUIchassis::programLoaded(uint32_t index) {
|
||||||
printf("in programLoaded %d\n", index);
|
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case Chassis::pLFORate:
|
case pLFORate:
|
||||||
xSliderLFORate->setValue(0.5);
|
xSliderLFORate->setValue(0.5);
|
||||||
printf("set lforate\n");
|
|
||||||
break;
|
break;
|
||||||
case Chassis::pLFODelay:
|
case pLFODelay:
|
||||||
xSliderLFODelay->setValue(0.5);
|
xSliderLFODelay->setValue(0.5);
|
||||||
printf("set lfoDelay\n");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void DistrhoUIchassis::parameterChanged(uint32_t index, float value) {
|
void DistrhoUIchassis::parameterChanged(uint32_t index, float value) {
|
||||||
printf("in parameterchanged %d %f\n", index, value);
|
switch (index) {
|
||||||
|
case pLFORate:
|
||||||
switch(index) {
|
xSliderLFORate->setValue(value);
|
||||||
case Chassis::pLFORate: xSliderLFORate->setValue(value); break;
|
break;
|
||||||
case Chassis::pLFODelay: xSliderLFODelay->setValue(value); break;
|
case pLFODelay:
|
||||||
case Chassis::pLFODepth: xSliderLFODepth->setValue(value); break;
|
xSliderLFODelay->setValue(value);
|
||||||
case Chassis::pPWMDepth: xSliderPWMDepth->setValue(value); break;
|
break;
|
||||||
case Chassis::pSubLevel: xSliderSubLevel->setValue(value); break;
|
case pLFODepth:
|
||||||
case Chassis::pNoiseLevel: xSliderNoiseLevel->setValue(value); break;
|
xSliderLFODepth->setValue(value);
|
||||||
case Chassis::pHPF: xSliderHPF->setValue(value); break;
|
break;
|
||||||
case Chassis::pCutoff: xSliderCutoff->setValue(value); break;
|
case pPWMDepth:
|
||||||
case Chassis::pRes: xSliderRes->setValue(value); break;
|
xSliderPWMDepth->setValue(value);
|
||||||
case Chassis::pEnv: xSliderEnv->setValue(value); break;
|
break;
|
||||||
case Chassis::pLfo: xSliderLfo->setValue(value); break;
|
case pSubLevel:
|
||||||
case Chassis::pKyb: xSliderKyb->setValue(value); break;
|
xSliderSubLevel->setValue(value);
|
||||||
case Chassis::pAtk: xSliderAtk->setValue(value); break;
|
break;
|
||||||
case Chassis::pDcy: xSliderDcy->setValue(value); break;
|
case pNoiseLevel:
|
||||||
case Chassis::pStn: xSliderStn->setValue(value); break;
|
xSliderNoiseLevel->setValue(value);
|
||||||
case Chassis::pRls: xSliderRls->setValue(value); break;
|
break;
|
||||||
|
case pHPF:
|
||||||
|
xSliderHPF->setValue(value);
|
||||||
|
break;
|
||||||
|
case pCutoff:
|
||||||
|
xSliderCutoff->setValue(value);
|
||||||
|
break;
|
||||||
|
case pRes:
|
||||||
|
xSliderRes->setValue(value);
|
||||||
|
break;
|
||||||
|
case pEnv:
|
||||||
|
xSliderEnv->setValue(value);
|
||||||
|
break;
|
||||||
|
case pLfo:
|
||||||
|
xSliderLfo->setValue(value);
|
||||||
|
break;
|
||||||
|
case pKyb:
|
||||||
|
xSliderKyb->setValue(value);
|
||||||
|
break;
|
||||||
|
case pAtk:
|
||||||
|
xSliderAtk->setValue(value);
|
||||||
|
break;
|
||||||
|
case pDcy:
|
||||||
|
xSliderDcy->setValue(value);
|
||||||
|
break;
|
||||||
|
case pStn:
|
||||||
|
xSliderStn->setValue(value);
|
||||||
|
break;
|
||||||
|
case pRls:
|
||||||
|
xSliderRls->setValue(value);
|
||||||
|
break;
|
||||||
|
// now the switches
|
||||||
|
case pVCORange:
|
||||||
|
sw1 &= 0xf8; // mask
|
||||||
|
if (value > 2) value = 2;
|
||||||
|
sw1 |= (1 << (int)value);
|
||||||
|
break;
|
||||||
|
case pSqr:
|
||||||
|
sw1 &= 0xf7;
|
||||||
|
sw1 |= ((value >= 0.5)) << 3;
|
||||||
|
break;
|
||||||
|
case pSaw:
|
||||||
|
sw1 &= 0xef;
|
||||||
|
sw1 |= (value > 0.5) << 4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case pChorus:
|
||||||
|
sw1 &= 0x9f;
|
||||||
|
// 60, 40, 00
|
||||||
|
switch ((int)value) {
|
||||||
|
case 0:
|
||||||
|
sw1 |= 0x60;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sw1 |= 0x40;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sw1 |= 0x00;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DistrhoUIchassis::imageSliderDragStarted(ImageSlider* slider) {
|
void DistrhoUIchassis::imageSliderDragStarted(ImageSlider* slider) {
|
||||||
|
@ -191,13 +247,58 @@ void DistrhoUIchassis::imageSliderDragFinished(ImageSlider* slider) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DistrhoUIchassis::imageSliderValueChanged(ImageSlider* slider, float value) {
|
void DistrhoUIchassis::imageSliderValueChanged(ImageSlider* slider, float value) {
|
||||||
printf("%f\n", value);
|
|
||||||
setParameterValue(slider->getId(), value);
|
setParameterValue(slider->getId(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DistrhoUIchassis::imageButtonClicked(ImageButton* imgBtn, int) {
|
||||||
|
int id = imgBtn->getId();
|
||||||
|
// printf("imagebutton %d\n", id);
|
||||||
|
switch (id) {
|
||||||
|
case btn16:
|
||||||
|
sw1 &= 0xf8;
|
||||||
|
sw1 |= 0x01;
|
||||||
|
break;
|
||||||
|
case btn8:
|
||||||
|
sw1 &= 0xf8;
|
||||||
|
sw1 |= 0x02;
|
||||||
|
break;
|
||||||
|
case btn4:
|
||||||
|
sw1 &= 0xf8;
|
||||||
|
sw1 |= 0x04;
|
||||||
|
break;
|
||||||
|
case btnPls:
|
||||||
|
sw1 ^= 0x08;
|
||||||
|
break;
|
||||||
|
case btnSaw:
|
||||||
|
sw1 ^= 0x10;
|
||||||
|
break;
|
||||||
|
case btnCh0:
|
||||||
|
sw1 = (sw1 & 0x1f) | 0x20;
|
||||||
|
break;
|
||||||
|
case btnCh1:
|
||||||
|
sw1 = (sw1 & 0x1f) | 0x40;
|
||||||
|
break;
|
||||||
|
case btnCh2:
|
||||||
|
sw1 = (sw1 & 0x1f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DistrhoUIchassis::onDisplay() {
|
void DistrhoUIchassis::onDisplay() {
|
||||||
const GraphicsContext& context(getGraphicsContext());
|
const GraphicsContext& context(getGraphicsContext());
|
||||||
fImgBackground.draw(context);
|
fImgBackground.draw(context);
|
||||||
|
|
||||||
|
// switch 1 LEDs
|
||||||
|
if (sw1 & 0x01) fImgLedOn.drawAt(context, 160, 77); // 16'
|
||||||
|
if (sw1 & 0x02) fImgLedOn.drawAt(context, 198, 77); // 8'
|
||||||
|
if (sw1 & 0x04) fImgLedOn.drawAt(context, 238, 77); // 4'
|
||||||
|
if (sw1 & 0x08) fImgLedOn.drawAt(context, 424, 77); // pulse
|
||||||
|
if (sw1 & 0x10) fImgLedOn.drawAt(context, 464, 77); // saw
|
||||||
|
if ((sw1 & 0x60) == 0x40) fImgLedOn.drawAt(context, 612, 267); // chorus 1
|
||||||
|
if ((sw1 & 0x60) == 0x00) fImgLedOn.drawAt(context, 652, 267); // chorus 2
|
||||||
};
|
};
|
||||||
|
|
||||||
UI* createUI() {
|
UI* createUI() {
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
START_NAMESPACE_DISTRHO
|
START_NAMESPACE_DISTRHO
|
||||||
|
|
||||||
class DistrhoUIchassis : public UI,
|
class DistrhoUIchassis : public UI,
|
||||||
public ImageSlider::Callback {
|
public ImageSlider::Callback,
|
||||||
|
public ImageButton::Callback {
|
||||||
public:
|
public:
|
||||||
DistrhoUIchassis();
|
DistrhoUIchassis();
|
||||||
~DistrhoUIchassis() override;
|
~DistrhoUIchassis() override;
|
||||||
|
@ -22,13 +23,19 @@ class DistrhoUIchassis : public UI,
|
||||||
void imageSliderDragFinished(ImageSlider* slider) override;
|
void imageSliderDragFinished(ImageSlider* slider) override;
|
||||||
void imageSliderValueChanged(ImageSlider* slider, float value) override;
|
void imageSliderValueChanged(ImageSlider* slider, float value) override;
|
||||||
|
|
||||||
|
void imageButtonClicked(ImageButton *imageButton, int button) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Image fImgBackground;
|
Image fImgBackground;
|
||||||
|
Image fImgLedOn;
|
||||||
ScopedPointer<ImageSlider>
|
ScopedPointer<ImageSlider>
|
||||||
xSliderLFORate, xSliderLFODelay,
|
xSliderLFORate, xSliderLFODelay,
|
||||||
xSliderLFODepth, xSliderPWMDepth, xSliderSubLevel, xSliderNoiseLevel,
|
xSliderLFODepth, xSliderPWMDepth, xSliderSubLevel, xSliderNoiseLevel,
|
||||||
xSliderHPF, xSliderCutoff, xSliderRes, xSliderEnv, xSliderLfo, xSliderKyb,
|
xSliderHPF, xSliderCutoff, xSliderRes, xSliderEnv, xSliderLfo, xSliderKyb,
|
||||||
xSliderVCALevel, xSliderAtk, xSliderDcy, xSliderStn, xSliderRls;
|
xSliderVCALevel, xSliderAtk, xSliderDcy, xSliderStn, xSliderRls;
|
||||||
|
ScopedPointer<ImageButton> xBtn16ft, xBtn8ft, xBtn4ft, xBtnPls, xBtnSaw, xBtnCh0, xBtnCh1, xBtnCh2;
|
||||||
|
|
||||||
|
uint8_t sw1 = 0, sw2 = 0;
|
||||||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIchassis)
|
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIchassis)
|
||||||
// ImageAboutWindow fAboutWindow;
|
// ImageAboutWindow fAboutWindow;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue