Hello, this patch enables the possibility to start and stop transport remotely by simple MIDI /START/STOP messages. I included the configuration choice to MMC options because I think this belongs there.
BR Eckhard
Index: rosegarden/gui/rosegardenconfigurationpage.h
===================================================================
--- rosegarden/gui/rosegardenconfigurationpage.h (revision 7189)
+++ rosegarden/gui/rosegardenconfigurationpage.h (working copy)
@@ -518,7 +518,6 @@
QComboBox *m_mmcTransport;
QComboBox *m_mtcTransport;
QCheckBox *m_midiSyncAuto;
-
int m_sampleRate;
QSlider* m_readAhead;
QSlider* m_audioMix;
Index: rosegarden/gui/rosegardenconfigurationpage.cpp
===================================================================
--- rosegarden/gui/rosegardenconfigurationpage.cpp (revision 7189)
+++ rosegarden/gui/rosegardenconfigurationpage.cpp (working copy)
@@ -1477,9 +1477,10 @@
m_mmcTransport->insertItem(i18n("Off"));
m_mmcTransport->insertItem(i18n("MMC Master"));
m_mmcTransport->insertItem(i18n("MMC Slave"));
+ m_mmcTransport->insertItem(i18n("Simple Start/Stop"));
int mmcMode = m_cfg->readNumEntry("mmcmode", 0);
- if (mmcMode < 0 || mmcMode > 2) mmcMode = 0;
+ if (mmcMode < 0 || mmcMode > 3) mmcMode = 0;
m_mmcTransport->setCurrentItem(mmcMode);
// MTC transport
Index: rosegarden/sound/AlsaDriver.cpp
===================================================================
--- rosegarden/sound/AlsaDriver.cpp (revision 7189)
+++ rosegarden/sound/AlsaDriver.cpp (working copy)
@@ -2253,7 +2253,7 @@
RealTime eventTime(0, 0);
snd_seq_event_t *event;
-
+
while (snd_seq_event_input(m_midiHandle, &event) > 0)
{
unsigned int channel = (unsigned int)event->data.note.channel;
@@ -2495,24 +2495,42 @@
break;
case SND_SEQ_EVENT_START:
+ if(getMMCStatus() == TRANSPORT_SIMPLE_START_STOP) {
#ifdef DEBUG_ALSA
- std::cerr << "AlsaDriver::getMappedComposition - "
+ std::cerr << "AlsaDriver::getMappedComposition - "
<< "START" << std::endl;
#endif
+ ExternalTransport *transport = getExternalTransportControl();
+ if (transport) {
+ transport->transportChange(ExternalTransport::TransportPlay);
+ }
+ }
break;
case SND_SEQ_EVENT_CONTINUE:
+ if(getMMCStatus() == TRANSPORT_SIMPLE_START_STOP) {
#ifdef DEBUG_ALSA
- std::cerr << "AlsaDriver::getMappedComposition - "
+ std::cerr << "AlsaDriver::getMappedComposition - "
<< "CONTINUE" << std::endl;
#endif
+ ExternalTransport *transport = getExternalTransportControl();
+ if (transport) {
+ transport->transportChange(ExternalTransport::TransportPlay);
+ }
+ }
break;
case SND_SEQ_EVENT_STOP:
+ if(getMMCStatus() == TRANSPORT_SIMPLE_START_STOP) {
#ifdef DEBUG_ALSA
- std::cerr << "AlsaDriver::getMappedComposition - "
+ std::cerr << "AlsaDriver::getMappedComposition - "
<< "STOP" << std::endl;
#endif
+ ExternalTransport *transport = getExternalTransportControl();
+ if (transport) {
+ transport->transportChange(ExternalTransport::TransportStop);
+ }
+ }
break;
case SND_SEQ_EVENT_SONGPOS:
@@ -2520,6 +2538,7 @@
std::cerr << "AlsaDriver::getMappedComposition - "
<< "SONG POSITION" << std::endl;
#endif
+
break;
// these cases are handled by checkForNewClients
@@ -3048,7 +3067,7 @@
if (getMMCStatus() != TRANSPORT_SLAVE) return false;
if (event->data.ext.len != 6) return false;
-
+
unsigned char *ptr = (unsigned char *)(event->data.ext.ptr);
if (*ptr++ != MIDI_SYSTEM_EXCLUSIVE) return false;
@@ -3057,7 +3076,7 @@
if (*ptr++ != MIDI_SYSEX_RT_COMMAND) return false;
int instruction = *ptr++;
-
+ std::cerr << "MMC received ";
if (*ptr != MIDI_END_OF_EXCLUSIVE) return false;
if (instruction == MIDI_MMC_PLAY ||
@@ -3991,6 +4010,14 @@
setMMCStatus(TRANSPORT_SLAVE);
break;
+ case 3:
+#ifdef DEBUG_ALSA
+ std::cerr << "AlsaDriver::processEventsOut - "
+ << "Rosegarden accepts simple START/STOP"
+ << std::endl;
+#endif
+ setMMCStatus(TRANSPORT_SIMPLE_START_STOP);
+ break;
case 0:
default:
#ifdef DEBUG_ALSA
Index: rosegarden/sound/SoundDriver.h
===================================================================
--- rosegarden/sound/SoundDriver.h (revision 7189)
+++ rosegarden/sound/SoundDriver.h (working copy)
@@ -76,7 +76,8 @@
{
TRANSPORT_OFF,
TRANSPORT_MASTER,
- TRANSPORT_SLAVE
+ TRANSPORT_SLAVE,
+ TRANSPORT_SIMPLE_START_STOP
} TransportSyncStatus;
pgps94BCA12nm.pgp
Description: PGP signature
