Line data Source code
1 : #pragma once 2 : 3 : #include <Banks/BankAddresses.hpp> 4 : #include <MIDI_Outputs/Bankable/Abstract/MIDIAbsoluteEncoder.hpp> 5 : #include <MIDI_Senders/ContinuousCCSender.hpp> 6 : 7 : BEGIN_CS_NAMESPACE 8 : 9 : namespace Bankable { 10 : 11 : /** 12 : * @brief A class of MIDIOutputElement%s that read the input of a **quadrature 13 : * (rotary) encoder** and send out absolute MIDI **Control Change** 14 : * events. 15 : * 16 : * This version can be banked. 17 : * 18 : * @tparam NumBanks 19 : * The number of banks. 20 : * 21 : * @ingroup BankableMIDIOutputElements 22 : */ 23 : template <size_t NumBanks> 24 : class CCAbsoluteEncoder 25 : : public MIDIAbsoluteEncoder<NumBanks, SingleAddress, ContinuousCCSender> { 26 : public: 27 : /** 28 : * @brief Construct a new Bankable CCAbsoluteEncoder object with the given 29 : * pins, controller, channel, speed factor, and number of pulses 30 : * per step. 31 : * 32 : * @param config 33 : * The bank configuration to use: the bank to add this element to, 34 : * and whether to change the address, channel or cable number. 35 : * @param encoder 36 : * The Encoder object to use. 37 : * Usually passed as a list of the two pins connected to the 38 : * A and B outputs of the encoder, e.g. `{2, 3}`. 39 : * The internal pull-up resistors will be enabled by the Encoder 40 : * library. 41 : * @param address 42 : * The MIDI address containing the controller number [0, 119], 43 : * channel [Channel_1, Channel_16], and optional cable number 44 : * [0, 15]. 45 : * @param speedMultiply 46 : * A constant factor to increase the speed of the rotary encoder. 47 : * The difference in position will just be multiplied by this 48 : * factor. 49 : * @param pulsesPerStep 50 : * The number of pulses per physical click of the encoder. 51 : * For a normal encoder, this is 4. If you want to increase the 52 : * resolution, for the use of Jog wheels, for example, you can go 53 : * as 1. 54 : * Whereas a greater speedMultiply factor will increase the 55 : * speed, increasing the number of pulsesPerStep will result in a 56 : * lower speed. 57 : */ 58 1 : CCAbsoluteEncoder(BankConfig<NumBanks> config, AHEncoder &&encoder, 59 : MIDIAddress address, int16_t speedMultiply = 1, 60 : uint8_t pulsesPerStep = 4) 61 : : MIDIAbsoluteEncoder<NumBanks, SingleAddress, ContinuousCCSender>( 62 1 : {config, address}, std::move(encoder), speedMultiply, 63 2 : pulsesPerStep, {}) {} 64 : }; 65 : 66 : } // namespace Bankable 67 : 68 : END_CS_NAMESPACE