Option to trigger "Real-time Advance" when MidiRemote key is released

This commit is contained in:
Peter Jonas 2016-08-08 16:46:48 +01:00
parent 11cbddbf2e
commit f4c4f8448e
No known key found for this signature in database
GPG key ID: 0B81879C782D49F1
5 changed files with 98 additions and 17 deletions

View file

@ -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;
}

View file

@ -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; }

View file

@ -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();

View file

@ -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;

View file

@ -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>