aboutsummaryrefslogtreecommitdiff
path: root/scripts/ow-dictate.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/ow-dictate.sh')
-rwxr-xr-xscripts/ow-dictate.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/ow-dictate.sh b/scripts/ow-dictate.sh
new file mode 100755
index 0000000..db7e9e4
--- /dev/null
+++ b/scripts/ow-dictate.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# ~/.mycfg/scripts/ow-dictate.sh — OpenAI Whisper API version
+
+PIDFILE="/tmp/dictate.pid"
+AUDIO="/tmp/dictate.wav"
+NOTIFFILE="/tmp/dictate.notif_id"
+
+NID=""
+[ -f "$NOTIFFILE" ] && NID=$(cat "$NOTIFFILE")
+notify() {
+ local args=()
+ [ -n "$NID" ] && args+=(-r "$NID")
+ NID=$(notify-send -p "${args[@]}" "$@")
+ echo "$NID" > "$NOTIFFILE"
+}
+
+if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
+ # ── STOP recording, send to API, type ──
+ kill "$(cat "$PIDFILE")"
+ rm "$PIDFILE"
+
+ notify -t 2000 "Dictation" "Sending to OpenAI..."
+
+ API_KEY=$(pass show openai.com/api.openai.com/apikey)
+
+ RESPONSE=$(curl -s https://api.openai.com/v1/audio/transcriptions \
+ -H "Authorization: Bearer $API_KEY" \
+ -F "file=@$AUDIO" \
+ -F "model=whisper-1" \
+ -F "language=en" \
+ -F "response_format=json")
+
+ TEXT=$(echo "$RESPONSE" | jq -r '.text // empty')
+
+ if [ -n "$TEXT" ]; then
+ xdotool type --clearmodifiers -- "$TEXT"
+ notify -t 1000 "Dictation" "Done"
+ else
+ ERROR=$(echo "$RESPONSE" | jq -r '.error.message // "Unknown error"')
+ notify -t 3000 "Dictation" "Failed: $ERROR"
+ fi
+
+ rm -f "$AUDIO"
+else
+ # ── START recording ──
+ notify -t 0 -u low "Dictation" "Recording..."
+
+ arecord -f S16_LE -r 16000 -c 1 -t wav "$AUDIO" &
+ echo $! > "$PIDFILE"
+fi