"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)
}
}
rms = vors.RMS(pcm)
if rms > thres {
- println(rms)
+ fmt.Println(rms)
}
}
}