Browse Source

HostAudio: add level knob; Hide Core audio modules

tags/22.02
falkTX 3 years ago
parent
commit
98a3ca0f2f
2 changed files with 34 additions and 17 deletions
  1. +30
    -15
      plugins/Cardinal/src/HostAudio.cpp
  2. +4
    -2
      plugins/Core.json

+ 30
- 15
plugins/Cardinal/src/HostAudio.cpp View File

@@ -31,14 +31,14 @@ struct HostAudio : Module {
int64_t lastBlockFrame = -1; int64_t lastBlockFrame = -1;


// for rack core audio module compatibility // for rack core audio module compatibility
dsp::RCFilter dcFilters[numIO];
dsp::RCFilter dcFilters[numIO];
bool dcFilterEnabled = (numIO == 2); bool dcFilterEnabled = (numIO == 2);


HostAudio() HostAudio()
: pcontext(static_cast<CardinalPluginContext*>(APP)), : pcontext(static_cast<CardinalPluginContext*>(APP)),
numParams(numIO == 2 ? 1 : 0), numParams(numIO == 2 ? 1 : 0),
numInputs(pcontext->variant == kCardinalVariantSynth ? 0 : std::max(pcontext->variant != kCardinalVariantMain ? 2 : 8, numIO)),
numOutputs(std::max(pcontext->variant != kCardinalVariantMain ? 2 : 8, numIO))
numInputs(pcontext->variant == kCardinalVariantSynth ? 0 : pcontext->variant == kCardinalVariantMain ? numIO : 2),
numOutputs(pcontext->variant == kCardinalVariantMain ? numIO : 2)
{ {
if (pcontext == nullptr) if (pcontext == nullptr)
throw rack::Exception("Plugin context is null"); throw rack::Exception("Plugin context is null");
@@ -49,9 +49,8 @@ struct HostAudio : Module {
configParam(0, 0.f, 2.f, 1.f, "Level", " dB", -10, 40); configParam(0, 0.f, 2.f, 1.f, "Level", " dB", -10, 40);


const float sampleTime = pcontext->engine->getSampleTime(); const float sampleTime = pcontext->engine->getSampleTime();
for (int i = 0; i < numIO; i++) {
for (int i=0; i<numIO; ++i)
dcFilters[i].setCutoffFreq(10.f * sampleTime); dcFilters[i].setCutoffFreq(10.f * sampleTime);
}
} }


void onReset() override void onReset() override
@@ -61,7 +60,7 @@ struct HostAudio : Module {


void onSampleRateChange(const SampleRateChangeEvent& e) override void onSampleRateChange(const SampleRateChangeEvent& e) override
{ {
for (int i = 0; i < numIO; i++)
for (int i=0; i<numIO; ++i)
dcFilters[i].setCutoffFreq(10.f * e.sampleTime); dcFilters[i].setCutoffFreq(10.f * e.sampleTime);
} }


@@ -84,11 +83,14 @@ struct HostAudio : Module {
const float gain = numParams != 0 ? std::pow(params[0].getValue(), 2.f) : 1.0f; const float gain = numParams != 0 ? std::pow(params[0].getValue(), 2.f) : 1.0f;


// from host into cardinal, shows as output plug // from host into cardinal, shows as output plug
for (int i=0; i<numInputs; ++i)
outputs[i].setVoltage(dataIns[i][k] * 10.0f);
if (dataIns != nullptr)
{
for (int i=0; i<numOutputs; ++i)
outputs[i].setVoltage(dataIns[i][k] * 10.0f);
}


// from cardinal into host, shows as input plug // from cardinal into host, shows as input plug
for (int i=0; i<numOutputs; ++i)
for (int i=0; i<numInputs; ++i)
{ {
float v = inputs[i].getVoltageSum() * 0.1f; float v = inputs[i].getVoltageSum() * 0.1f;


@@ -147,14 +149,19 @@ struct HostAudioWidget : ModuleWidget {


for (uint i=0; i<numIO; ++i) for (uint i=0; i<numIO; ++i)
addOutput(createOutput<PJ301MPort>(Vec(startX_Out, startY + padding * i), m, i)); addOutput(createOutput<PJ301MPort>(Vec(startX_Out, startY + padding * i), m, i));

if (numIO == 2)
{
addParam(createParamCentered<RoundLargeBlackKnob>(Vec(middleX, 290.0f), m, 0));
}
} }


void drawTextLine(NVGcontext* const vg, const uint offset, const char* const text)
void drawTextLine(NVGcontext* const vg, const float offsetX, const uint posY, const char* const text)
{ {
const float y = startY + offset * padding;
const float y = startY + posY * padding;
nvgBeginPath(vg); nvgBeginPath(vg);
nvgFillColor(vg, color::WHITE); nvgFillColor(vg, color::WHITE);
nvgText(vg, middleX, y + 16, text, nullptr);
nvgText(vg, middleX + offsetX, y + 16, text, nullptr);
} }


void draw(const DrawArgs& args) override void draw(const DrawArgs& args) override
@@ -174,10 +181,18 @@ struct HostAudioWidget : ModuleWidget {
nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0)); nvgFillColor(args.vg, nvgRGB(0xd0, 0xd0, 0xd0));
nvgFill(args.vg); nvgFill(args.vg);


for (int i=0; i<numIO; ++i)
if (numIO == 2)
{ {
char text[] = {'A','u','d','i','o',' ',static_cast<char>('0'+i+1),'\0'};
drawTextLine(args.vg, i, text);
drawTextLine(args.vg, 3.0f, 0, "Left/Mono");
drawTextLine(args.vg, 0.0f, 1, "Right");
}
else
{
for (int i=0; i<numIO; ++i)
{
char text[] = {'A','u','d','i','o',' ',static_cast<char>('0'+i+1),'\0'};
drawTextLine(args.vg, 0.0f, i, text);
}
} }


ModuleWidget::draw(args); ModuleWidget::draw(args);


+ 4
- 2
plugins/Core.json View File

@@ -19,7 +19,8 @@
"manualUrl": "https://vcvrack.com/manual/Core#Audio", "manualUrl": "https://vcvrack.com/manual/Core#Audio",
"tags": [ "tags": [
"External" "External"
]
],
"hidden": true
}, },
{ {
"slug": "AudioInterface", "slug": "AudioInterface",
@@ -28,7 +29,8 @@
"manualUrl": "https://vcvrack.com/manual/Core#Audio", "manualUrl": "https://vcvrack.com/manual/Core#Audio",
"tags": [ "tags": [
"External" "External"
]
],
"hidden": true
}, },
{ {
"slug": "AudioInterface16", "slug": "AudioInterface16",


Loading…
Cancel
Save