|
|
@@ -26,13 +26,14 @@ struct HostTime : Module { |
|
|
|
}; |
|
|
|
enum HostTimeIds { |
|
|
|
kHostTimeRolling, |
|
|
|
kHostTimeReset, |
|
|
|
kHostTimeBar, |
|
|
|
kHostTimeBeat, |
|
|
|
kHostTimeClock, |
|
|
|
kHostTimeCount |
|
|
|
}; |
|
|
|
|
|
|
|
rack::dsp::PulseGenerator pulseBar, pulseBeat, pulseClock; |
|
|
|
rack::dsp::PulseGenerator pulseReset, pulseBar, pulseBeat, pulseClock; |
|
|
|
float sampleTime = 0.0f; |
|
|
|
|
|
|
|
HostTime() |
|
|
@@ -55,12 +56,19 @@ struct HostTime : Module { |
|
|
|
{ |
|
|
|
if (pcontext->tick == 0.0) |
|
|
|
{ |
|
|
|
pulseReset.trigger(); |
|
|
|
pulseClock.trigger(); |
|
|
|
pulseBeat.trigger(); |
|
|
|
if (pcontext->beat == 1) |
|
|
|
pulseBar.trigger(); |
|
|
|
} |
|
|
|
|
|
|
|
if (pcontext->reset) |
|
|
|
{ |
|
|
|
pcontext->reset = false; |
|
|
|
pulseReset.trigger(); |
|
|
|
} |
|
|
|
|
|
|
|
if ((pcontext->tick += pcontext->ticksPerFrame) >= pcontext->ticksPerBeat) |
|
|
|
{ |
|
|
|
pcontext->tick -= pcontext->ticksPerBeat; |
|
|
@@ -81,16 +89,19 @@ struct HostTime : Module { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const bool hasReset = pulseReset.process(args.sampleTime); |
|
|
|
const bool hasBar = pulseBar.process(args.sampleTime); |
|
|
|
const bool hasBeat = pulseBeat.process(args.sampleTime); |
|
|
|
const bool hasClock = pulseClock.process(args.sampleTime); |
|
|
|
|
|
|
|
lights[kHostTimeRolling].setBrightness(playing ? 1.0f : 0.0f); |
|
|
|
lights[kHostTimeReset].setBrightnessSmooth(hasReset ? 1.0f : 0.0f, args.sampleTime * 0.5f); |
|
|
|
lights[kHostTimeBar].setBrightnessSmooth(hasBar ? 1.0f : 0.0f, args.sampleTime * 0.5f); |
|
|
|
lights[kHostTimeBeat].setBrightnessSmooth(hasBeat ? 1.0f : 0.0f, args.sampleTime); |
|
|
|
lights[kHostTimeClock].setBrightnessSmooth(hasClock ? 1.0f : 0.0f, args.sampleTime * 2.0f); |
|
|
|
|
|
|
|
outputs[kHostTimeRolling].setVoltage(playing ? 10.0f : 0.0f); |
|
|
|
outputs[kHostTimeReset].setVoltage(hasReset ? 10.0f : 0.0f); |
|
|
|
outputs[kHostTimeBar].setVoltage(hasBar ? 10.0f : 0.0f); |
|
|
|
outputs[kHostTimeBeat].setVoltage(hasBeat ? 10.0f : 0.0f); |
|
|
|
outputs[kHostTimeClock].setVoltage(hasClock ? 10.0f : 0.0f); |
|
|
@@ -114,15 +125,17 @@ struct HostTimeWidget : ModuleWidget { |
|
|
|
addChild(createWidget<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); |
|
|
|
|
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 0 * padding), module, HostTime::kHostTimeRolling)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 1 * padding), module, HostTime::kHostTimeBar)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 2 * padding), module, HostTime::kHostTimeBeat)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 3 * padding), module, HostTime::kHostTimeClock)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 1 * padding), module, HostTime::kHostTimeReset)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 2 * padding), module, HostTime::kHostTimeBar)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 3 * padding), module, HostTime::kHostTimeBeat)); |
|
|
|
addOutput(createOutput<PJ301MPort>(Vec(startX, startY + 4 * padding), module, HostTime::kHostTimeClock)); |
|
|
|
|
|
|
|
const float x = startX + 28; |
|
|
|
addChild(createLightCentered<SmallLight<GreenLight>> (Vec(x, startY + 0 * padding + 12), module, HostTime::kHostTimeRolling)); |
|
|
|
addChild(createLightCentered<SmallLight<RedLight>> (Vec(x, startY + 1 * padding + 12), module, HostTime::kHostTimeBar)); |
|
|
|
addChild(createLightCentered<SmallLight<YellowLight>>(Vec(x, startY + 2 * padding + 12), module, HostTime::kHostTimeBeat)); |
|
|
|
addChild(createLightCentered<SmallLight<YellowLight>>(Vec(x, startY + 3 * padding + 12), module, HostTime::kHostTimeClock)); |
|
|
|
addChild(createLightCentered<SmallLight<WhiteLight>> (Vec(x, startY + 1 * padding + 12), module, HostTime::kHostTimeReset)); |
|
|
|
addChild(createLightCentered<SmallLight<RedLight>> (Vec(x, startY + 2 * padding + 12), module, HostTime::kHostTimeBar)); |
|
|
|
addChild(createLightCentered<SmallLight<YellowLight>>(Vec(x, startY + 3 * padding + 12), module, HostTime::kHostTimeBeat)); |
|
|
|
addChild(createLightCentered<SmallLight<YellowLight>>(Vec(x, startY + 4 * padding + 12), module, HostTime::kHostTimeClock)); |
|
|
|
} |
|
|
|
|
|
|
|
void drawOutputLine(NVGcontext* const vg, const uint offset, const char* const text) |
|
|
@@ -151,9 +164,10 @@ struct HostTimeWidget : ModuleWidget { |
|
|
|
nvgFontSize(args.vg, 14); |
|
|
|
|
|
|
|
drawOutputLine(args.vg, 0, "Playing"); |
|
|
|
drawOutputLine(args.vg, 1, "Bar"); |
|
|
|
drawOutputLine(args.vg, 2, "Beat"); |
|
|
|
drawOutputLine(args.vg, 3, "Clock"); |
|
|
|
drawOutputLine(args.vg, 1, "Reset"); |
|
|
|
drawOutputLine(args.vg, 2, "Bar"); |
|
|
|
drawOutputLine(args.vg, 3, "Beat"); |
|
|
|
drawOutputLine(args.vg, 4, "Clock"); |
|
|
|
|
|
|
|
ModuleWidget::draw(args); |
|
|
|
} |
|
|
|