プログラミング言語GOでOSC(Open Sound Control)を動かす
2020/4/19
GO Install OSC
GO Install OSC
概要
プログラミング言語GOでOSC(Open Sound Control)を動かす。実行するプログラムはOSCライブラリのexamplesを流用している。 (ホストPCとしてはubuntuを想定している)
OSCライブラリのインストール
go get github.com/hypebeast/go-osc
# 作業用ディレクトリを設定する
cd $GOPATH/src
mkdir OSC-go
cd OSC-go
OSC受信プログラム
OSCRecv_demo.go
package main
//import "github.com/hypebeast/go-osc/osc"
import (
"fmt"
"github.com/hypebeast/go-osc/osc"
)
func main() {
addr := "0.0.0.0:8000"
d := osc.NewStandardDispatcher()
d.AddMsgHandler("/1/fader1", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/fader2", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/fader3", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/fader4", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/fader5", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/toggle1", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/toggle2", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/toggle3", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
d.AddMsgHandler("/1/toggle4", func(msg *osc.Message) {
osc.PrintMessage(msg)
})
fmt.Println("Listening at:",addr)
server := &osc.Server{
Addr: addr,
Dispatcher:d,
}
server.ListenAndServe()
}
入力ポートとして8000として、OSC受信する。
OSC送信プログラム
OSCSend_demo.go
package main
import "github.com/hypebeast/go-osc/osc"
func main() {
client := osc.NewClient("localhost", 8000)
msg := osc.NewMessage("/1/fader1")
msg.Append(int32(111))
msg.Append(true)
msg.Append("hello")
client.Send(msg)
msg1 := osc.NewMessage("/1/fader2")
msg1.Append(float32(0.789))
client.Send(msg1)
}
出力ポートとして8000として、OSC送信する。
OSC message dump
任意のOSCメッセージを受信できるプログラム:
OSCdump.go
package main
import (
"bufio"
"fmt"
"net"
"os"
"github.com/hypebeast/go-osc/osc"
)
func main() {
addr := "0.0.0.0:8000"
server := &osc.Server{}
conn, err := net.ListenPacket("udp", addr)
if err != nil {
fmt.Println("Couldn't listen: ", err)
}
defer conn.Close()
fmt.Println("OSC msg Dump")
fmt.Println("Press \"q\" to exit")
go func() {
fmt.Println("Start listening on", addr)
for {
packet, err := server.ReceivePacket(conn)
if err != nil {
fmt.Println("Server error: " + err.Error())
os.Exit(1)
}
if packet != nil {
switch packet.(type) {
default:
fmt.Println("Unknow packet type!")
case *osc.Message:
fmt.Printf("-- OSC Message: ")
osc.PrintMessage(packet.(*osc.Message))
case *osc.Bundle:
fmt.Println("-- OSC Bundle:")
bundle := packet.(*osc.Bundle)
for i, message := range bundle.Messages {
fmt.Printf(" -- OSC Message #%d: ", i+1)
osc.PrintMessage(message)
}
}
}
}
}()
reader := bufio.NewReader(os.Stdin)
for {
c, err := reader.ReadByte()
if err != nil {
os.Exit(0)
}
if c == 'q' {
os.Exit(0)
}
}
}
入力ポートとして8000として、OSC受信する。
build
以下でビルドする:
go build OSCRecv_demo.go
go build OSCSend_demo.go
go build OSCdump.go
実行と出力例
./OSCRecv_demo
# TouchOSCからOSCを受信したときの出力
Listening at: 0.0.0.0:8000
/1/fader1 ,f 0.5864979
/1/fader2 ,f 0.53164554
/1/fader2 ,f 1
/1/fader2 ,f 0.98734176
/1/fader2 ,f 0.9704641
/1/fader3 ,f 0.46202534
...
./OSCdump
# TouchOSCからOSCを受信したときの出力
OSC msg Dump
Press "q" to exit
Start listening on 0.0.0.0:8000
-- OSC Message: /1/fader2 ,f 0.6413502
-- OSC Message: /3/xy ,ff 0.33333334 0.32771537
-- OSC Message: /3/xy ,ff 0.6479401 0.6479401
-- OSC Message: /2/push6 ,f 1
-- OSC Message: /2/push6 ,f 0
-- OSC Message: /4/multitoggle/6/2 ,f 1
-- OSC Message: /4/multitoggle/6/6 ,f 1
-- OSC Message: /4/multitoggle/3/4 ,f 1
...
引用情報
Open Sound Control (OSC) library for Golang. Implemented in pure Go.
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「Open Sound Control」カテゴリの記事
- Wio-Terminal/M5Atom/ESP8622/ESP32ボードを共通のスケッチで動かす(v2)(OSC編)(2020.12.26)
- Wio-Terminal/ESP8622/ESP32ボードを共通のスケッチで動かす(OSC編)(2020.07.22)
- Wio-TerminalでWiFiで使う(その4:OSC)(2020.07.13)
- Wio_Lite_RISC-VボードでWiFiを動かす(その3:OSC)(2020.06.23)
- プログラミング言語GOでOSC(Open Sound Control)を動かす(2020.04.19)
コメント