obs example now reads conn info from toml.

vm, obs connect logic moved into separate functions.

README added for obs example.
This commit is contained in:
onyx-and-iris 2022-09-18 05:38:22 +01:00
parent 2533f1c162
commit c05bf500ee
4 changed files with 73 additions and 7 deletions

19
examples/obs/README.md Normal file
View File

@ -0,0 +1,19 @@
## Requirements
- [OBS Studio](https://obsproject.com/)
- [GOOBS Go Client for Websocket v5](https://github.com/andreykaipov/goobs)
## About
A simple demonstration showing how to sync OBS scene switches to Voicemeeter states. The script assumes you have connection info saved in
a config file named `config.toml` placed next to `main.go`. It also assumes you have scenes named `START` `BRB` `END` and `LIVE`.
A valid `config.toml` file might look like this:
```toml
[connection]
Host="localhost"
Port=4455
Password="mystrongpass"
```

View File

@ -3,6 +3,7 @@ module main
go 1.18 go 1.18
require ( require (
github.com/BurntSushi/toml v1.2.0
github.com/andreykaipov/goobs v0.10.0 github.com/andreykaipov/goobs v0.10.0
github.com/onyx-and-iris/voicemeeter-api-go v1.7.0 github.com/onyx-and-iris/voicemeeter-api-go v1.7.0
) )

View File

@ -1,3 +1,5 @@
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/andreykaipov/goobs v0.10.0 h1:wa4CxbYu/NqwUmx5E4/baDqYRYEmfHwg2T23RAg3jlU= github.com/andreykaipov/goobs v0.10.0 h1:wa4CxbYu/NqwUmx5E4/baDqYRYEmfHwg2T23RAg3jlU=
github.com/andreykaipov/goobs v0.10.0/go.mod h1:EqG73Uu/4npyhXIWWszgRelNkEeIz+d0slUT6NKWYs4= github.com/andreykaipov/goobs v0.10.0/go.mod h1:EqG73Uu/4npyhXIWWszgRelNkEeIz+d0slUT6NKWYs4=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=

View File

@ -4,11 +4,14 @@ import (
"fmt" "fmt"
"log" "log"
"time" "time"
"os"
"github.com/onyx-and-iris/voicemeeter-api-go" "github.com/onyx-and-iris/voicemeeter-api-go"
"github.com/andreykaipov/goobs" "github.com/andreykaipov/goobs"
"github.com/andreykaipov/goobs/api/events" "github.com/andreykaipov/goobs/api/events"
"github.com/BurntSushi/toml"
) )
func onStart(vm *voicemeeter.Remote) { func onStart(vm *voicemeeter.Remote) {
@ -39,18 +42,13 @@ func onEnd(vm *voicemeeter.Remote) {
} }
func main() { func main() {
vm, err := voicemeeter.NewRemote("potato", 0) vm, err := vmConnect()
if err != nil {
log.Fatal(err)
}
err = vm.Login()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
defer vm.Logout() defer vm.Logout()
obs, err := goobs.New("localhost:4455", goobs.WithPassword("mystrongpass")) obs, err := obsConnect()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -79,3 +77,49 @@ func main() {
time.Sleep(30 * time.Second) time.Sleep(30 * time.Second)
} }
func vmConnect() (*voicemeeter.Remote, error) {
vm, err := voicemeeter.NewRemote("potato", 0)
if err != nil {
return nil, err
}
err = vm.Login()
if err != nil {
return nil, err
}
return vm, nil
}
func obsConnect() (*goobs.Client, error) {
type (
connection struct {
Host string
Port int
Password string
}
config struct {
Connection map[string]connection
}
)
f := "config.toml"
if _, err := os.Stat(f); err != nil {
f = "./config.toml"
}
var c config
_, err := toml.DecodeFile(f, &c.Connection)
if err != nil {
return nil, err
}
conn := c.Connection["connection"]
obs, err := goobs.New(fmt.Sprintf("%s:%d", conn.Host, conn.Port), goobs.WithPassword(conn.Password))
if err != nil {
return nil, err
}
return obs, nil
}