@@ -474,7 +474,7 @@ static void updateProtocolInfo(MIDIObjectRef entity, MidiDeviceInfo& info)
474474#if YUP_HAS_NEW_COREMIDI_API
475475 SInt32 protocol = 0 ;
476476
477- if (CHECK_ERROR ( MIDIObjectGetIntegerProperty (entity, kMIDIPropertyProtocolID , &protocol)) )
477+ if (MIDIObjectGetIntegerProperty (entity, kMIDIPropertyProtocolID , &protocol) == noErr )
478478 {
479479 if (protocol == kMIDIProtocol_2_0 )
480480 {
@@ -1272,6 +1272,18 @@ static CreatorFunctionPointers getCreatorFunctionPointers()
12721272 callback);
12731273}
12741274
1275+ std::unique_ptr<MidiInput> MidiInput::createNewDevice (const String& deviceName,
1276+ ump::PacketProtocol protocol,
1277+ ump::Receiver* receiver)
1278+ {
1279+ if (receiver == nullptr )
1280+ return {};
1281+
1282+ return Pimpl::createDevice (protocol,
1283+ deviceName,
1284+ *receiver);
1285+ }
1286+
12751287MidiInput::MidiInput (const String& deviceName,
12761288 const String& deviceIdentifier,
12771289 ump::PacketProtocol protocol)
@@ -1356,18 +1368,24 @@ static CreatorFunctionPointers getCreatorFunctionPointers()
13561368 return {};
13571369}
13581370
1359- std::unique_ptr<MidiOutput> MidiOutput::createNewDevice (const String& deviceName)
1360- {
1361- using namespace CoreMidiHelpers ;
1362-
1363- if (auto client = getGlobalMidiClient ())
1364- {
1365- MIDIEndpointRef endpoint;
1366-
1367- CFUniquePtr<CFStringRef> name (deviceName.toCFString ());
1368-
1369- auto err = CreatorFunctionsToUse::createSource (ump::PacketProtocol::MIDI_1_0, client, name.get (), &endpoint);
1370- ScopedEndpointRef scopedEndpoint{endpoint};
1371+ std::unique_ptr<MidiOutput> MidiOutput::createNewDevice (const String& deviceName)
1372+ {
1373+ return createNewDevice (deviceName, ump::PacketProtocol::MIDI_1_0);
1374+ }
1375+
1376+ std::unique_ptr<MidiOutput> MidiOutput::createNewDevice (const String& deviceName,
1377+ ump::PacketProtocol protocol)
1378+ {
1379+ using namespace CoreMidiHelpers ;
1380+
1381+ if (auto client = getGlobalMidiClient ())
1382+ {
1383+ MIDIEndpointRef endpoint;
1384+
1385+ CFUniquePtr<CFStringRef> name (deviceName.toCFString ());
1386+
1387+ auto err = CreatorFunctionsToUse::createSource (protocol, client, name.get (), &endpoint);
1388+ ScopedEndpointRef scopedEndpoint{endpoint};
13711389
13721390#if YUP_IOS
13731391 if (err == kMIDINotPermitted )
@@ -1387,10 +1405,10 @@ static CreatorFunctionPointers getCreatorFunctionPointers()
13871405 if (!CHECK_ERROR (MIDIObjectSetIntegerProperty (*scopedEndpoint, kMIDIPropertyUniqueID , (SInt32)deviceIdentifier)))
13881406 return {};
13891407
1390- auto midiOutput = rawToUniquePtr (new MidiOutput (deviceName, String (deviceIdentifier), ump::PacketProtocol::MIDI_1_0 ));
1408+ auto midiOutput = rawToUniquePtr (new MidiOutput (deviceName, String (deviceIdentifier), protocol ));
13911409 midiOutput->internal = std::make_unique<Pimpl>(ScopedPortRef{},
13921410 std::move (scopedEndpoint),
1393- ump::PacketProtocol::MIDI_1_0 );
1411+ protocol );
13941412
13951413 return midiOutput;
13961414 }
0 commit comments