diff --git a/src/minidexed.cpp b/src/minidexed.cpp index c3e0273..3cc44e8 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -37,7 +37,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt, #endif m_pConfig (pConfig), m_UI (this, pGPIOManager, pConfig), - m_PCKeyboard (this), + m_PCKeyboard (this, pConfig), m_SerialMIDI (this, pInterrupt, pConfig), m_bUseSerial (false), m_pSoundDevice (0), diff --git a/src/pckeyboard.cpp b/src/pckeyboard.cpp index 90a7e9d..a3f6878 100644 --- a/src/pckeyboard.cpp +++ b/src/pckeyboard.cpp @@ -18,8 +18,6 @@ // along with this program. If not, see . // #include "pckeyboard.h" -#include "minidexed.h" -#include "config.h" #include #include #include @@ -62,8 +60,8 @@ static TKeyInfo KeyTable[] = CPCKeyboard *CPCKeyboard::s_pThis = 0; -CPCKeyboard::CPCKeyboard (CMiniDexed *pSynthesizer) -: m_pSynthesizer (pSynthesizer), +CPCKeyboard::CPCKeyboard (CMiniDexed *pSynthesizer, CConfig *pConfig) +: CMIDIDevice (pSynthesizer, pConfig), m_pKeyboard (0) { s_pThis = this; @@ -73,8 +71,6 @@ CPCKeyboard::CPCKeyboard (CMiniDexed *pSynthesizer) CPCKeyboard::~CPCKeyboard (void) { - m_pSynthesizer = 0; - s_pThis = 0; } @@ -101,7 +97,6 @@ void CPCKeyboard::Process (boolean bPlugAndPlayUpdated) void CPCKeyboard::KeyStatusHandlerRaw (unsigned char ucModifiers, const unsigned char RawKeys[6]) { assert (s_pThis != 0); - assert (s_pThis->m_pSynthesizer != 0); // report released keys for (unsigned i = 0; i < 6; i++) @@ -113,10 +108,8 @@ void CPCKeyboard::KeyStatusHandlerRaw (unsigned char ucModifiers, const unsigned u8 ucKeyNumber = GetKeyNumber (ucKeyCode); if (ucKeyNumber != 0) { - for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) - { - s_pThis->m_pSynthesizer->keyup (ucKeyNumber, nTG); - } + u8 NoteOff[] = {0x80, ucKeyNumber, 0}; + s_pThis->MIDIMessageHandler (NoteOff, sizeof NoteOff); } } } @@ -131,10 +124,8 @@ void CPCKeyboard::KeyStatusHandlerRaw (unsigned char ucModifiers, const unsigned u8 ucKeyNumber = GetKeyNumber (ucKeyCode); if (ucKeyNumber != 0) { - for (unsigned nTG = 0; nTG < CConfig::ToneGenerators; nTG++) - { - s_pThis->m_pSynthesizer->keydown (ucKeyNumber, 100, nTG); - } + u8 NoteOn[] = {0x90, ucKeyNumber, 100}; + s_pThis->MIDIMessageHandler (NoteOn, sizeof NoteOn); } } } diff --git a/src/pckeyboard.h b/src/pckeyboard.h index 26fc991..6baf520 100644 --- a/src/pckeyboard.h +++ b/src/pckeyboard.h @@ -20,16 +20,18 @@ #ifndef _pckeyboard_h #define _pckeyboard_h +#include "mididevice.h" +#include "config.h" #include #include #include class CMiniDexed; -class CPCKeyboard +class CPCKeyboard : public CMIDIDevice { public: - CPCKeyboard (CMiniDexed *pSynthesizer); + CPCKeyboard (CMiniDexed *pSynthesizer, CConfig *pConfig); ~CPCKeyboard (void); void Process (boolean bPlugAndPlayUpdated); @@ -44,8 +46,6 @@ private: static void DeviceRemovedHandler (CDevice *pDevice, void *pContext); private: - CMiniDexed *m_pSynthesizer; - CUSBKeyboardDevice * volatile m_pKeyboard; u8 m_LastKeys[6];