在iOS上手动播放蓝牙MIDI,无需CABTMIDILocalPeripheralViewController

Har*_*ngh 9 bluetooth ios coremidi bluetooth-lowenergy ios9

我刚刚发现CABTMIDILocalPeripheralViewControlleriOS用于处理启用蓝牙MIDI可发现性的用户设置.这很好,但是为了将蓝牙集成到我的应用程序的网络MIDI连接的其余部分,能够直接从我的应用程序的代码处理启用而不是依赖这个不透明的VC是很好的.有谁知道这是否可能?

Har*_*ngh 2

没有公共 API 来管理此功能。根据 Instruments 的调查,该开关似乎会导致CBPeripheralManager. 我认为它将设备设置为蓝牙外围设备,并手动将数据传入和传出MIDIEndpointRef也已创建的设备。

换句话说,不存在一劳永逸的解决方案。如果我进一步沿着这条路线走下去,我将发布代码,除非其他人想尝试一下......

更新

神奇的密码...

- (instancetype)init
{
    self = [super init];
    if (self) {
        _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    }
    return self;
}

//---------------------------------------------------------------------

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
    if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
        return;
    }

    info(@"_peripheralManager powered on.");

//    CBMutableCharacteristic *tx = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:RBL_TX_UUID] properties:CBCharacteristicPropertyWriteWithoutResponse value:nil permissions:CBAttributePermissionsWriteable];
//    
    rx = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"7772E5DB-3868-4112-A1A9-F2669D106BF3"] properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWriteWithoutResponse|CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];

    CBMutableService *s = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"03B80E5A-EDE8-4B33-A751-6CE34EC4C700"] primary:YES];
    s.characteristics = @[rx];

    [_peripheralManager addService:s];

    NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey : BLE_NAME, CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:@"03B80E5A-EDE8-4B33-A751-6CE34EC4C700"]]};
    [_peripheralManager startAdvertising:advertisingData];
}
Run Code Online (Sandbox Code Playgroud)

正是这些 ID 定义了 MIDI 外围设备。更多信息:

苹果曾经有一个文档在

……现在已经不再是了。我很想找到一个旧副本,因为事实证明接收器代码(模拟CABTMIDICentralViewController)更难破解......