Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
@@ -9,9 +9,9 @@ | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="131.44501mm" | |||
width="132.08mm" | |||
height="128.5mm" | |||
viewBox="0 0 131.44501 128.5" | |||
viewBox="0 0 132.08 128.5" | |||
version="1.1" | |||
id="svg4620" | |||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)" | |||
@@ -38,8 +38,8 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.4142136" | |||
inkscape:cx="260.22565" | |||
inkscape:cy="198.9489" | |||
inkscape:cx="211.24317" | |||
inkscape:cy="346.0322" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
@@ -59,6 +59,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -70,7 +71,7 @@ | |||
<g | |||
style="fill-rule:evenodd" | |||
id="g5299" | |||
transform="matrix(6.342689,0,0,6.342689,1.7430866,175.6457)"> | |||
transform="matrix(6.342689,0,0,6.342689,4.2887574,175.6457)"> | |||
<g | |||
transform="translate(-1.6191379e-5,-0.08553947)" | |||
id="Layer_x0020_1" | |||
@@ -94,5 +95,54 @@ | |||
class="fil0 str1" /> | |||
</g> | |||
</g> | |||
<g | |||
aria-label="일" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.99722242px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458299" | |||
id="text845" | |||
transform="translate(0,0.52916667)"> | |||
<path | |||
d="M 9.6740487,183.71741 H 9.1822765 v 2.75872 h 0.4917722 z m -3.8142334,1.39135 c 0,-0.46778 0.3898194,-0.79763 0.9115778,-0.79763 0.5277556,0 0.9115778,0.32985 0.9115778,0.79763 0,0.46179 -0.3838222,0.79164 -0.9115778,0.79164 -0.5217584,0 -0.9115778,-0.32985 -0.9115778,-0.79164 z m 2.3029334,0 c 0,-0.71367 -0.5877278,-1.19944 -1.3913556,-1.19944 -0.8036278,0 -1.3853584,0.48577 -1.3853584,1.19944 0,0.70768 0.5817306,1.18745 1.3853584,1.18745 0.8036278,0 1.3913556,-0.47977 1.3913556,-1.18745 z m -1.4753167,3.52637 v -0.59372 h 2.9866167 v -1.3014 H 6.1896625 v 0.38982 h 2.9986112 v 0.54574 H 6.2016569 v 1.34938 h 3.6523085 v -0.38982 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.99722242px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
id="path867" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
<g | |||
style="fill-rule:evenodd" | |||
id="g5299-9" | |||
transform="matrix(6.342689,0,0,6.342689,121.12801,175.64549)"> | |||
<g | |||
transform="translate(-1.6191379e-5,-0.08553947)" | |||
id="Layer_x0020_1-0" | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer"> | |||
<metadata | |||
id="CorelCorpID_0Corel-Layer-9" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.0966867;stroke-opacity:1" | |||
id="circle10-1" | |||
r="0.15916" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str0" /> | |||
<circle | |||
style="fill:none;stroke:#ffffff;stroke-width:0.193345;stroke-opacity:1" | |||
id="circle12-7" | |||
r="0.42853901" | |||
cy="0.61075097" | |||
cx="0.525226" | |||
class="fil0 str1" /> | |||
</g> | |||
</g> | |||
<g | |||
aria-label="일" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.99722242px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke:none;stroke-width:0.26458299" | |||
id="text845-7" | |||
transform="translate(116.83997,0.52905)"> | |||
<path | |||
d="M 9.6740487,183.71741 H 9.1822765 v 2.75872 h 0.4917722 z m -3.8142334,1.39135 c 0,-0.46778 0.3898194,-0.79763 0.9115778,-0.79763 0.5277556,0 0.9115778,0.32985 0.9115778,0.79763 0,0.46179 -0.3838222,0.79164 -0.9115778,0.79164 -0.5217584,0 -0.9115778,-0.32985 -0.9115778,-0.79164 z m 2.3029334,0 c 0,-0.71367 -0.5877278,-1.19944 -1.3913556,-1.19944 -0.8036278,0 -1.3853584,0.48577 -1.3853584,1.19944 0,0.70768 0.5817306,1.18745 1.3853584,1.18745 0.8036278,0 1.3913556,-0.47977 1.3913556,-1.18745 z m -1.4753167,3.52637 v -0.59372 h 2.9866167 v -1.3014 H 6.1896625 v 0.38982 h 2.9986112 v 0.54574 H 6.2016569 v 1.34938 h 3.6523085 v -0.38982 z" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.99722242px;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#808a8a;fill-opacity:1;stroke-width:0.26458299" | |||
id="path867-1" | |||
inkscape:connector-curvature="0" /> | |||
</g> | |||
</g> | |||
</svg> |
@@ -148,6 +148,13 @@ struct IldaeilModule : Module { | |||
unsigned audioDataFill = 0; | |||
int64_t lastBlockFrame = -1; | |||
volatile bool resetMeterIn = true; | |||
volatile bool resetMeterOut = true; | |||
float meterInL = 0.0f; | |||
float meterInR = 0.0f; | |||
float meterOutL = 0.0f; | |||
float meterOutR = 0.0f; | |||
IldaeilModule() | |||
: pcontext(static_cast<CardinalPluginContext*>(APP)) | |||
{ | |||
@@ -418,15 +425,37 @@ struct IldaeilModule : Module { | |||
audioDataFill = 0; | |||
float* ins[2] = { audioDataIn1, audioDataIn2 }; | |||
float* outs[2] = { audioDataOut1, audioDataOut2 }; | |||
if (resetMeterIn) | |||
meterInL = meterInR = 0.0f; | |||
meterInL = std::max(meterInL, d_findMaxNormalizedFloat(audioDataIn1, BUFFER_SIZE)); | |||
meterInR = std::max(meterInR, d_findMaxNormalizedFloat(audioDataIn2, BUFFER_SIZE)); | |||
fCarlaPluginDescriptor->process(fCarlaPluginHandle, ins, outs, BUFFER_SIZE, midiEvents, midiEventCount); | |||
if (resetMeterOut) | |||
meterOutL = meterOutR = 0.0f; | |||
meterOutL = std::max(meterOutL, d_findMaxNormalizedFloat(audioDataOut1, BUFFER_SIZE)); | |||
meterOutR = std::max(meterOutR, d_findMaxNormalizedFloat(audioDataOut2, BUFFER_SIZE)); | |||
resetMeterIn = resetMeterOut = false; | |||
} | |||
} | |||
void onReset() override | |||
{ | |||
resetMeterIn = resetMeterOut = true; | |||
} | |||
void onSampleRateChange(const SampleRateChangeEvent& e) override | |||
{ | |||
if (fCarlaPluginHandle == nullptr) | |||
return; | |||
resetMeterIn = resetMeterOut = true; | |||
fCarlaPluginDescriptor->deactivate(fCarlaPluginHandle); | |||
fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, | |||
0, 0, nullptr, e.sampleRate); | |||
@@ -1520,6 +1549,44 @@ static void projectLoadedFromDSP(void* const ui) | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
struct IldaeilNanoMeterIn : NanoMeter { | |||
IldaeilModule* const module; | |||
IldaeilNanoMeterIn(IldaeilModule* const m) | |||
: module(m) {} | |||
void updateMeters() override | |||
{ | |||
if (module == nullptr || module->resetMeterIn) | |||
return; | |||
// Only fetch new values once DSP side is updated | |||
gainMeterL = module->meterInL; | |||
gainMeterR = module->meterInR; | |||
module->resetMeterIn = true; | |||
} | |||
}; | |||
struct IldaeilNanoMeterOut : NanoMeter { | |||
IldaeilModule* const module; | |||
IldaeilNanoMeterOut(IldaeilModule* const m) | |||
: module(m) {} | |||
void updateMeters() override | |||
{ | |||
if (module == nullptr || module->resetMeterOut) | |||
return; | |||
// Only fetch new values once DSP side is updated | |||
gainMeterL = module->meterOutL; | |||
gainMeterR = module->meterOutR; | |||
module->resetMeterOut = true; | |||
} | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
struct IldaeilModuleWidget : ModuleWidgetWithSideScrews<26> { | |||
bool hasLeftSideExpander = false; | |||
IldaeilWidget* ildaeilWidget = nullptr; | |||
@@ -1543,6 +1610,16 @@ struct IldaeilModuleWidget : ModuleWidgetWithSideScrews<26> { | |||
for (uint i=0; i<IldaeilModule::NUM_OUTPUTS; ++i) | |||
createAndAddOutput(i); | |||
IldaeilNanoMeterIn* const meterIn = new IldaeilNanoMeterIn(module); | |||
meterIn->box.pos = Vec(2.0f, startY + padding * 2); | |||
meterIn->box.size = Vec(RACK_GRID_WIDTH * 3 - 2.0f, box.size.y - meterIn->box.pos.y - 20.0f); | |||
addChild(meterIn); | |||
IldaeilNanoMeterOut* const meterOut = new IldaeilNanoMeterOut(module); | |||
meterOut->box.pos = Vec(box.size.x - RACK_GRID_WIDTH * 3 + 1.0f, startY + padding * 2); | |||
meterOut->box.size = Vec(RACK_GRID_WIDTH * 3 - 2.0f, box.size.y - meterOut->box.pos.y - 20.0f); | |||
addChild(meterOut); | |||
} | |||
void draw(const DrawArgs& args) override | |||
@@ -1569,7 +1646,7 @@ struct IldaeilModuleWidget : ModuleWidgetWithSideScrews<26> { | |||
} | |||
} | |||
ModuleWidgetWithSideScrews::draw(args); | |||
ModuleWidgetWithSideScrews<26>::draw(args); | |||
} | |||
void step() override | |||
@@ -1578,7 +1655,7 @@ struct IldaeilModuleWidget : ModuleWidgetWithSideScrews<26> { | |||
&& module->leftExpander.module != nullptr | |||
&& module->leftExpander.module->model == modelExpanderInputMIDI; | |||
ModuleWidgetWithSideScrews::step(); | |||
ModuleWidgetWithSideScrews<26>::step(); | |||
} | |||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(IldaeilModuleWidget) | |||