]> Sergey Matveev's repositories - vors.git/blobdiff - cmd/vad/main.go
vors-vad automatically starts rec
[vors.git] / cmd / vad / main.go
index 20b117091362536f9578520994f9dc623dcf1c16f214ac434e1fe92528e02aa6..c207d79c393e80fd68afb1d164856dc0d956a46f875a2a2b697bcc4f75b6cd1d 100644 (file)
@@ -19,28 +19,46 @@ import (
        "flag"
        "fmt"
        "io"
+       "log"
        "os"
        "strconv"
 
        vors "go.stargrave.org/vors/internal"
 )
 
+func usage() {
+       fmt.Fprintf(os.Stderr, "Usage: vors-vad [-rec ...] THRESHOLD\n")
+       flag.PrintDefaults()
+}
+
 func main() {
+       recCmd := flag.String("rec", "rec "+vors.SoxParams, "rec command")
+       flag.Usage = usage
        flag.Parse()
+       log.SetFlags(log.Lmicroseconds | log.Lshortfile)
        if len(flag.Args()) != 1 {
-               fmt.Fprintf(os.Stderr, "Usage: rec | vors-vad THRES\n")
+               usage()
                os.Exit(1)
        }
        thres, err := strconv.ParseUint(flag.Arg(0), 10, 64)
        if err != nil {
-               panic(err)
+               log.Fatal(err)
        }
        buf := make([]byte, 2*vors.FrameLen)
        pcm := make([]int16, vors.FrameLen)
+       cmd := vors.MakeCmd(*recCmd)
+       mic, err := cmd.StdoutPipe()
+       if err != nil {
+               log.Fatal(err)
+       }
+       err = cmd.Start()
+       if err != nil {
+               log.Fatal(err)
+       }
        var rms uint64
        var i int
        for {
-               _, err = io.ReadFull(os.Stdin, buf)
+               _, err = io.ReadFull(mic, buf)
                if err != nil {
                        panic(err)
                }
@@ -49,7 +67,7 @@ func main() {
                }
                rms = vors.RMS(pcm)
                if rms > thres {
-                       println(rms)
+                       fmt.Println(rms)
                }
        }
 }