diff --git a/snowboy-2022/build.sh b/snowboy-2022/build.sh index 5dd1a9d..d88ca59 100644 --- a/snowboy-2022/build.sh +++ b/snowboy-2022/build.sh @@ -17,21 +17,25 @@ if ! docker images | grep snowboy-pmdl.*latest &> /dev/null; then popd fi -export HOTWORD="${HOTWORD:-default_hotword}" +export HOTWORD="${HOTWORD:-${TRAIN:-default_hotword}}" if [ -n "$TRAIN" ] || [ ! -d ./model ] || [ ! -f ./model/$HOTWORD.pmdl ]; then mkdir -p model pushd model + rm -f ./record{1,2,3}.wav || true echo "record 3 instances of '$HOTWORD'" >&2 for i in 1 2 3; do - read -p "ready? ctrl-c when done" - rec \ - -r 16000 \ - -c 1 \ - -b 16 \ - -e signed-integer \ - -t wav \ - record$i.wav + read -p "[$i/3] ready? you get 3 seconds." + ( + timeout 3 rec \ + -r 16000 \ + -c 1 \ + -b 16 \ + -e signed-integer \ + -t wav \ + record$i.wav + ) || true + ls record$i.wav done popd @@ -41,6 +45,9 @@ if [ -n "$TRAIN" ] || [ ! -d ./model ] || [ ! -f ./model/$HOTWORD.pmdl ]; then -v "$(realpath ./model)":/snowboy-master/examples/Python/model \ snowboy-pmdl:latest mv ./model/hotword.pmdl ./model/$HOTWORD.pmdl + if [ -n "$TRAIN" ]; then + exit 0 + fi fi if false; then @@ -71,7 +78,11 @@ else hotword="$(realpath ./model/$HOTWORD.pmdl)" GOPROXY= go build -o snowboy if [ -z "$PUSH" ]; then - ./snowboy -m "$hotword" -r "$resources" -s 0.5 "$@" + ./snowboy \ + -ms "$hotword/$HOTWORD" \ + -r "$resources" \ + -s 0.5 \ + "$@" else echo ' FROM registry-app.eng.qops.net:5001/imported/alpine:3.16 diff --git a/snowboy-2022/main.go b/snowboy-2022/main.go index 980550b..69f42af 100644 --- a/snowboy-2022/main.go +++ b/snowboy-2022/main.go @@ -97,7 +97,8 @@ func main() { defer d.Close() // set the handlers - for _, modelStr := range strings.Split(*models, ",") { + for _, modelStrC := range strings.Split(*models, ",") { + modelStr := modelStrC d.HandleFunc(snowboy.NewHotword(path.Dir(modelStr), float32(*sensitivity)), func(string) { if !*quiet { log.Println(path.Base(modelStr)) diff --git a/snowboy-2022/model/default_hotword.pmdl b/snowboy-2022/model/default_hotword.pmdl new file mode 100644 index 0000000..e9a9a94 Binary files /dev/null and b/snowboy-2022/model/default_hotword.pmdl differ diff --git a/snowboy-2022/model/down.pmdl b/snowboy-2022/model/down.pmdl new file mode 100644 index 0000000..c7c69fa Binary files /dev/null and b/snowboy-2022/model/down.pmdl differ diff --git a/snowboy-2022/model/jump.pmdl b/snowboy-2022/model/jump.pmdl new file mode 100644 index 0000000..c46aa87 Binary files /dev/null and b/snowboy-2022/model/jump.pmdl differ diff --git a/snowboy-2022/model/left.pmdl b/snowboy-2022/model/left.pmdl new file mode 100644 index 0000000..875f8d4 Binary files /dev/null and b/snowboy-2022/model/left.pmdl differ diff --git a/snowboy-2022/model/right.pmdl b/snowboy-2022/model/right.pmdl new file mode 100644 index 0000000..bb4530c Binary files /dev/null and b/snowboy-2022/model/right.pmdl differ diff --git a/snowboy-2022/model/up.pmdl b/snowboy-2022/model/up.pmdl index 51646cd..78cb0ab 100644 Binary files a/snowboy-2022/model/up.pmdl and b/snowboy-2022/model/up.pmdl differ diff --git a/snowboy-2022/pyautogui.sh b/snowboy-2022/pyautogui.sh index 8744d0a..e736cb2 100644 --- a/snowboy-2022/pyautogui.sh +++ b/snowboy-2022/pyautogui.sh @@ -1,17 +1,18 @@ #! /bin/bash main() { + cleanup() { + killall -9 $(jobs -p) + killall snowboy + } + trap cleanup EXIT + if [ ! -e /tmp/stt.fifo ]; then mkfifo /tmp/stt.fifo fi - cleanup() { - killall -9 $(jobs -p) - } - trap cleanup EXIT - echo starting in - for ((i=3; i>0; i--)); do + for ((i=2; i>0; i--)); do echo "...$i..." sleep 1 done @@ -26,7 +27,7 @@ main() { )) echo models=$models - ./snowboy -s .5 -r resources.res -ms $models "$@" > /tmp/stt.fifo & + ./snowboy -r resources.res -ms $models "$@" > /tmp/stt.fifo & python3 -c ' import pyautogui @@ -34,25 +35,31 @@ import time keys = set() -def press(key): - hold(key) - time.sleep(0.25) - release(key) +def toggle(key): + global keys + if key in keys: + release(key) + else: + hold(key) def hold(key): global keys + for keyin in [todrop for todrop in keys]: + if keyin != key: + release(keyin) + keys = set() keys.add(key) + print() + print("pressing", key) + print() pyautogui.keyDown(key) def release(key): + print() + print("releasing", key) + print() pyautogui.keyUp(key) -def release_all(): - global keys - for key in keys: - release(key) - keys = set() - def main(): with open("/tmp/stt.fifo", "r") as q: for line in q: @@ -64,7 +71,7 @@ print(mapping) def handle(cmd): global mapping - press(mapping.get(cmd)) + hold(mapping.get(cmd)) main() ' diff --git a/snowboy-2022/pyautogui.yaml b/snowboy-2022/pyautogui.yaml index 5044cf0..7bd2bac 100644 --- a/snowboy-2022/pyautogui.yaml +++ b/snowboy-2022/pyautogui.yaml @@ -1 +1,5 @@ up: w +down: s +left: a +right: d +jump: w