ios - 如何使用 Swift 通过 LE 蓝牙将 MIDI 数据从 iOS 发送到 OS X

标签 ios macos swift bluetooth midi

是否有任何教程解释如何使用 CABTMIDILocalPeripheralViewController() 将 MIDI 数据从 iOS 设备发送到 mac?

连接正常,但我不知道如何发送 MIDI 数据。我用谷歌搜索了大约两个小时,但没有找到任何东西。也许你能帮我?

最佳答案

根据 Apple 的文档(正如您所发现的),CABTMIDILocalPeripheralViewController 舞蹈所做的就是使联网的 MIDI 设备可用。它实际上不会与它通过网络发现的设备建立任何 MIDI 连接。

After a connection is established, it simply appears as an ordinary MIDI device that any MIDI application can communicate with.

这意味着您仍然需要处理应用的其余 MIDI 实现。为此,您必须使用 CoreMIDI 框架,这有点麻烦,尤其是在 Swift 的世界中。

以下代码说明了如何枚举可用的 MIDI 设备:

let numDevices = MIDIGetNumberOfDevices()
for ix in 1...numDevices {
    let dev = MIDIGetDevice(ix)  // `dev` is a MIDIDeviceRef
    print("Device \(ix) is \(dev)")  // so it shows up as a number here
    var deviceNameCF: Unmanaged<CFString>?  // the Swift equivalent of a pointer to a string
    let propertyNameErr = MIDIObjectGetStringProperty(dev, kMIDIPropertyName, &deviceNameCF)
    if (propertyNameErr != 0) {
        print("Error getting property: \(propertyNameErr)")
    } else {
        let deviceName = deviceNameCF!.takeRetainedValue() as? NSString
        print("Device name: \(deviceName!)")
    }
}

为了调试,您可以将其添加到显示的 doneAction 处理程序中 in their example ,或者对于生产中更强大的东西,您可以使用 doneAction 处理程序来触发您的 UI 刷新以显示新的可用设备。

编辑 PGMidi library是一种方便、轻量级、灵活许可的选项,用于将 MIDI 数据发送到目的地,包括您通过蓝牙连接的目的地。

关于ios - 如何使用 Swift 通过 LE 蓝牙将 MIDI 数据从 iOS 发送到 OS X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241392/

相关文章:

macos - NSOutlineView - 获取给定项目的 NSTableCellView

swift - 在 Swift 中四舍五入

ios - 每隔5分钟Phonegap在后台唤醒应用程序以检查iOS位置

ios - 使用自动布局约束实现百分比重叠

iphone - 在应用程序加载时自动显示 UIImagePickerController

linux - nbd-client 无法设置设备

iphone - 如何在 MKMapView 中将我当前的位置居中?

mac 10.8 上的 Java EE 6 SDK 安装问题

swift - 如何从具有通用返回类型和 where 子句的方法返回值

c++ - Xcode 错误 - lipo : can't move temporary file: (is a directory)