@@ -20,7 +20,9 @@ type Remote struct {
20
20
Recorder * recorder
21
21
Midi * midi_t
22
22
23
- pooler * pooler
23
+ pooler * pooler
24
+ timeout int
25
+ bits int
24
26
}
25
27
26
28
// String implements the fmt.stringer interface
@@ -31,7 +33,7 @@ func (r *Remote) String() string {
31
33
// Login logs into the API
32
34
// then it intializes the pooler
33
35
func (r * Remote ) Login () error {
34
- err := login (r .Kind .Name )
36
+ err := login (r .Kind .Name , r . timeout , r . bits )
35
37
if err != nil {
36
38
return err
37
39
}
@@ -57,12 +59,10 @@ func (r *Remote) InitPooler() {
57
59
58
60
// Run launches the Voicemeeter GUI for a kind.
59
61
func (r * Remote ) Run (kindId string ) error {
60
- err := runVoicemeeter (kindId )
62
+ err := runVoicemeeter (kindId , r . bits )
61
63
if err != nil {
62
64
return err
63
65
}
64
- time .Sleep (time .Second )
65
- clear ()
66
66
return nil
67
67
}
68
68
@@ -173,6 +173,7 @@ type remoteBuilder interface {
173
173
makeDevice () remoteBuilder
174
174
makeRecorder () remoteBuilder
175
175
makeMidi () remoteBuilder
176
+ setDefaults () remoteBuilder
176
177
Build () remoteBuilder
177
178
Get () * Remote
178
179
}
@@ -212,7 +213,7 @@ func (b *genericBuilder) setKind() remoteBuilder {
212
213
// makeStrip makes a strip slice and assigns it to remote.Strip
213
214
// []iStrip comprises of both physical and virtual strip types
214
215
func (b * genericBuilder ) makeStrip () remoteBuilder {
215
- log .Info ("building strip" )
216
+ log .Debug ("building strip" )
216
217
strip := make ([]iStrip , b .k .NumStrip ())
217
218
for i := 0 ; i < b .k .NumStrip (); i ++ {
218
219
if i < b .k .PhysIn {
@@ -228,7 +229,7 @@ func (b *genericBuilder) makeStrip() remoteBuilder {
228
229
// makeBus makes a bus slice and assigns it to remote.Bus
229
230
// []t_bus comprises of both physical and virtual bus types
230
231
func (b * genericBuilder ) makeBus () remoteBuilder {
231
- log .Info ("building bus" )
232
+ log .Debug ("building bus" )
232
233
bus := make ([]iBus , b .k .NumBus ())
233
234
for i := 0 ; i < b .k .NumBus (); i ++ {
234
235
if i < b .k .PhysOut {
@@ -243,7 +244,7 @@ func (b *genericBuilder) makeBus() remoteBuilder {
243
244
244
245
// makeButton makes a button slice and assigns it to remote.Button
245
246
func (b * genericBuilder ) makeButton () remoteBuilder {
246
- log .Info ("building button" )
247
+ log .Debug ("building button" )
247
248
button := make ([]button , 80 )
248
249
for i := 0 ; i < 80 ; i ++ {
249
250
button [i ] = newButton (i )
@@ -254,39 +255,46 @@ func (b *genericBuilder) makeButton() remoteBuilder {
254
255
255
256
// makeCommand makes a command type and assigns it to remote.Command
256
257
func (b * genericBuilder ) makeCommand () remoteBuilder {
257
- log .Info ("building command" )
258
+ log .Debug ("building command" )
258
259
b .r .Command = newCommand ()
259
260
return b
260
261
}
261
262
262
263
// makeVban makes a vban type and assigns it to remote.Vban
263
264
func (b * genericBuilder ) makeVban () remoteBuilder {
264
- log .Info ("building vban" )
265
+ log .Debug ("building vban" )
265
266
b .r .Vban = newVban (b .k )
266
267
return b
267
268
}
268
269
269
270
// makeDevice makes a device type and assigns it to remote.Device
270
271
func (b * genericBuilder ) makeDevice () remoteBuilder {
271
- log .Info ("building device" )
272
+ log .Debug ("building device" )
272
273
b .r .Device = newDevice ()
273
274
return b
274
275
}
275
276
276
277
// makeRecorder makes a recorder type and assigns it to remote.Recorder
277
278
func (b * genericBuilder ) makeRecorder () remoteBuilder {
278
- log .Info ("building recorder" )
279
+ log .Debug ("building recorder" )
279
280
b .r .Recorder = newRecorder ()
280
281
return b
281
282
}
282
283
283
284
// makeMidi makes a midi type and assigns it to remote.Midi
284
285
func (b * genericBuilder ) makeMidi () remoteBuilder {
285
- log .Info ("building midi" )
286
+ log .Debug ("building midi" )
286
287
b .r .Midi = newMidi ()
287
288
return b
288
289
}
289
290
291
+ // setDefaults sets defaults for optional members
292
+ func (b * genericBuilder ) setDefaults () remoteBuilder {
293
+ b .r .bits = 64
294
+ b .r .timeout = 2
295
+ return b
296
+ }
297
+
290
298
// Get returns a fully constructed remote type for a kind
291
299
func (b * genericBuilder ) Get () * Remote {
292
300
return & b .r
@@ -306,7 +314,8 @@ func (basb *genericBuilder) Build() remoteBuilder {
306
314
makeCommand ().
307
315
makeVban ().
308
316
makeDevice ().
309
- makeMidi ()
317
+ makeMidi ().
318
+ setDefaults ()
310
319
}
311
320
312
321
// bananaBuilder represents a builder specific to banana type
@@ -324,7 +333,8 @@ func (banb *bananaBuilder) Build() remoteBuilder {
324
333
makeVban ().
325
334
makeDevice ().
326
335
makeRecorder ().
327
- makeMidi ()
336
+ makeMidi ().
337
+ setDefaults ()
328
338
}
329
339
330
340
// potatoBuilder represents a builder specific to potato type
@@ -342,22 +352,39 @@ func (potb *potatoBuilder) Build() remoteBuilder {
342
352
makeVban ().
343
353
makeDevice ().
344
354
makeRecorder ().
345
- makeMidi ()
355
+ makeMidi ().
356
+ setDefaults ()
346
357
}
347
358
348
359
var (
349
360
vmsync bool
350
361
vmdelay int
351
362
)
352
363
364
+ type Option func (* Remote )
365
+
366
+ func WithTimeout (timeout int ) Option {
367
+ return func (r * Remote ) {
368
+ r .timeout = timeout
369
+ }
370
+ }
371
+
372
+ func WithBits (bits int ) Option {
373
+ return func (r * Remote ) {
374
+ if bits == 32 || bits == 64 {
375
+ r .bits = bits
376
+ }
377
+ }
378
+ }
379
+
353
380
func init () {
354
381
log .SetOutput (os .Stdout )
355
382
log .SetLevel (log .WarnLevel )
356
383
}
357
384
358
385
// NewRemote returns a Remote type for a kind
359
386
// this is the interface entry point
360
- func NewRemote (kindId string , delay int ) (* Remote , error ) {
387
+ func NewRemote (kindId string , delay int , opts ... Option ) (* Remote , error ) {
361
388
kind , ok := kindMap [kindId ]
362
389
if ! ok {
363
390
err := fmt .Errorf ("unknown Voicemeeter kind '%s'" , kindId )
@@ -380,5 +407,11 @@ func NewRemote(kindId string, delay int) (*Remote, error) {
380
407
director .SetBuilder (& potatoBuilder {genericBuilder {kind , Remote {}}})
381
408
}
382
409
director .Construct ()
383
- return director .Get (), nil
410
+ r := director .Get ()
411
+
412
+ for _ , opt := range opts {
413
+ opt (r )
414
+ }
415
+
416
+ return r , nil
384
417
}
0 commit comments