diff --git a/pkg/osc/osc.go b/pkg/osc/osc.go index c655a15..c8618c7 100644 --- a/pkg/osc/osc.go +++ b/pkg/osc/osc.go @@ -79,6 +79,13 @@ func byteArrayToOSCBytes(bytes []byte) []byte { return oscBytes } +func timeTagToOSCBytes(timeTag OSCTimeTag) []byte { + timeTagBytes := int32ToOSCBytes(timeTag.seconds) + timeTagBytes = append(timeTagBytes, int32ToOSCBytes(timeTag.fractionalSeconds)...) + + return timeTagBytes +} + func argsToBuffer(args []OSCArg) []byte { //TODO(jwetzell): add error handling var argBuffers = []byte{} @@ -256,6 +263,23 @@ func readOSCColor(bytes []byte) (OSCColor, []byte, error) { } return oscColor, bytes[4:], nil } +func readOSCTimeTag(bytes []byte) (OSCTimeTag, []byte, error) { + seconds, bytesAfterSeconds, err := readOSCInt32(bytes) + if err != nil { + return OSCTimeTag{}, bytes, err + } + fractionalSeconds, remainingBytes, err := readOSCInt32(bytesAfterSeconds) + if err != nil { + return OSCTimeTag{}, bytes, err + } + + return OSCTimeTag{ + seconds: seconds, + fractionalSeconds: fractionalSeconds, + }, + remainingBytes, + nil +} func readOSCArg(bytes []byte, oscType string) (OSCArg, []byte, error) { var readArgError error diff --git a/pkg/osc/types.go b/pkg/osc/types.go index f72ca9a..7f91dc5 100644 --- a/pkg/osc/types.go +++ b/pkg/osc/types.go @@ -5,7 +5,7 @@ type OSCPacket interface { } type OSCBundle struct { - TimeTag uint64 + TimeTag OSCTimeTag Contents []OSCPacket } @@ -25,3 +25,8 @@ type OSCColor struct { b uint8 a uint8 } + +type OSCTimeTag struct { + seconds int32 + fractionalSeconds int32 +}