@@ -2,31 +2,44 @@ package main
22
33import (
44 "context"
5+ "fmt"
56 "os"
67 "os/signal"
78 "time"
89
9- "github.com/noriah/tavis /dsp"
10- "github.com/noriah/tavis /dsp/window"
11- "github.com/noriah/tavis /graphic"
12- "github.com/noriah/tavis /input"
10+ "github.com/noriah/catnip /dsp"
11+ "github.com/noriah/catnip /dsp/window"
12+ "github.com/noriah/catnip /graphic"
13+ "github.com/noriah/catnip /input"
1314
1415 "github.com/pkg/errors"
1516)
1617
17- // Run starts to draw the visualizer on the tcell Screen.
18- func Run (cfg Config ) error {
18+ // Catnip starts to draw the visualizer on the termbox screen.
19+ func Catnip (cfg * Config ) error {
20+
1921 // DrawDelay is the time we wait between ticks to draw.
2022 var drawDelay = time .Second / time .Duration (
2123 int ((cfg .SampleRate / float64 (cfg .SampleSize ))))
2224
23- var audio , err = cfg .InputBackend .Start (input.SessionConfig {
24- Device : cfg .InputDevice ,
25+ var backend , err = initBackend (cfg )
26+ if err != nil {
27+ return err
28+ }
29+
30+ device , err := initDevice (backend , cfg )
31+
32+ if err != nil {
33+ return err
34+ }
35+
36+ audio , err := backend .Start (input.SessionConfig {
37+ Device : device ,
2538 FrameSize : cfg .ChannelCount ,
2639 SampleSize : cfg .SampleSize ,
2740 SampleRate : cfg .SampleRate ,
2841 })
29- defer cfg . InputBackend .Close ()
42+ defer backend .Close ()
3043
3144 if err != nil {
3245 return errors .Wrap (err , "failed to start the input backend" )
@@ -109,3 +122,40 @@ func Run(cfg Config) error {
109122 }
110123 }
111124}
125+
126+ func initBackend (cfg * Config ) (input.Backend , error ) {
127+
128+ var backend = input .FindBackend (cfg .Backend )
129+ if backend == nil {
130+ return nil , fmt .Errorf ("backend not found: %q" , cfg .Backend )
131+ }
132+
133+ if err := backend .Init (); err != nil {
134+ return nil , errors .Wrap (err , "failed to initialize input backend" )
135+ }
136+
137+ return backend , nil
138+ }
139+
140+ func initDevice (backend input.Backend , cfg * Config ) (input.Device , error ) {
141+ if cfg .Device == "" {
142+ var def , err = backend .DefaultDevice ()
143+ if err != nil {
144+ return nil , errors .Wrap (err , "failed to get default device" )
145+ }
146+ return def , nil
147+ }
148+
149+ var devices , err = backend .Devices ()
150+ if err != nil {
151+ return nil , errors .Wrap (err , "failed to get devices" )
152+ }
153+
154+ for idx := range devices {
155+ if devices [idx ].String () == cfg .Device {
156+ return devices [idx ], nil
157+ }
158+ }
159+
160+ return nil , errors .Errorf ("device %q not found; check list-devices" , cfg .Device )
161+ }
0 commit comments