void MidiInput::handleNoteOnMessage( const MidiMessage& msg ) { // INFOLOG( "handleNoteOnMessage" ); int nNote = msg.m_nData1; float fVelocity = msg.m_nData2 / 127.0; if ( fVelocity == 0 ) { handleNoteOffMessage( msg ); return; } MidiActionManager * aH = MidiActionManager::get_instance(); MidiMap * mM = MidiMap::get_instance(); Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->lastMidiEvent = "NOTE"; pEngine->lastMidiEventParameter = msg.m_nData1; bool action = aH->handleAction( mM->getNoteAction( msg.m_nData1 ) ); if ( action && Preferences::get_instance()->m_bMidiDiscardNoteAfterAction) { return; } bool bPatternSelect = false; if ( bPatternSelect ) { int patternNumber = nNote - 36; //INFOLOG( QString( "next pattern = %1" ).arg( patternNumber ) ); pEngine->sequencer_setNextPattern( patternNumber, false, false ); } else { static const float fPan_L = 1.0f; static const float fPan_R = 1.0f; int nInstrument = nNote - 36; if ( nInstrument < 0 ) { nInstrument = 0; } if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) { nInstrument = MAX_INSTRUMENTS - 1; } pEngine->addRealtimeNote( nInstrument, fVelocity, fPan_L, fPan_R, 0.0, false, true, nNote ); } __noteOnTick = pEngine->__getMidiRealtimeNoteTickPosition(); }
void MidiTable::setupMidiTable() { MidiMap *mM = MidiMap::get_instance(); QStringList items; items << "" << trUtf8("Event") << trUtf8("Param.") << trUtf8("Action") << trUtf8("Param.") ; setRowCount( 0 ); setColumnCount( 5 ); verticalHeader()->hide(); setHorizontalHeaderLabels( items ); horizontalHeader()->setStretchLastSection(true); setColumnWidth( 0 , 25 ); setColumnWidth( 1 , 155 ); setColumnWidth( 2, 73 ); setColumnWidth( 3, 175 ); setColumnWidth( 4 , 73 ); bool ok; std::map< QString , MidiAction* > mmcMap = mM->getMMCMap(); std::map< QString , MidiAction* >::iterator dIter( mmcMap.begin() ); for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ) { MidiAction * pAction = dIter->second; QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); insertNewRow(pAction->getType() , dIter->first , 0 , actionParameterInteger ); } for( int note = 0; note < 128; note++ ) { MidiAction * pAction = mM->getNoteAction( note ); QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); if ( pAction->getType() == "NOTHING" ) continue; insertNewRow(pAction->getType() , "NOTE" , note , actionParameterInteger ); } for( int parameter = 0; parameter < 128; parameter++ ){ MidiAction * pAction = mM->getCCAction( parameter ); QString actionParameter; int actionParameterInteger = 0; actionParameter = pAction->getParameter1(); actionParameterInteger = actionParameter.toInt(&ok,10); if ( pAction->getType() == "NOTHING" ) continue; insertNewRow(pAction->getType() , "CC" , parameter , actionParameterInteger ); } { MidiAction * pAction = mM->getPCAction(); if ( pAction->getType() != "NOTHING" ) { QString actionParameter = pAction->getParameter1(); int actionParameterInteger = actionParameter.toInt(&ok,10); insertNewRow( pAction->getType() , "PROGRAM_CHANGE" , 0 , actionParameterInteger ); } } insertNewRow( "", "", 0, 0 ); }