Option to trigger "Real-time Advance" when MidiRemote key is released
This commit is contained in:
parent
11cbddbf2e
commit
f4c4f8448e
5 changed files with 98 additions and 17 deletions
|
@ -2055,10 +2055,18 @@ bool MuseScore::midiinEnabled() const
|
|||
// return if midi remote command detected
|
||||
//---------------------------------------------------------
|
||||
|
||||
bool MuseScore::processMidiRemote(MidiRemoteType type, int data)
|
||||
bool MuseScore::processMidiRemote(MidiRemoteType type, int data, int value)
|
||||
{
|
||||
if (!preferences.useMidiRemote)
|
||||
return false;
|
||||
if (!value) {
|
||||
// This was a "NoteOff" or "CtrlOff" event. Most MidiRemote actions should only
|
||||
// be triggered by an "On" event, so we need to check if this is one of those.
|
||||
if (!preferences.advanceOnRelease
|
||||
|| type != preferences.midiRemote[RMIDI_REALTIME_ADVANCE].type
|
||||
|| data != preferences.midiRemote[RMIDI_REALTIME_ADVANCE].data)
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < MIDI_REMOTES; ++i) {
|
||||
if (preferences.midiRemote[i].type == type && preferences.midiRemote[i].data == data) {
|
||||
if (cv == 0)
|
||||
|
@ -2125,7 +2133,7 @@ void MuseScore::midiNoteReceived(int channel, int pitch, int velo)
|
|||
return;
|
||||
}
|
||||
|
||||
if (velo && processMidiRemote(MIDI_REMOTE_TYPE_NOTEON, pitch)) {
|
||||
if (processMidiRemote(MIDI_REMOTE_TYPE_NOTEON, pitch, velo)) {
|
||||
active = 0;
|
||||
return;
|
||||
}
|
||||
|
@ -2156,10 +2164,10 @@ void MuseScore::midiNoteReceived(int channel, int pitch, int velo)
|
|||
++active;
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* Since a note may be assigned to a midi_remote, don't decrease active below zero
|
||||
* on noteoff.
|
||||
*/
|
||||
/*
|
||||
* Since a note may be assigned to a midi_remote, don't decrease active below zero
|
||||
* on noteoff.
|
||||
*/
|
||||
|
||||
if ((channel != 0x09) && (active > 0))
|
||||
--active;
|
||||
|
@ -2184,7 +2192,7 @@ void MuseScore::midiCtrlReceived(int controller, int value)
|
|||
return;
|
||||
}
|
||||
// when value is 0 (usually when a key is released ) nothing happens
|
||||
if (value && processMidiRemote(MIDI_REMOTE_TYPE_CTRL, controller))
|
||||
if (processMidiRemote(MIDI_REMOTE_TYPE_CTRL, controller, value))
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -608,7 +608,7 @@ class MuseScore : public QMainWindow, public MuseScoreCore {
|
|||
void setBasicPalette();
|
||||
void excerptsChanged(MasterScore*);
|
||||
void scorePageLayoutChanged();
|
||||
bool processMidiRemote(MidiRemoteType type, int data);
|
||||
bool processMidiRemote(MidiRemoteType type, int data, int value);
|
||||
ScoreTab* getTab1() const { return tab1; }
|
||||
ScoreTab* getTab2() const { return tab2; }
|
||||
QList<LanguageItem>& languages() { return _languages; }
|
||||
|
|
|
@ -79,6 +79,7 @@ void Preferences::init()
|
|||
iconWidth = 28;
|
||||
|
||||
enableMidiInput = true;
|
||||
realtimeDelay = 750; // ms
|
||||
playNotes = true;
|
||||
playChordOnAddNote = true;
|
||||
|
||||
|
@ -126,6 +127,7 @@ void Preferences::init()
|
|||
useMidiRemote = false;
|
||||
for (int i = 0; i < MIDI_REMOTES; ++i)
|
||||
midiRemote[i].type = MIDI_REMOTE_TYPE_INACTIVE;
|
||||
advanceOnRelease = true;
|
||||
|
||||
midiExpandRepeats = true;
|
||||
midiExportRPNs = false;
|
||||
|
@ -224,6 +226,7 @@ void Preferences::write()
|
|||
s.setValue("defaultColor", MScore::defaultColor);
|
||||
s.setValue("pianoHlColor", pianoHlColor);
|
||||
s.setValue("enableMidiInput", enableMidiInput);
|
||||
s.setValue("realtimeDelay", realtimeDelay);
|
||||
s.setValue("playNotes", playNotes);
|
||||
s.setValue("playChordOnAddNote", playChordOnAddNote);
|
||||
|
||||
|
@ -340,6 +343,7 @@ void Preferences::write()
|
|||
QString("%1%2").arg(t).arg(midiRemote[i].data));
|
||||
}
|
||||
}
|
||||
s.setValue("advanceOnRelease", advanceOnRelease);
|
||||
|
||||
writePluginList();
|
||||
if (Shortcut::dirty)
|
||||
|
@ -374,6 +378,7 @@ void Preferences::read()
|
|||
pianoHlColor = s.value("pianoHlColor", pianoHlColor).value<QColor>();
|
||||
|
||||
enableMidiInput = s.value("enableMidiInput", enableMidiInput).toBool();
|
||||
realtimeDelay = s.value("realtimeDelay", realtimeDelay).toInt();
|
||||
playNotes = s.value("playNotes", playNotes).toBool();
|
||||
playChordOnAddNote = s.value("playChordOnAddNote", playChordOnAddNote).toBool();
|
||||
|
||||
|
@ -507,6 +512,7 @@ void Preferences::read()
|
|||
}
|
||||
}
|
||||
}
|
||||
advanceOnRelease = s.value("advanceOnRelease", advanceOnRelease).toBool();
|
||||
|
||||
// s.beginGroup("PlayPanel");
|
||||
// playPanelPos = s.value("pos", playPanelPos).toPoint();
|
||||
|
@ -737,6 +743,8 @@ void PreferenceDialog::updateRemote()
|
|||
void PreferenceDialog::updateValues()
|
||||
{
|
||||
rcGroup->setChecked(prefs.useMidiRemote);
|
||||
advanceOnRelease->setChecked(prefs.advanceOnRelease);
|
||||
|
||||
fgWallpaper->setText(prefs.fgWallpaper);
|
||||
bgWallpaper->setText(prefs.bgWallpaper);
|
||||
|
||||
|
@ -765,6 +773,7 @@ void PreferenceDialog::updateValues()
|
|||
iconHeight->setValue(prefs.iconHeight);
|
||||
|
||||
enableMidiInput->setChecked(prefs.enableMidiInput);
|
||||
realtimeDelay->setValue(prefs.realtimeDelay);
|
||||
playNotes->setChecked(prefs.playNotes);
|
||||
playChordOnAddNote->setChecked(prefs.playChordOnAddNote);
|
||||
|
||||
|
@ -1246,6 +1255,7 @@ void PreferenceDialog::apply()
|
|||
prefs.useMidiRemote = rcGroup->isChecked();
|
||||
for (int i = 0; i < MIDI_REMOTES; ++i)
|
||||
prefs.midiRemote[i] = preferences.midiRemote[i];
|
||||
prefs.advanceOnRelease = advanceOnRelease->isChecked();
|
||||
prefs.fgWallpaper = fgWallpaper->text();
|
||||
prefs.bgWallpaper = bgWallpaper->text();
|
||||
prefs.fgColor = fgColorLabel->color();
|
||||
|
@ -1257,6 +1267,7 @@ void PreferenceDialog::apply()
|
|||
prefs.bgUseColor = bgColorButton->isChecked();
|
||||
prefs.fgUseColor = fgColorButton->isChecked();
|
||||
prefs.enableMidiInput = enableMidiInput->isChecked();
|
||||
prefs.realtimeDelay = realtimeDelay->value();
|
||||
prefs.playNotes = playNotes->isChecked();
|
||||
prefs.playChordOnAddNote = playChordOnAddNote->isChecked();
|
||||
|
||||
|
|
|
@ -93,6 +93,7 @@ struct Preferences {
|
|||
QColor dropColor;
|
||||
QColor pianoHlColor;
|
||||
bool enableMidiInput;
|
||||
int realtimeDelay;
|
||||
bool playNotes; // play notes on click
|
||||
bool playChordOnAddNote;
|
||||
bool showNavigator;
|
||||
|
@ -124,6 +125,7 @@ struct Preferences {
|
|||
|
||||
bool useMidiRemote;
|
||||
MidiRemote midiRemote[MIDI_REMOTES];
|
||||
bool advanceOnRelease;
|
||||
|
||||
bool midiExpandRepeats;
|
||||
bool midiExportRPNs;
|
||||
|
|
|
@ -1136,8 +1136,8 @@
|
|||
<property name="title">
|
||||
<string>Note Input</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="enableMidiInput">
|
||||
<property name="accessibleName">
|
||||
<string>Enable MIDI Input</string>
|
||||
|
@ -1147,7 +1147,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="warnPitchRange">
|
||||
<property name="accessibleName">
|
||||
<string>Color notes outside of usable pitch range</string>
|
||||
|
@ -1157,6 +1157,48 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_56">
|
||||
<property name="text">
|
||||
<string>Delay between notes in automatic Real-time mode:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="realtimeDelay">
|
||||
<property name="accessibleName">
|
||||
<string>Delay between notes in automatic Real-time mode</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string>ms</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>300</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>3000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>750</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -1606,7 +1648,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="12">
|
||||
<item row="4" column="8">
|
||||
<widget class="QLabel" name="label_47">
|
||||
<property name="text">
|
||||
<string>Tie</string>
|
||||
|
@ -1616,7 +1658,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="12">
|
||||
<item row="2" column="12">
|
||||
<widget class="QLabel" name="label_54">
|
||||
<property name="text">
|
||||
<string>Real-time Advance</string>
|
||||
|
@ -1698,7 +1740,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="13">
|
||||
<item row="4" column="9">
|
||||
<widget class="Ms::GreendotButton" name="rca12">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
|
@ -1716,7 +1758,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="14">
|
||||
<item row="4" column="10">
|
||||
<widget class="Ms::RecordButton" name="rcr12">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
|
@ -1734,7 +1776,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="13">
|
||||
<item row="2" column="13">
|
||||
<widget class="Ms::GreendotButton" name="realtimeAdvanceActive">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
|
@ -1752,7 +1794,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="14">
|
||||
<item row="2" column="14">
|
||||
<widget class="Ms::RecordButton" name="recordRealtimeAdvance">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
|
@ -2167,6 +2209,23 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="12">
|
||||
<widget class="QLabel" name="label_55">
|
||||
<property name="text">
|
||||
<string>Advance on release?</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="13" alignment="Qt::AlignHCenter|Qt::AlignVCenter">
|
||||
<widget class="QCheckBox" name="advanceOnRelease">
|
||||
<property name="accessibleName">
|
||||
<string>Advance on release?</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="12" colspan="3">
|
||||
<widget class="QPushButton" name="midiRemoteControlClear">
|
||||
<property name="accessibleName">
|
||||
|
@ -3848,6 +3907,7 @@
|
|||
<tabstop>rcr12</tabstop>
|
||||
<tabstop>realtimeAdvanceActive</tabstop>
|
||||
<tabstop>recordRealtimeAdvance</tabstop>
|
||||
<tabstop>advanceOnRelease</tabstop>
|
||||
<tabstop>midiRemoteControlClear</tabstop>
|
||||
<tabstop>instrumentList1</tabstop>
|
||||
<tabstop>instrumentList1Button</tabstop>
|
||||
|
|
Loading…
Reference in a new issue