|
@@ -991,10 +991,10 @@ void MidiOutCore :: openVirtualPort( std::string portName )
|
|
|
|
|
|
// Not necessary if we don't treat sysex messages any differently than
|
|
|
// normal messages ... see below.
|
|
|
-//static void sysexCompletionProc( MIDISysexSendRequest *sreq )
|
|
|
-//{
|
|
|
-// free( sreq );
|
|
|
-//}
|
|
|
+static void sysexCompletionProc( MIDISysexSendRequest *sreq )
|
|
|
+{
|
|
|
+ free( sreq );
|
|
|
+}
|
|
|
|
|
|
void MidiOutCore :: sendMessage( std::vector<unsigned char> *message )
|
|
|
{
|
|
@@ -1013,12 +1013,16 @@ void MidiOutCore :: sendMessage( std::vector<unsigned char> *message )
|
|
|
CoreMidiData *data = static_cast<CoreMidiData *> (apiData_);
|
|
|
OSStatus result;
|
|
|
|
|
|
- /*
|
|
|
- // I don't think this code is necessary. We can send sysex
|
|
|
- // messages through the normal mechanism. In addition, this avoids
|
|
|
- // the problem of virtual ports not receiving sysex messages.
|
|
|
+ ///*
|
|
|
+ // It would be nice if the following "special-case" code for sysex
|
|
|
+ // messages longer than 1024 bytes wasn't necessary. In fact, we
|
|
|
+ // can send sysex messages through the normal messaging mechanism.
|
|
|
+ // However, that does not work for messages greater than 1024
|
|
|
+ // bytes. From a previous note, there may be a problem of virtual
|
|
|
+ // ports not receiving sysex messages when using this section of
|
|
|
+ // code.
|
|
|
|
|
|
- if ( message->at(0) == 0xF0 ) {
|
|
|
+ if ( message->at(0) == 0xF0 && nBytes > 1022 ) {
|
|
|
|
|
|
// Apple's fantastic API requires us to free the allocated data in
|
|
|
// the completion callback but trashes the pointer and size before
|
|
@@ -1049,12 +1053,12 @@ void MidiOutCore :: sendMessage( std::vector<unsigned char> *message )
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
- else if ( nBytes > 3 ) {
|
|
|
+ else if ( message->at(0) != 0xF0 && nBytes > 3 ) {
|
|
|
errorString_ = "MidiOutCore::sendMessage: message format problem ... not sysex but > 3 bytes?";
|
|
|
error( RtMidiError::WARNING, errorString_ );
|
|
|
return;
|
|
|
}
|
|
|
- */
|
|
|
+ //*/
|
|
|
|
|
|
MIDIPacketList packetList;
|
|
|
MIDIPacket *packet = MIDIPacketListInit( &packetList );
|