aboutsummaryrefslogtreecommitdiff
path: root/record-voice
diff options
context:
space:
mode:
Diffstat (limited to 'record-voice')
-rwxr-xr-xrecord-voice82
1 files changed, 82 insertions, 0 deletions
diff --git a/record-voice b/record-voice
new file mode 100755
index 0000000..ce68cae
--- /dev/null
+++ b/record-voice
@@ -0,0 +1,82 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+OUTPUT="voice"
+BITRATE="128k"
+FORMAT="mp3"
+
+usage() {
+ echo "Usage: $0 -o output_name [options]"
+ echo
+ echo "Options:"
+ echo " -o NAME Output filename (without extension)"
+ echo " -b BITRATE MP3 bitrate"
+ echo " -f FORMAT Output format: mp3 or wav"
+ echo " -h Show this help message"
+ echo
+ echo "Available MP3 bitrates:"
+ echo " 64k Low quality / smallest files"
+ echo " 96k Good for speech"
+ echo " 128k Very good speech quality (default)"
+ echo " 192k High quality"
+ echo " 320k Maximum MP3 quality"
+ echo
+ echo "Examples:"
+ echo " $0 -o meeting"
+ echo " $0 -o podcast -b 192k"
+ echo " $0 -o lecture -f wav"
+ echo
+ exit 0
+}
+
+while getopts "o:b:f:h" opt; do
+ case "$opt" in
+ o) OUTPUT="$OPTARG" ;;
+ b) BITRATE="$OPTARG" ;;
+ f) FORMAT="$OPTARG" ;;
+ h) usage ;;
+ *) usage ;;
+ esac
+done
+
+FORMAT=$(echo "$FORMAT" | tr '[:upper:]' '[:lower:]')
+
+case "$FORMAT" in
+ mp3)
+ FILE="${OUTPUT}.mp3"
+
+ echo "Recording MP3 to: $FILE"
+ echo "Bitrate: $BITRATE"
+ echo "Press Ctrl+C to stop."
+ echo
+
+ ffmpeg \
+ -f pulse \
+ -i default \
+ -ac 1 \
+ -c:a libmp3lame \
+ -b:a "$BITRATE" \
+ "$FILE"
+ ;;
+
+ wav)
+ FILE="${OUTPUT}.wav"
+
+ echo "Recording WAV to: $FILE"
+ echo "Press Ctrl+C to stop."
+ echo
+
+ ffmpeg \
+ -f pulse \
+ -i default \
+ -ac 1 \
+ "$FILE"
+ ;;
+
+ *)
+ echo "Error: unsupported format '$FORMAT'"
+ echo "Supported formats: mp3, wav"
+ exit 1
+ ;;
+esac