gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

mqKeyInput.cpp (3860B)


      1 #include "mqKeyInput.h"
      2 
      3 #include <cpp-terminal/input.hpp>
      4 
      5 #include "mqLib/buttons.h"
      6 #include "mqLib/microq.h"
      7 #include "mqLib/mqhardware.h"
      8 
      9 #include "synthLib/midiTypes.h"
     10 
     11 using Key = Term::Key;
     12 using EncoderType = mqLib::Buttons::Encoders;
     13 using ButtonType = mqLib::Buttons::ButtonType;
     14 
     15 namespace mqConsoleLib
     16 {
     17 	void KeyInput::processKey(int ch)
     18 	{
     19 		auto& mq = m_mq;
     20 		auto* hw = mq.getHardware();
     21 
     22 		auto toggleButton = [&](const mqLib::Buttons::ButtonType _type)
     23 		{
     24 			mq.setButton(_type, mq.getButton(_type) ? false : true);
     25 		};
     26 
     27 		auto encRotate = [&](mqLib::Buttons::Encoders _encoder, const int _amount)
     28 		{
     29 			mq.rotateEncoder(_encoder, _amount);
     30 		};
     31 
     32 		{
     33 			switch (ch)
     34 			{
     35 			case '1':					toggleButton(ButtonType::Inst1);			break;
     36 			case '2':					toggleButton(ButtonType::Inst2);			break;
     37 			case '3':					toggleButton(ButtonType::Inst3);			break;
     38 			case '4':					toggleButton(ButtonType::Inst4);			break;
     39 			case Key::ARROW_DOWN:		toggleButton(ButtonType::Down);				break;
     40 			case Key::ARROW_LEFT:		toggleButton(ButtonType::Left);				break;
     41 			case Key::ARROW_RIGHT:		toggleButton(ButtonType::Right);			break;
     42 			case Key::ARROW_UP:			toggleButton(ButtonType::Up);				break;
     43 			case 'g':					toggleButton(ButtonType::Global);			break;
     44 			case 'm':					toggleButton(ButtonType::Multi);			break;
     45 			case 'e':					toggleButton(ButtonType::Edit);				break;
     46 			case 's':					toggleButton(ButtonType::Sound);			break;
     47 			case 'S':					toggleButton(ButtonType::Shift);			break;
     48 			case 'q':					toggleButton(ButtonType::Power);			break;
     49 			case 'M':					toggleButton(ButtonType::Multimode);		break;
     50 			case 'P':					toggleButton(ButtonType::Peek);				break;
     51 			case 'p':					toggleButton(ButtonType::Play);				break;
     52 
     53 			case Key::F1:				encRotate(EncoderType::LcdLeft, -1);		break;
     54 			case Key::F2:				encRotate(EncoderType::LcdLeft, 1);			break;
     55 			case Key::F3:				encRotate(EncoderType::LcdRight, -1);		break;
     56 			case Key::F4:				encRotate(EncoderType::LcdRight, 1);		break;
     57 			case '5':					encRotate(EncoderType::Master, -1);			break;
     58 			case '6':					encRotate(EncoderType::Master, 1);			break;
     59 			case Key::F5:				encRotate(EncoderType::Matrix1, -1);		break;
     60 			case Key::F6:				encRotate(EncoderType::Matrix1, 1);			break;
     61 			case Key::F7:				encRotate(EncoderType::Matrix2, -1);		break;
     62 			case Key::F8:				encRotate(EncoderType::Matrix2, 1);			break;
     63 			case Key::F9:				encRotate(EncoderType::Matrix3, -1);		break;
     64 			case Key::F10:				encRotate(EncoderType::Matrix3, 1);			break;
     65 			case Key::F11:				encRotate(EncoderType::Matrix4, -1);		break;
     66 			case Key::F12:				encRotate(EncoderType::Matrix4, 1);			break;
     67 			case '7':
     68 				// Midi Note On
     69 				mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_NOTEON, synthLib::Note_C3, 0x7f});
     70 				break;
     71 			case '8':	
     72 				// Midi Note Off
     73 				mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_NOTEOFF, synthLib::Note_C3, 0x7f});
     74 				break;
     75 			case '9':
     76 				// Modwheel Max
     77 				mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_CONTROLCHANGE, synthLib::MC_MODULATION, 0x7f});
     78 				break;
     79 			case '0':	
     80 				// Modwheel Min
     81 				mq.sendMidiEvent({synthLib::MidiEventSource::Host, synthLib::M_CONTROLCHANGE, synthLib::MC_MODULATION, 0x0});
     82 				break;
     83 			case '!':
     84 				hw->getDSP(0).dumpPMem("dspA_dump_P_" + std::to_string(hw->getUcCycles()));
     85 				if constexpr (mqLib::g_useVoiceExpansion)
     86 				{
     87 					hw->getDSP(1).dumpPMem("dspB_dump_P_" + std::to_string(hw->getUcCycles()));
     88 					hw->getDSP(2).dumpPMem("dspC_dump_P_" + std::to_string(hw->getUcCycles()));
     89 				}
     90 				break;
     91 			case '&':
     92 				hw->getDSP().dumpXYMem("dsp_dump_mem_" + std::to_string(hw->getUcCycles()) + "_");
     93 				break;
     94 			case '"':
     95 				hw->getUC().dumpMemory("mc_dump_mem");
     96 				break;
     97 			case '$':
     98 				hw->getUC().dumpROM("rom_runtime");
     99 				break;
    100 			default:
    101 				break;
    102 			}
    103 		}
    104 	}
    105 }