feat: accept first argument as audio by defauilt sonic pi

This commit is contained in:
Krzysztof kuhy Rudnicki 2025-10-26 16:33:37 +01:00
parent 6e988cbe09
commit 84cf151e02

View File

@ -70,6 +70,24 @@ find_repl() {
fi fi
} }
# Ensure TRACK_FILE is an absolute path so REPL can always find it
resolve_track_file() {
# If already absolute, keep as-is
case "$TRACK_FILE" in
/*) : ;;
*)
if require_cmd realpath; then
TRACK_FILE="$(realpath -m "$TRACK_FILE")"
elif require_cmd readlink; then
# Some systems support -f
TRACK_FILE="$(readlink -f "$TRACK_FILE" 2>/dev/null || printf "%s/%s" "$(cd "$(dirname "$TRACK_FILE")" && pwd)" "$(basename "$TRACK_FILE")")"
else
TRACK_FILE="$(cd "$(dirname "$TRACK_FILE")" && pwd)/$(basename "$TRACK_FILE")"
fi
;;
esac
}
# Start Sonic Pi headlessly using the built-in REPL only # Start Sonic Pi headlessly using the built-in REPL only
headless_play() { headless_play() {
find_repl find_repl
@ -95,26 +113,34 @@ headless_play() {
usage() { usage() {
cat <<EOF cat <<EOF
Usage: $(basename "$0") [--file path/to/track.rb] [--duration SECONDS] Usage: $(basename "$0") [path/to/track.rb] [--duration SECONDS]
Defaults: Defaults:
--file $TRACK_FILE track file $TRACK_FILE
--duration run until Ctrl+C --duration run until Ctrl+C
(headless only) (headless only)
EOF EOF
} }
parse_args() { parse_args() {
local saw_file="false"
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
-f|--file)
TRACK_FILE="$2"; shift 2 ;;
-d|--duration) -d|--duration)
DURATION="$2"; shift 2 ;; DURATION="$2"; shift 2 ;;
-h|--help) -h|--help)
usage; exit 0 ;; usage; exit 0 ;;
--)
shift; break ;;
-*)
echo "Unknown option: $1" >&2; usage; exit 1 ;;
*) *)
echo "Unknown argument: $1" >&2; usage; exit 1 ;; if [[ "$saw_file" == "false" ]]; then
TRACK_FILE="$1"; saw_file="true"; shift
else
echo "Unexpected extra argument: $1" >&2; usage; exit 1
fi
;;
esac esac
done done
} }
@ -125,6 +151,7 @@ main() {
echo "Track file not found: $TRACK_FILE" >&2 echo "Track file not found: $TRACK_FILE" >&2
exit 1 exit 1
fi fi
resolve_track_file
install_sonic_pi install_sonic_pi
headless_play headless_play
} }