BaseMachine Sequencer
Dependencies: Amp AverageAnalogIn BaseMachineUIController Envelope ExioBufferdController FilterController MCP23S17 PinDetect RotaryEncoder Sequence SequencerDisplay mbed-rtos mbed st7567LCD AT24C1024 OscController
Diff: main.cpp
- Branch:
- FilterEnvelope
- Revision:
- 29:5ca5aef9e7ca
- Parent:
- 27:173ad2312d03
diff -r 407c9f46a07c -r 5ca5aef9e7ca main.cpp --- a/main.cpp Mon May 22 14:26:31 2017 +0000 +++ b/main.cpp Mon May 22 23:00:08 2017 +0000 @@ -49,7 +49,7 @@ #if USE_VCVS SpiVcvsLpfController FilterController(&SpiMaster, D10); -#else if USE_SVF +#elif USE_SVF SpiSvfController FilterController(&SpiMaster, D10); #endif @@ -67,26 +67,38 @@ //------------------------------------------------------------------------ void updateTicks(int ticks) { + uint16_t level = EnvelopeGenerator.update(sequences[SequenceSender.getStep()].isTie()); + + // Amp + uint16_t ampLevel = level; if (sequences[SequenceSender.getStep()].isNoteOn()) { - uint16_t level = EnvelopeGenerator.update(sequences[SequenceSender.getStep()].isTie()); - level = level >> 1; + ampLevel = ampLevel >> 1; if (sequences[SequenceSender.getStep()].isAccent()) { - // Todo: 小数点演算を整数に - level *= 1.0f + ((float)UIController.getAccentLevel()) / 128.0f; + ampLevel = ampLevel * (1.0f + ((float)UIController.getAccentLevel()) / 128.0f); } - AmpController.outDca(level); } else { - AmpController.outDca(0); + ampLevel = 0; } + AmpController.outDca(ampLevel); + // Oscillator OscController.setFrequency10(SequenceSender.getFrequency10()); OscController.outDco(); - FilterController.outDcf(); + // Filter Env Mod + uint16_t cutoff16 = FilterController.getCutoff(); + uint8_t resonance = FilterController.getResonance(); + uint8_t mod = FilterController.getModLevel(); + float modCoeff = (float)mod / (float)(cutoff16 << 1); + cutoff16 = cutoff16 * (1.0f + ((float)level / 0x8000) * modCoeff); + if (cutoff16 > 255) { + cutoff16 = 255; + } + FilterController.outDcf(cutoff16, resonance); if (ticks == 0) { @@ -117,7 +129,8 @@ EnvelopeParam env; UIController.getEnvelopeParam(&env); - envelope.setLevel(env.level << 5); + //envelope.setLevel(env.level << 5); + FilterController.setModLevel(env.level << 1); //ToDo: Impl. envelope length envelope.setLength(envelopeLength); envelope.setDuration((float)env.duration / 128.0f * envelopeLength);