diff --git a/README.md b/README.md index 9385383..6140132 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Barnard includes real-time voice effects that can be applied to your outgoing mi ### Controls - **F12 key**: Cycle through voice effects (configurable hotkey) -- **Configuration**: Your selected effect is saved in `~/.barnard.yaml` +- **Configuration**: Your selected effect is saved in `~/.barnard.toml` ### How It Works Voice effects are applied to your outgoing audio in real-time, after noise suppression and automatic gain control. The effects use various digital signal processing techniques including delay lines, pitch shifting with cubic interpolation, and ring modulation. @@ -52,12 +52,12 @@ Barnard includes real-time noise suppression for microphone input to filter out - **F9 key**: Toggle noise suppression on/off (configurable hotkey) - **Command line**: Use `--noise-suppression` flag to enable at startup - **FIFO command**: Send `noise` command to toggle during runtime -- **Configuration**: Set `noisesuppressionenabled` and `noisesuppressionthreshold` in `~/.barnard.yaml` +- **Configuration**: Set `noisesuppressionenabled` and `noisesuppressionthreshold` in `~/.barnard.toml` ### Configuration Example -```yaml -noisesuppressionenabled: true -noisesuppressionthreshold: 0.02 +```toml +noisesuppressionenabled = true +noisesuppressionthreshold = 0.02 ``` The noise suppression algorithm uses a combination of high-pass filtering and noise gating to reduce unwanted background sounds while preserving voice quality. @@ -124,8 +124,8 @@ Our thanks go out to Tim Cooper for the massive amount of work put into this cli ## Config -By default, the file $HOME/.barnard.yaml will hold the configuration for Barnard. -You can have barnard read another file by using the -c option, like `./barnard -c ~/.anotherbarnard.yaml`. +By default, the file $HOME/.barnard.toml will hold the configuration for Barnard. +You can have barnard read another file by using the -c option, like `./barnard -c ~/.anotherbarnard.toml`. It will be created automatically if it doesn't exist. If you modify the config file while Barnard is running, your changes may be overwritten. @@ -169,7 +169,7 @@ If Jim's volume is set to 0.1, and larry's volume is set to 0.9, lowering the ch You can change the volume for a user once that user has spoken at least once during a session. Attempts to change the volume of a user who has not spoken will be ignored. -If you are unable to hear a user speaking, you can edit the .barnard.yaml file in your home directory, after closing Barnard, and set the volume parameter to 1.0 for a particular user. +If you are unable to hear a user speaking, you can edit the .barnard.toml file in your home directory, after closing Barnard, and set the volume parameter to 1.0 for a particular user. ### Technical diff --git a/config/user_config.go b/config/user_config.go index 76f0f41..cf3ad4b 100644 --- a/config/user_config.go +++ b/config/user_config.go @@ -3,7 +3,7 @@ package config import ( "fmt" "git.stormux.org/storm/barnard/uiterm" - "gopkg.in/yaml.v2" + "github.com/pelletier/go-toml/v2" "git.stormux.org/storm/barnard/gumble/gumble" "io/ioutil" "os" @@ -46,7 +46,7 @@ type eUser struct { func (c *Config) SaveConfig() { var data []byte - data, err := yaml.Marshal(c.config) + data, err := toml.Marshal(c.config) if err != nil { panic(err) } @@ -85,7 +85,7 @@ func (c *Config) LoadConfig() { var data []byte data = readFile(c.fn) if data != nil { - err := yaml.UnmarshalStrict(data, &jc) + err := toml.Unmarshal(data, &jc) if err != nil { fmt.Fprintf(os.Stderr, "Error parsing \"%s\".\n%s\n", c.fn, err.Error()) os.Exit(1) @@ -114,7 +114,7 @@ func (c *Config) LoadConfig() { jc.Username = &username } if c.config.NotifyCommand == nil { - ncmd := string("") + ncmd := string("/usr/share/barnard/barnard-sound.sh \"%event\" \"%who\" \"%what\"") jc.NotifyCommand = &ncmd } if c.config.NoiseSuppressionEnabled == nil { diff --git a/go.mod b/go.mod index 046e016..0b24638 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/kennygrant/sanitize v1.2.4 github.com/nsf/termbox-go v1.1.1 - gopkg.in/yaml.v2 v2.4.0 + github.com/pelletier/go-toml/v2 v2.2.4 ) require ( diff --git a/go.sum b/go.sum index 7f8d50f..5928b0a 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,8 @@ github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/Qd github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/nsf/termbox-go v1.1.1 h1:nksUPLCb73Q++DwbYUBEglYBRPZyoXJdrj5L+TkjyZY= github.com/nsf/termbox-go v1.1.1/go.mod h1:T0cTdVuOwf7pHQNtfhnEbzHbcNyCEcVU4YPpouCbVxo= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -18,7 +20,3 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/main.go b/main.go index e96eda0..d61e3cd 100644 --- a/main.go +++ b/main.go @@ -108,7 +108,7 @@ func main() { password := flag.String("password", "", "the password of the server") insecure := flag.Bool("insecure", false, "skip server certificate verification") certificate := flag.String("certificate", "", "PEM encoded certificate and private key") - cfgfn := flag.String("config", "~/.barnard.yaml", "Path to YAML formatted configuration file") + cfgfn := flag.String("config", "~/.barnard.toml", "Path to TOML formatted configuration file") list_devices := flag.Bool("list_devices", false, "do not connect; instead, list available audio devices and exit") fifo := flag.String("fifo", "", "path of a FIFO from which to read commands") serverSet := false diff --git a/uiterm/key_toml.go b/uiterm/key_toml.go new file mode 100644 index 0000000..ca6d59e --- /dev/null +++ b/uiterm/key_toml.go @@ -0,0 +1,15 @@ +package uiterm + +// MarshalText implements the encoding.TextMarshaler interface for Key +// This allows TOML to serialize Key values as strings +func (i Key) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for Key +// This allows TOML to deserialize strings back into Key values +func (i *Key) UnmarshalText(data []byte) error { + var err error + *i, err = KeyString(string(data)) + return err +}