92 if ( pOther ==
nullptr ) {
96 return (
m_sType == pOther->m_sType &&
106 sOutput = QString(
"%1[Action]\n" ).arg( sPrefix )
107 .append( QString(
"%1%2m_sType: %3\n" ).arg( sPrefix ).arg( s ).arg(
m_sType ) )
108 .append( QString(
"%1%2m_sValue: %3\n" ).arg( sPrefix ).arg( s ).arg(
m_sValue ) )
109 .append( QString(
"%1%2m_sParameter1: %3\n" ).arg( sPrefix ).arg( s ).arg(
m_sParameter1 ) )
110 .append( QString(
"%1%2m_sParameter2: %3\n" ).arg( sPrefix ).arg( s ).arg(
m_sParameter2 ) )
111 .append( QString(
"%1%2m_sParameter3: %3\n" ).arg( sPrefix ).arg( s ).arg(
m_sParameter3 ) );
113 sOutput = QString(
"[Action]" )
114 .append( QString(
" m_sType: %1" ).arg(
m_sType ) )
115 .append( QString(
", m_sValue: %1" ).arg(
m_sValue ) )
116 .append( QString(
", m_sParameter1: %1" ).arg(
m_sParameter1 ) )
117 .append( QString(
", m_sParameter2: %1" ).arg(
m_sParameter2 ) )
118 .append( QString(
", m_sParameter3: %1" ).arg(
m_sParameter3 ) );
217 if ( pHydrogen->
getSong() ==
nullptr ) {
230 if ( pHydrogen->
getSong() ==
nullptr ) {
241 if ( pHydrogen->
getSong() ==
nullptr ) {
252 if ( pHydrogen->
getSong() ==
nullptr ) {
257 QString sActionString = pAction->getType();
260 case AudioEngine::State::Ready:
264 case AudioEngine::State::Playing:
265 if( sActionString ==
"PLAY/STOP_TOGGLE" ) {
272 ERRORLOG(
"[Hydrogen::ActionManager(PLAY): Unhandled case" );
282 if ( pHydrogen->
getSong() ==
nullptr ) {
292 if ( pHydrogen->
getSong() ==
nullptr ) {
302 if ( pHydrogen->
getSong() ==
nullptr ) {
311 auto pSong = pHydrogen->
getSong();
314 if ( pSong ==
nullptr ) {
320 int nLine = pAction->getParameter1().toInt(&ok,10);
322 auto pInstrList = pSong->getInstrumentList();
324 auto pInstr = pInstrList->get( nLine );
325 if ( pInstr ==
nullptr ) {
326 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
334 auto pSong = pHydrogen->
getSong();
337 if ( pSong ==
nullptr ) {
343 int nLine = pAction->getParameter1().toInt(&ok,10);
345 auto pInstrList = pSong->getInstrumentList();
347 auto pInstr = pInstrList->get( nLine );
348 if ( pInstr ==
nullptr ) {
349 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
358 if ( pHydrogen->
getSong() ==
nullptr ) {
368 if ( pHydrogen->
getSong() ==
nullptr ) {
386 pAction->getParameter1().toInt(&ok,10) );
396 auto pSong = pHydrogen->getSong();
399 if ( pSong ==
nullptr ) {
404 if ( nPatternNumber > pSong->getPatternList()->size() - 1 ||
405 nPatternNumber < 0 ) {
406 ERRORLOG( QString(
"Provided value [%1] out of bound [0,%2]" ).arg( nPatternNumber )
407 .arg( pSong->getPatternList()->size() - 1 ) );
411 if ( pHydrogen->getPatternMode() == Song::PatternMode::Selected ) {
412 pHydrogen->setSelectedPatternNumber( nPatternNumber );
414 else if ( pHydrogen->getPatternMode() == Song::PatternMode::Stacked ) {
415 pHydrogen->toggleNextPattern( nPatternNumber );
433 auto pSong = pHydrogen->getSong();
436 if ( pSong ==
nullptr ) {
441 if ( nPatternNumber > pSong->getPatternList()->size() -1 ||
442 nPatternNumber < 0 ) {
443 if ( pHydrogen->getPatternMode() == Song::PatternMode::Selected ) {
444 ERRORLOG( QString(
"Provided pattern number [%1] out of bound [0,%2]." )
445 .arg( nPatternNumber )
446 .arg( pSong->getPatternList()->size() - 1 ) );
450 INFOLOG( QString(
"Provided pattern number [%1] out of bound [0,%2]. All patterns will be deselected." )
451 .arg( nPatternNumber )
452 .arg( pSong->getPatternList()->size() - 1 ) );
456 if ( pHydrogen->getPatternMode() == Song::PatternMode::Selected ) {
460 return pHydrogen->flushAndAddNextPattern( nPatternNumber );
465 if ( pHydrogen->
getSong() ==
nullptr ) {
482 auto pSong = pHydrogen->
getSong();
485 if ( pSong ==
nullptr ) {
491 int nInstrumentNumber = pAction->getValue().toInt(&ok,10) ;
493 if ( pSong->getInstrumentList()->size() < nInstrumentNumber ) {
494 nInstrumentNumber = pSong->getInstrumentList()->size() -1;
495 }
else if ( nInstrumentNumber < 0 ) {
496 nInstrumentNumber = 0;
504 auto pSong = pHydrogen->
getSong();
507 if ( pSong ==
nullptr ) {
513 int nLine = pAction->getParameter1().toInt(&ok,10);
514 int fx_param = pAction->getValue().toInt(&ok,10);
515 int fx_id = pAction->getParameter2().toInt(&ok,10);
517 auto pInstrList = pSong->getInstrumentList();
519 auto pInstr = pInstrList->get( nLine );
520 if ( pInstr ==
nullptr) {
521 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
525 if( fx_param != 0 ) {
526 pInstr->set_fx_level( (
float) (fx_param / 127.0 ), fx_id );
528 pInstr->set_fx_level( 0 , fx_id );
539 auto pSong = pHydrogen->
getSong();
542 if ( pSong ==
nullptr ) {
548 int nLine = pAction->getParameter1().toInt(&ok,10);
549 int fx_param = pAction->getValue().toInt(&ok,10);
550 int fx_id = pAction->getParameter2().toInt(&ok,10);
552 auto pInstrList = pSong->getInstrumentList();
554 auto pInstr = pInstrList->get( nLine );
555 if ( pInstr ==
nullptr) {
556 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
559 if ( fx_param != 0 ) {
560 if ( fx_param == 1 && pInstr->get_fx_level( fx_id ) <= 0.95 ) {
561 pInstr->set_fx_level( pInstr->get_fx_level( fx_id ) + 0.05, fx_id );
563 else if ( pInstr->get_fx_level( fx_id ) >= 0.05 ) {
564 pInstr->set_fx_level( pInstr->get_fx_level( fx_id ) - 0.05, fx_id );
577 auto pSong = pHydrogen->
getSong();
580 if ( pSong ==
nullptr ) {
586 int nVolume = pAction->getValue().toInt(&ok,10);
588 if ( nVolume != 0 ) {
589 pSong->setVolume( 1.5* ( (
float) (nVolume / 127.0 ) ));
591 pSong->setVolume( 0 );
599 auto pSong = pHydrogen->
getSong();
602 if ( pSong ==
nullptr ) {
608 int nVolume = pAction->getValue().toInt(&ok,10);
610 if ( nVolume != 0 ) {
611 if ( nVolume == 1 && pSong->getVolume() < 1.5 ) {
612 pSong->setVolume( pSong->getVolume() + 0.05 );
613 }
else if ( pSong->getVolume() >= 0.0 ) {
614 pSong->setVolume( pSong->getVolume() - 0.05 );
617 pSong->setVolume( 0 );
625 auto pSong = pHydrogen->
getSong();
628 if ( pSong ==
nullptr ) {
634 int nLine = pAction->getParameter1().toInt(&ok,10);
635 int nVolume = pAction->getValue().toInt(&ok,10);
637 auto pInstrList = pSong->getInstrumentList();
639 auto pInstr = pInstrList->get( nLine );
640 if ( pInstr ==
nullptr ) {
641 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
645 if ( nVolume != 0 ) {
646 pInstr->set_volume( 1.5* ( (
float) (nVolume / 127.0 ) ));
648 pInstr->set_volume( 0 );
659 auto pSong = pHydrogen->
getSong();
662 if ( pSong ==
nullptr ) {
668 int nLine = pAction->getParameter1().toInt(&ok,10);
669 int nVolume = pAction->getValue().toInt(&ok,10);
671 auto pInstrList = pSong->getInstrumentList();
673 auto pInstr = pInstrList->get( nLine );
675 if ( pInstr ==
nullptr) {
676 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
681 if ( nVolume == 1 && pInstr->get_volume() < 1.5 ) {
682 pInstr->set_volume( pInstr->get_volume() + 0.1 );
684 else if( pInstr->get_volume() >= 0.0 ){
685 pInstr->set_volume( pInstr->get_volume() - 0.1 );
689 pInstr->set_volume( 0 );
700 auto pSong = pHydrogen->
getSong();
703 if ( pSong ==
nullptr ) {
709 int nLine = pAction->getParameter1().toInt(&ok,10);
710 int pan_param = pAction->getValue().toInt(&ok,10);
712 auto pInstrList = pSong->getInstrumentList();
714 auto pInstr = pInstrList->get( nLine );
715 if( pInstr ==
nullptr ) {
716 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
720 pInstr->setPanWithRangeFrom0To1( (
float) pan_param / 127.f );
731 auto pSong = pHydrogen->
getSong();
734 if ( pSong ==
nullptr ) {
740 int nLine = pAction->getParameter1().toInt(&ok,10);
741 int pan_param = pAction->getValue().toInt(&ok,10);
743 auto pInstrList = pSong->getInstrumentList();
745 auto pInstr = pInstrList->get( nLine );
746 if ( pInstr ==
nullptr ) {
747 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
751 pInstr->setPan( (
float) pan_param / 127.f );
763 auto pSong = pHydrogen->
getSong();
766 if ( pSong ==
nullptr ) {
772 int nLine = pAction->getParameter1().toInt(&ok,10);
773 int pan_param = pAction->getValue().toInt(&ok,10);
775 auto pInstrList = pSong->getInstrumentList();
777 auto pInstr = pInstrList->get( nLine );
778 if ( pInstr ==
nullptr ) {
779 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
783 float fPan = pInstr->getPan();
785 if ( pan_param == 1 && fPan < 1.f ) {
786 pInstr->setPan( fPan + 0.1 );
788 else if ( pan_param != 1 && fPan > -1.f ) {
789 pInstr->setPan( fPan - 0.1 );
799 auto pSong = pHydrogen->
getSong();
802 if ( pSong ==
nullptr ) {
808 int nLine = pAction->getParameter1().toInt(&ok,10);
809 int gain_param = pAction->getValue().toInt(&ok,10);
810 int component_id = pAction->getParameter2().toInt(&ok,10);
811 int layer_id = pAction->getParameter3().toInt(&ok,10);
813 auto pInstrList = pSong->getInstrumentList();
815 auto pInstr = pInstrList->get( nLine );
816 if( pInstr ==
nullptr ) {
817 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
821 auto pComponent = pInstr->get_component( component_id );
822 if( pComponent ==
nullptr) {
823 ERRORLOG( QString(
"Unable to retrieve component (Par. 2) [%1]" ).arg( component_id ) );
827 auto pLayer = pComponent->get_layer( layer_id );
828 if( pLayer ==
nullptr ) {
829 ERRORLOG( QString(
"Unable to retrieve layer (Par. 3) [%1]" ).arg( layer_id ) );
833 if ( gain_param != 0 ) {
834 pLayer->set_gain( 5.0* ( (
float) (gain_param / 127.0 ) ) );
836 pLayer->set_gain( 0 );
846 auto pSong = pHydrogen->
getSong();
849 if ( pSong ==
nullptr ) {
855 int nLine = pAction->getParameter1().toInt(&ok,10);
856 int pitch_param = pAction->getValue().toInt(&ok,10);
857 int component_id = pAction->getParameter2().toInt(&ok,10);
858 int layer_id = pAction->getParameter3().toInt(&ok,10);
860 auto pInstrList = pSong->getInstrumentList();
862 auto pInstr = pInstrList->get( nLine );
863 if( pInstr ==
nullptr ) {
864 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
868 auto pComponent = pInstr->get_component( component_id );
869 if( pComponent ==
nullptr) {
870 ERRORLOG( QString(
"Unable to retrieve component (Par. 2) [%1]" ).arg( component_id ) );
874 auto pLayer = pComponent->get_layer( layer_id );
875 if( pLayer ==
nullptr ) {
876 ERRORLOG( QString(
"Unable to retrieve layer (Par. 3) [%1]" ).arg( layer_id ) );
880 if( pitch_param != 0 ){
881 pLayer->set_pitch( 49* ( (
float) (pitch_param / 127.0 ) ) -24.5 );
883 pLayer->set_pitch( -24.5 );
893 auto pSong = pHydrogen->
getSong();
896 if ( pSong ==
nullptr ) {
902 int nLine = pAction->getParameter1().toInt(&ok,10);
903 int filter_cutoff_param = pAction->getValue().toInt(&ok,10);
905 auto pInstrList = pSong->getInstrumentList();
907 auto pInstr = pInstrList->get( nLine );
908 if( pInstr ==
nullptr ) {
909 ERRORLOG( QString(
"Unable to retrieve instrument (Par. 1) [%1]" ).arg( nLine ) );
913 pInstr->set_filter_active(
true );
914 if( filter_cutoff_param != 0 ) {
915 pInstr->set_filter_cutoff( ( (
float) (filter_cutoff_param / 127.0 ) ) );
917 pInstr->set_filter_cutoff( 0 );
933 if ( pHydrogen->
getSong() ==
nullptr ) {
944 int mult = pAction->getParameter1().toInt(&ok,10);
946 int cc_param = pAction->getValue().toInt(&ok,10);
956 pAudioEngine->setNextBpm( fBpm - 1*mult );
957 pAudioEngine->unlock();
959 pHydrogen->
getSong()->setBpm( fBpm - 1*mult );
966 pAudioEngine->setNextBpm( fBpm + 1*mult );
967 pAudioEngine->unlock();
969 pHydrogen->
getSong()->setBpm( fBpm + 1*mult );
985 if ( pHydrogen->
getSong() ==
nullptr ) {
995 int mult = pAction->getParameter1().toInt(&ok,10);
997 int cc_param = pAction->getValue().toInt(&ok,10);
1007 pAudioEngine->setNextBpm( fBpm - 0.01*mult );
1008 pAudioEngine->unlock();
1010 pHydrogen->
getSong()->setBpm( fBpm - 0.01*mult );
1016 pAudioEngine->setNextBpm( fBpm + 0.01*mult );
1017 pAudioEngine->unlock();
1019 pHydrogen->
getSong()->setBpm( fBpm + 0.01*mult );
1031 if ( pHydrogen->
getSong() ==
nullptr ) {
1040 int mult = pAction->getParameter1().toInt(&ok,10);
1044 pAudioEngine->setNextBpm( fBpm + 1*mult );
1045 pAudioEngine->unlock();
1047 pHydrogen->
getSong()->setBpm( fBpm + 1*mult );
1056 if ( pHydrogen->
getSong() ==
nullptr ) {
1065 int mult = pAction->getParameter1().toInt(&ok,10);
1069 pAudioEngine->setNextBpm( fBpm - 1*mult );
1070 pAudioEngine->unlock();
1072 pHydrogen->
getSong()->setBpm( fBpm - 1*mult );
1081 if ( pHydrogen->
getSong() ==
nullptr ) {
1087 getTransportPosition()->getColumn() ) + 1;
1096 if ( pHydrogen->
getSong() ==
nullptr ) {
1109 if ( nActiveSongNumber != nSongNumber ) {
1114 if ( pHydrogen->
getSong() ==
nullptr ) {
1118 ___ERRORLOG( QString(
"No songs added to the current playlist yet" ) );
1121 ___ERRORLOG( QString(
"Provided song number [%1] out of bound [0,%2]" )
1132 int songnumber = pAction->getParameter1().toInt(&ok,10);
1133 return setSong( songnumber, pHydrogen );
1138 return setSong( ++songnumber, pHydrogen );
1143 return setSong( --songnumber, pHydrogen );
1148 if ( pHydrogen->
getSong() ==
nullptr ) {
1166 if ( pHydrogen->
getSong() ==
nullptr ) {
1182 if ( pHydrogen->
getSong() ==
nullptr ) {
1195 if ( pHydrogen->
getSong() ==
nullptr ) {
1208 if ( pHydrogen->
getSong() ==
nullptr ) {
1232 auto foundActionPair =
m_actionMap.find( sActionType );
1234 return foundActionPair->second.second;
1236 ERRORLOG( QString(
"MIDI Action type [%1] couldn't be found" ).arg( sActionType ) );
1244 bool bResult =
false;
1246 for (
const auto& action : actions ) {
1247 if ( action !=
nullptr ) {
1264 if( pAction ==
nullptr ) {
1268 QString sActionString = pAction->getType();
1270 auto foundActionPair =
m_actionMap.find( sActionString );
1272 action_f action = foundActionPair->second.first;
1273 return (this->*action)(pAction, pHydrogen);
1275 ERRORLOG( QString(
"MIDI Action type [%1] couldn't be found" ).arg( sActionString ) );
#define RIGHT_HERE
Macro intended to be used for the logging of the locking of the H2Core::AudioEngine.
static QString getNullActionType()
bool isEquivalentTo(std::shared_ptr< Action > pOther)
bool isNull() const
Checks whether m_sType is of getNullActionType()
QString toQString(const QString &sPrefix="", bool bShort=true) const override
Formatted string version for debugging purposes.
Action(QString sType=getNullActionType())
const std::shared_ptr< TransportPosition > getTransportPosition() const
static QString sPrintIndention
String used to format the debugging string output of some core classes.
bool locateToColumn(int nPatternGroup)
Relocates transport to the beginning of a particular column/Pattern group.
bool setMetronomeIsActive(bool isActive)
bool setMasterIsMuted(bool isMuted)
bool setStripIsMuted(int nStrip, bool isMuted)
bool setStripIsSoloed(int nStrip, bool isSoloed)
static EventQueue * get_instance()
Returns a pointer to the current EventQueue singleton stored in __instance.
void push_event(const EventType type, const int nValue)
Queues the next event into the EventQueue.
void sequencer_stop()
Stop the internal sequencer.
std::shared_ptr< Song > getSong() const
Get the current song.
void onTapTempoAccelEvent()
int getSelectedPatternNumber() const
void setSelectedInstrumentNumber(int nInstrument, bool bTriggerEvent=true)
static Hydrogen * get_instance()
Returns the current Hydrogen instance __instance.
AudioEngine * getAudioEngine() const
CoreActionController * getCoreActionController() const
void sequencer_play()
Start the internal sequencer.
void setNextSongByNumber(int SongNumber)
int getActiveSongNumber()
static Playlist * get_instance()
Returns a pointer to the current Playlist singleton stored in __instance.
static Preferences * get_instance()
Returns a pointer to the current Preferences singleton stored in __instance.
void setRecordEvents(bool value)
The MidiActionManager cares for the execution of MidiActions.
bool previous_bar(std::shared_ptr< Action >, H2Core::Hydrogen *)
static MidiActionManager * __instance
Object holding the current MidiActionManager singleton.
bool bpm_decrease(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool record_strobe(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool playlist_next_song(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool setSong(int nSongNumber, H2Core::Hydrogen *pHydrogen)
bool playlist_song(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool unmute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool strip_volume_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool play(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool playlist_previous_song(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_instrument(std::shared_ptr< Action >, H2Core::Hydrogen *)
int m_nLastBpmChangeCCParameter
bool mute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool record_exit(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool master_volume_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool pitch_level_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool tap_tempo(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_next_pattern_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool handleAction(std::shared_ptr< Action > action)
The handleAction method is the heart of the MidiActionManager class.
bool strip_solo_toggle(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool beatcounter(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool pan_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool onlyNextPatternSelection(int nPatternNumber)
static void create_instance()
If __instance equals 0, a new MidiActionManager singleton will be created and stored in it.
bool pan_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool pan_absolute_sym(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_next_pattern(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool bpm_fine_cc_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_and_play_pattern(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool effect_level_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool redo_action(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool handleActions(std::vector< std::shared_ptr< Action > > actions)
Handles multiple actions at once and calls handleAction() on them.
bool filter_cutoff_level_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool strip_volume_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool pause(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool next_bar(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool toggle_metronome(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool play_stop_pause_toggle(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool record_strobe_toggle(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_only_next_pattern_cc_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool bpm_cc_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool stop(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool record_ready(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool undo_action(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool select_only_next_pattern(std::shared_ptr< Action >, H2Core::Hydrogen *)
QStringList m_actionList
Holds the names of all Action identifiers which Hydrogen is able to interpret.
bool mute_toggle(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool nextPatternSelection(int nPatternNumber)
bool master_volume_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
int getParameterNumber(const QString &sActionType) const
bool select_next_pattern_cc_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool(MidiActionManager::* action_f)(std::shared_ptr< Action >, H2Core::Hydrogen *)
std::map< QString, std::pair< action_f, int > > m_actionMap
Holds all Action identifiers which Hydrogen is able to interpret.
bool bpm_increase(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool strip_mute_toggle(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool effect_level_relative(std::shared_ptr< Action >, H2Core::Hydrogen *)
bool gain_level_absolute(std::shared_ptr< Action >, H2Core::Hydrogen *)
@ EVENT_INSTRUMENT_PARAMETERS_CHANGED
Some parameters of an instrument have been changed.