https://github.com/akiyukiokayasu/osc
OSC (Open Sound Control) package for Go.
https://github.com/akiyukiokayasu/osc
go golang opensoundcontrol osc
Last synced: about 1 month ago
JSON representation
OSC (Open Sound Control) package for Go.
- Host: GitHub
- URL: https://github.com/akiyukiokayasu/osc
- Owner: AkiyukiOkayasu
- License: apache-2.0
- Created: 2019-11-04T05:29:28.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-08-01T16:00:27.000Z (almost 6 years ago)
- Last Synced: 2025-02-03T04:34:30.936Z (over 1 year ago)
- Topics: go, golang, opensoundcontrol, osc
- Language: Go
- Homepage:
- Size: 116 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# osc
OSC (Open Sound Control) package for Go.
A part of The [Open Sound Control 1.0 Specification](http://opensoundcontrol.org/spec-1_0) has been implemented in pure Go.
You can work with OSC in macOS, Windows, Linux (also work with Raspberry Pi).
## Features
### Type
These types are supported.
- int32
- float32
- string
The other types are NOT supported.
### Message or Bundle
Only OSC Message is implemented.
OSC Bundle is NOT supported.
## Install
```bash
go get github.com/AkiyukiOkayasu/osc
```
## Usage example
### Send
```Go
package main
import (
"log"
"github.com/AkiyukiOkayasu/osc"
)
const (
ip string = "127.0.0.1" // You can also use "localhost"
port int = 8080
address string = "/test"
)
func main() {
sender := osc.NewSender(ip, port)
message := osc.NewMessage(address)
// Add OSC arguments by type
message.AddInt(123)
message.AddFloat(3.14)
message.AddString("foo")
// Send OSC
if err := sender.Send(message); err != nil {
log.Fatalln(err)
}
}
```
### Receive
```Go
package main
import (
"context"
"fmt"
"time"
"github.com/AkiyukiOkayasu/osc"
)
const port int = 8080
func main() {
// context to cancel OSC receiving gorouting
c := context.Background()
ctx, cancel := context.WithCancel(c)
// OSC handler for /foo
mux := osc.NewServeMux()
mux.Handle("/foo", func(m *osc.Message) {
fmt.Println("OSC Address: " + m.Address())
for _, a := range m.Arguments {
switch a.Type() {
case 'i':
if v, ok := a.Int(); ok {
fmt.Printf("Foo Int: %d\n", v)
}
case 'f':
if v, ok := a.Float(); ok {
fmt.Printf("Foo Float: %3f\n", v)
}
case 's':
if v, ok := a.String(); ok {
fmt.Println("Foo String: " + v)
}
default:
fmt.Printf("Unexpected type: %v\n", a.Type())
}
}
})
// Another OSC handler for /bar
mux.Handle("/bar", func(m *osc.Message) {
fmt.Println("OSC Address: " + m.Address())
for _, a := range m.Arguments {
switch a.Type() {
case 'i':
if v, ok := a.Int(); ok {
fmt.Printf("Bar Int: %d\n", v)
}
case 'f':
if v, ok := a.Float(); ok {
fmt.Printf("Bar Float: %3f\n", v)
}
case 's':
if v, ok := a.String(); ok {
fmt.Println("Bar String: " + v)
}
default:
fmt.Printf("Unexpected type: %v\n", a.Type())
}
}
})
r := osc.NewReceiver(port, *mux)
go r.Receive(ctx) // Start OSC receiving
// Something to do...
time.Sleep(30 * time.Second) // Sleep 30 seconds
cancel() // Stop receiving OSC
}
```
## Command line OSC tool
gosc is a command line tool to send OSC.
### Send
```bash
gosc send localhost 8080 /test 123 3.14 foo
```
Any number of OSC arguments can be added.
Type is automatically determined (int32, float32, string only).
## Contribution
Contributions are welcome.
Please send a pull request if you have any ideas.
## LICENSE
Apache 2.0
[LICENSE](LICENSE)