#!/bin/bash VERSION="0.3" LOCK_DIR=/var/lock SIM_EXAMPLE_FILE=./res/test.wav #Laenge der WAV Dateien in Sekunden REC_FILE_TIME=360 #Ordner, ind dem die WAV Dateien abgelegt werden #wenn der Ordner nicht existiert, wird er angelegt REC_DIR=./recordings #Dateiname der WAV Dateien # sums-01.wav, sums-02.wav, ... REC_PREFIX=sums #Ordner in dem die MP3 Dateien abgelegt werden #wenn der Ordner nicht existiert, wird er angelegt UPL_DIR=./upqueue #Dateiname der MP3 Dateien # 20210130101112-sumsi.mp3, 20210130101120-sumsi.mp3, ... UPL_SUFFIX=sumsi usage() { echo "Usage: $0 [-h] (-s|-r|-t) [-C ]" 1>&2; echo -e '\t-h Usage' 1>&2; echo -e '\t-v Version' 1>&2; echo -e '' 1>&2; echo -e '\t-s Simulation' 1>&2; echo -e '\t-r Aufnahme' 1>&2; echo -e '\t-c Konvertierung' 1>&2; echo -e '' 1>&2; echo -e '\t-C Konfiguration laden' 1>&2; echo "" 1>&2; echo "Doku: https://git.hs42.de/hs/sumsel" 1>&2; exit 1; } mode='' lock_mode='' while getopts ":hsrcC:v" options; do case "${options}" in v) echo "$0 version ${VERSION}" 1>&2; exit 1 ;; h) usage ;; "s" | "r" | "c") #simulate mode=${options} ;; C) config=${OPTARG} if [ -f ${config} ]; then . ${config} else echo "config file not found: ${config}" exit fi ;; *) echo "unknown option" usage ;; esac done set_lockfile() { local basename=$(basename "$0") if [ ! -z ${1+x} ]; then basename="${basename}_$1" fi local lock_file="${LOCK_DIR}/${basename}" local random_file=$(mktemp --tmpdir=${LOCK_DIR}) echo $$ > ${random_file} mv -n ${random_file} ${lock_file} if [ -e ${random_file} ]; then false else true fi } del_lockfile() { local basename=$(basename "$0") if [ ! -z ${1+x} ]; then basename="${basename}_$1" fi local lock_file="${LOCK_DIR}/${basename}" rm ${lock_file} } cleanup() { del_lockfile ${lock_mode} exit 1 } check_var_exists() { local var_name=$1 if [[ ! -v ${var_name} ]]; then echo "${var_name} not set" cleanup fi } ctrl_c() { echo "** Trapped CTRL-C" 1>&2; cleanup } simulate() { check_var_exists "REC_DIR" check_var_exists "REC_PREFIX" check_var_exists "SIM_EXAMPLE_FILE" local counter=0 local dst_fn="" mkdir -p ${REC_DIR} echo "Press [CTRL+C] to stop.." 1>&2; trap ctrl_c INT while : do sleep ${REC_FILE_TIME} counter=$[$counter +1] dst_fn="${REC_DIR}/${REC_PREFIX}-${counter}.wav" cp ${SIM_EXAMPLE_FILE} ${dst_fn} done } record() { check_var_exists "REC_DEVICE" check_var_exists "REC_FILE_TIME" check_var_exists "REC_PREFIX" check_var_exists "REC_DIR" mkdir -p ${REC_DIR} trap ctrl_c INT arecord --format=cd --device=${REC_DEVICE} --buffer-size=192000 --max-file-time=${REC_FILE_TIME} --use-strftime ${REC_DIR}/${REC_PREFIX}%Y%m%d%H%M%v.wav } convert() { check_var_exists "REC_DIR" check_var_exists "UPL_DIR" check_var_exists "UPL_SUFFIX" check_var_exists "REMOTE_DIR" mkdir -p ${REC_DIR} mkdir -p ${UPL_DIR} #Alle WAV Files ausser das letzte File. #Das letzte File wird gerade recorded und wird beim naechsten Durchlauf verarbeitet local FILES=$(ls -tr ${REC_DIR} |head -n -1) for F in ${FILES} do #Ermittle ctime des WAV Files local CTIME=$(date -r "${REC_DIR}/${F}" +"%Y%m%d%H%M%S") ffmpeg -i "${REC_DIR}/${F}" -acodec mp3 "${UPL_DIR}/${CTIME}_${UPL_SUFFIX}.mp3" rm "${REC_DIR}/${F}" done rsync -avzh --remove-source-files ${UPL_DIR} ${REMOTE_DIR} } case ${mode} in s) #Simulation lock_mode=record func=simulate ;; r) #Aufnahme lock_mode=record func=record ;; c) #Konvertierung lock_mode=convert func=convert ;; *) echo "mode not set" 1>&2; exit 1 ;; esac if set_lockfile ${lock_mode}; then ${func} del_lockfile ${lock_mode} else echo "LOCK error" 1>&2; exit 1 fi