“OSCKit”/

OSCKit

OSCKit 包提供了必要的类,供您的应用程序通过 IP 网络,使用 OSC 在计算机、声音合成器和其他多媒体设备之间进行通信。

概述

使用 OSCKit 包创建客户端或服务器对象。最简单的形式,客户端可以向服务器发送数据包,可以是 消息 (Message)数据包集合 (Bundle)。 服务器在监听时,可以接收这些数据包并对其采取相应的操作。 根据客户端或服务器使用 UDP 或 TCP 作为传输方式,功能级别和委托方法会有所不同,您可以利用这些功能和方法。

OSCKit 实现了 OSC 1.1 中指定的所有必需的参数类型。

示例项目可以在 OSCKitDemo 中找到。

许可证

OSCKit 在 GNU Affero 通用公共许可证第 3 版下获得许可。 如果您需要商业许可证,用于不希望触发 AGPLv3 义务的应用程序(例如,开源您的应用程序),请联系我们。 获得免费商业许可证的可能性很高。

特性

安装

Xcode 11+

将包依赖项添加到您的 Xcode 项目,使用以下存储库 URL

https://github.com/SammySmallman/OSCKit

Swift Package Manager

将包依赖项添加到您的 Package.swift 中,并在必要的 target 中依赖 "OSCKit"

dependencies: [
    .package(url: "https://github.com/SammySmallman/OSCKit", .upToNextMajor(from: "4.0.0"))
]

App Sandbox 网络设置

快速入门

TCP 客户端

步骤 1

将 OSCKit 导入到您的项目中

import OSCKit

步骤 2

创建一个客户端

let client = OSCTcpClient(host: "10.101.130.101",
                          port: 24601,
                          streamFraming: .SLIP,
                          delegate: self)

步骤 3

遵循客户端的委托协议 OSCTcpClientDelegate

func client(_ client: OSCTcpClient,
            didConnectTo host: String,
            port: UInt16) {
    print("Client did connect to \(host):\(port)")
}

func client(_ client: OSCTcpClient,
            didDisconnectWith error: Error?) {
    if let error = error {
       print("Client did disconnect with error: \(error.localizedDescription)")
    } else {
       print("Client did disconnect")
    }
}

func client(_ client: OSCTcpClient,
            didSendPacket packet: OSCPacket) {
    print("Client did send packet")
}
    
func client(_ client: OSCTcpClient,
            didReceivePacket packet: OSCPacket) {
    print("Client did receive packet")
}
    
func client(_ client: OSCTcpClient,
            didReadData data: Data,
            with error: Error) {
    print("Client did read data with error: \(error.localizedDescription)"
}

步骤 4

创建一个 OSCPacket,例如,一个 OSC 消息

do {
    let message = try OSCMessage(with: "/osc/kit", arguments: [1,
                                                               3.142,
                                                               "hello world!"])
} catch {
    print("Unable to create OSCMessage: \(error.localizedDescription)")
}

步骤 5

发送数据包

client.send(.message(message))
TCP 服务器

步骤 1

将 OSCKit 导入到您的项目中

import OSCKit

步骤 2

创建一个客户端

let server = OSCTcpServer(port: 24601,
                          streamFraming: .SLIP,
                          delegate: self)

步骤 3

遵循服务器的委托协议 OSCTcpServerDelegate

func server(_ server: OSCTcpServer,
            didConnectToClientWithHost host: String,
            port: UInt16) {
    print("Server did connect to client \(host):\(port)")
}

func server(_ server: OSCTcpServer,
            didDisconnectFromClientWithHost host: String,
            port: UInt16) {
    print("Server did disconnect from client \(host):\(port)")
}

func server(_ server: OSCTcpServer,
            didReceivePacket packet: OSCPacket,
            fromHost host: String,
            port: UInt16) {
    print("Server did receive packet")
}
    
func server(_ server: OSCTcpServer,
            didSendPacket packet: OSCPacket,
            toClientWithHost host: String,
            port: UInt16) {
    print("Server did send packet to \(host):\(port)")
}
    
func server(_ server: OSCTcpServer,
            socketDidCloseWithError error: Error?) {
    if let error = error {
       print("Server did stop listening with error: \(error.localizedDescription)")
    } else {
       print("Server did stop listening")
    }
}
    
func server(_ server: OSCTcpServer,
            didReadData data: Data,
            with error: Error) {
    print("Server did read data with error: \(error.localizedDescription)")
}

步骤 4

开始监听新连接和数据包

do {
    try server.startListening()
} catch {
    print(error.localizedDescription)
}
UDP 客户端

步骤 1

将 OSCKit 导入到您的项目中

import OSCKit

步骤 2

创建一个客户端

let client = OSCUdpClient(host: "10.101.130.101",
                          port: 24601,
                          delegate: self)

步骤 3

遵循客户端的委托协议 OSCUdpClientDelegate

func client(_ client: OSCUdpClient,
            didSendPacket packet: OSCPacket,
            fromHost host: String?,
            port: UInt16?) {
    print("Client sent packet to \(client.host):\(client.port)")
}

func client(_ client: OSCUdpClient,
            didNotSendPacket packet: OSCPacket,
            fromHost host: String?,
            port: UInt16?,
            error: Error?) {
    print("Client did not send packet to \(client.host):\(client.port)")
}

func client(_ client: OSCUdpClient,
            socketDidCloseWithError error: Error) {
    print("Client Error: \(error.localizedDescription)")
}

步骤 4

创建一个 OSCPacket,例如,一个 OSC 消息

do {
    let message = try OSCMessage(with: "/osc/kit", arguments: [1,
                                                               3.142,
                                                               "hello world!"])
} catch {
    print("Unable to create OSCMessage: \(error.localizedDescription)")
}

步骤 5

发送数据包

client.send(.message(message))
UDP 服务器

步骤 1

将 OSCKit 导入到您的项目中

import OSCKit

步骤 2

创建一个客户端

let server = OSCUdpServer(port: 24601,
                          delegate: self)

步骤 3

遵循服务器的委托协议 OSCUdpServerDelegate

func server(_ server: OSCUdpServer,
            didReceivePacket packet: OSCPacket,
            fromHost host: String,
            port: UInt16) {
    print("Server did receive packet from \(host):\(port)")
}

func server(_ server: OSCUdpServer,
            socketDidCloseWithError error: Error?) {
    if let error = error {
       print("Server did stop listening with error: \(error.localizedDescription)")
    } else {
       print("Server did stop listening")
    }
}

func server(_ server: OSCUdpServer,
            didReadData data: Data,
            with error: Error) {
    print("Server did read data with error: \(error.localizedDescription)")
}

步骤 4

开始监听数据包

do {
    try server.startListening()
} catch {
    print(error.localizedDescription)
}
UDP Peer

步骤 1

将 OSCKit 导入到您的项目中

import OSCKit

步骤 2

创建一个 peer

let peer = OSCUdpPeer(host: "10.101.130.101",
                      port: 24601,
                      hostPort: 3001)

步骤 3

遵循 peer 的委托协议 OSCUdpPeerDelegate

func peer(_ peer: OSCUdpPeer, 
          didReceivePacket packet: OSCPacket, 
          fromHost host: String, 
          port: UInt16) {
    print("Peer did receive packet from \(host):\(port)")
}

func peer(_ peer: OSCUdpPeer, 
          didReadData data: Data, 
          with error: Error) {
    print("Peer did read data with error: \(error.localizedDescription)")
}

func peer(_ peer: OSCUdpPeer, 
          didSendPacket packet: OSCPacket, 
          fromHost host: String?, 
          port: UInt16?) {
    print("Peer sent packet to \(peer.host):\(peer.hostPort) from \(host):\(port)")
}

func peer(_ peer: OSCUdpPeer, 
          didNotSendPacket packet: OSCPacket, 
          fromHost host: String?, 
          port: UInt16?, 
          error: Error?) {
    print("Peer did not send packet to \(peer.host):\(peer.hostPort) from \(host):\(port)")
}

func peer(_ peer: OSCUdpPeer, 
          socketDidCloseWithError error: Error?) {
    print("Peer Error: \(error.localizedDescription)")
}

步骤 4

创建一个 OSCPacket,例如,一个 OSC 消息

do {
    let message = try OSCMessage(with: "/osc/kit", arguments: [1,
                                                               3.142,
                                                               "hello world!"])
} catch {
    print("Unable to create OSCMessage: \(error.localizedDescription)")
}

步骤 5

发送数据包

peer.send(.message(message))

CoreOSC

OSCKit 由 CoreOSC 提供的基础设施代码支持。 有关 OSCKit 使用的 OSC 对象(例如地址模式、消息和数据包集合)的更详细信息,请将所有查询定向到 CoreOSC

作者

Sammy Smallman - 初始工作 - SammySmallman

另请参阅参与该项目的贡献者列表。

鸣谢