Compare commits
9 Commits
f0bd9a3f58
...
v0.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 753f6e1782 | |||
| 89844ef368 | |||
| 13e6615435 | |||
| b6f985a323 | |||
| 69b70c83d7 | |||
| 3d4b98a866 | |||
| 22fe3daf99 | |||
| 19e6bb8250 | |||
| 18ff13e376 |
39
README.md
39
README.md
@@ -38,26 +38,27 @@ git clone https://git.hs42.de/hs/sumsel.git
|
||||
cd /sumsel
|
||||
cp sumsel.conf.dist sumsel.conf
|
||||
```
|
||||
Anschliessend Variablen in ./sumsel.conf setzen.
|
||||
Anschliessend Variablen in ./sumsel.conf setzen:
|
||||
| Variable | Optional/Required | Bedeutung | Default |
|
||||
| ------------------------ | ----------------- | ----------------------------------------------- | ----------------------------------------- |
|
||||
| REC_DEVICE | required | Adresse der USB Soundkarte | plughw:1,0 |
|
||||
| REMOTE_DIR | required | Zielordner auf dem entfernten Server | <remote_user>@<remote_host>:<remote_path> |
|
||||
| REF_FILE_TIME | optional | Laenge einer WAV Datei in Sekunden | 360 |
|
||||
| REC_DIR | optional | Ordner, ind dem die WAV Dateien abgelegt werden | ./recordings |
|
||||
| REC_PREFIX | optional | Prefix Dateiname WAV Dateien | sums |
|
||||
| UPL_DIR | optional | Ordner in dem die MP3 Dateien abgelegt werden | ./upqueue |
|
||||
| UPL_SUFFIX | optional | Ordner in dem die MP3 Dateien abgelegt werden | sumsi |
|
||||
|
||||
## Betrieb
|
||||
|
||||
### Endloses Aufnehmen
|
||||
| Kommando | Aktion |
|
||||
| ------------ | ------------------------ |
|
||||
| sumsel.sh -s | Simulieren |
|
||||
| sumsel.sh -r | Aufnehmen |
|
||||
| sumsel.sh -c | Konvertieren + Hochladen |
|
||||
|
||||
```
|
||||
pi@raspi:~> ./record.sh
|
||||
```
|
||||
|
||||
### Endloses Simulieren
|
||||
|
||||
```
|
||||
pi@raspi:~> ./simulate.sh
|
||||
```
|
||||
|
||||
### Konvertieren und rsync Upload
|
||||
|
||||
Einplanung über crond
|
||||
|
||||
```
|
||||
pi@raspi:~> ./convert.sh
|
||||
```
|
||||
### GIT commands
|
||||
* git status
|
||||
* git add ...
|
||||
* git commit -m "..."
|
||||
* git push origin master
|
||||
|
||||
26
convert.sh
26
convert.sh
@@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
. ./sumsel.conf
|
||||
. ./sumsel_functions.incl
|
||||
|
||||
if set_lockfile;
|
||||
then
|
||||
#Alle WAV Files ausser das letzte File.
|
||||
#Das letzte File wird gerade recorded und wird beim naechsten Durchlauf verarbeitet
|
||||
FILES=$(ls -tr ${REC_DIR} |head -n -1)
|
||||
|
||||
for F in ${FILES}
|
||||
do
|
||||
#echo ${F}
|
||||
#Ermittle ctime des WAV Files
|
||||
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}
|
||||
del_lockfile
|
||||
else
|
||||
echo "LOCK error"
|
||||
fi
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
. ./sumsel.conf
|
||||
. ./sumsel_functions.incl
|
||||
|
||||
arecord --format=cd --device=${REC_DEVICE} --max-file-time ${REC_FILE_TIME} ${REC_DIR}/${REC_PREFIX}.wav
|
||||
|
||||
15
simulate.sh
15
simulate.sh
@@ -1,15 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
. ./sumsel.conf
|
||||
. ./sumsel_functions.incl
|
||||
|
||||
COUNTER=0
|
||||
|
||||
echo "Press [CTRL+C] to stop.."
|
||||
while :
|
||||
do
|
||||
sleep 1
|
||||
COUNTER=$[$COUNTER +1]
|
||||
dst_fn="${REC_DIR}/${REC_PREFIX}-${COUNTER}.wav"
|
||||
cp ${SIM_EXAMPLE_FILE} ${dst_fn}
|
||||
done
|
||||
@@ -1,27 +1,24 @@
|
||||
LOCK_DIR=/var/lock
|
||||
|
||||
SIM_EXAMPLE_FILE=./res/test.wav
|
||||
|
||||
REC_DEVICE=plughw:1,0
|
||||
|
||||
#Laenge der WAV Dateien in Sekunden
|
||||
REC_FILE_TIME=360
|
||||
#REC_FILE_TIME=360
|
||||
|
||||
#Ordner, ind dem die WAV Dateien abgelegt werden
|
||||
#wenn der Ordner nicht existiert, wird er angelegt
|
||||
REC_DIR=./recordings
|
||||
#REC_DIR=./recordings
|
||||
|
||||
#Dateiname der WAV Dateien
|
||||
# sums-01.wav, sums-02.wav, ...
|
||||
REC_PREFIX=sums
|
||||
#REC_PREFIX=sums
|
||||
|
||||
#Ordner in dem die MP3 Dateien abgelegt werden
|
||||
#wenn der Ordner nicht existiert, wird er angelegt
|
||||
UPL_DIR=./upqueue
|
||||
#UPL_DIR=./upqueue
|
||||
|
||||
#Dateiname der MP3 Dateien
|
||||
# 20210130101112-sumsi.mp3, 20210130101120-sumsi.mp3, ...
|
||||
UPL_SUFFIX=sumsi
|
||||
#UPL_SUFFIX=sumsi
|
||||
|
||||
#Rsync Zielordner
|
||||
REMOTE_DIR=<remote_user>@<remote_host>:<remote_path>
|
||||
|
||||
169
sumsel.sh
Executable file
169
sumsel.sh
Executable file
@@ -0,0 +1,169 @@
|
||||
#!/bin/bash
|
||||
|
||||
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 <configfile>]" 1>&2;
|
||||
echo -e '\t-h Usage'
|
||||
echo -e '\t-s Simulation'
|
||||
echo -e '\t-r Aufnahme'
|
||||
echo -e '\t-c Konvertierung'
|
||||
echo -e '\t-C <configfile> ssss'
|
||||
exit 1;
|
||||
}
|
||||
|
||||
while getopts ":hsrcC:" options;
|
||||
do
|
||||
case "${options}" in
|
||||
h)
|
||||
usage
|
||||
;;
|
||||
"s" | "r" | "c") #simulate
|
||||
mode=${options}
|
||||
;;
|
||||
C)
|
||||
config=${OPTARG}
|
||||
if [ -f ${config} ]; then
|
||||
. ${config}
|
||||
else
|
||||
echo "file not found: ${config}"
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "unknown option"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
check_var_exists() {
|
||||
local var_name=$1
|
||||
|
||||
if [[ ! -v ${var_name} ]]; then
|
||||
echo "${var_name} not set"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
set_lockfile() {
|
||||
local BASENAME=$(basename "$0")
|
||||
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")
|
||||
local LOCK_FILE="${LOCK_DIR}/${BASENAME}"
|
||||
|
||||
rm ${LOCK_FILE}
|
||||
}
|
||||
|
||||
simulate() {
|
||||
check_var_exists "REC_DIR"
|
||||
check_var_exists "REC_PREFIX"
|
||||
check_var_exists "SIM_EXAMPLE_FILE"
|
||||
|
||||
local COUNTER=0
|
||||
|
||||
mkdir -p ${REC_DIR}
|
||||
echo "Press [CTRL+C] to stop.."
|
||||
while :
|
||||
do
|
||||
sleep 1
|
||||
COUNTER=$[$COUNTER +1]
|
||||
dst_fn="${REC_DIR}/${REC_PREFIX}-${COUNTER}.wav"
|
||||
cp ${SIM_EXAMPLE_FILE} ${dst_fn}
|
||||
done
|
||||
exit 0
|
||||
}
|
||||
|
||||
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}
|
||||
arecord --format=cd --device=${REC_DEVICE} --max-file-time ${REC_FILE_TIME} ${REC_DIR}/${REC_PREFIX}.wav
|
||||
exit 0
|
||||
}
|
||||
|
||||
convert() {
|
||||
check_var_exists "REC_DIR"
|
||||
check_var_exists "UPL_DIR"
|
||||
check_var_exists "UPL_SUFFIX"
|
||||
check_var_exists "REMOTE_DIR"
|
||||
|
||||
if set_lockfile;
|
||||
then
|
||||
|
||||
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}
|
||||
del_lockfile
|
||||
exit 0
|
||||
else
|
||||
echo "LOCK error"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
case ${mode} in
|
||||
s) #Simulation
|
||||
simulate
|
||||
exit
|
||||
;;
|
||||
r) #Aufnahme
|
||||
record
|
||||
;;
|
||||
c) #Konvertierung
|
||||
convert
|
||||
;;
|
||||
*)
|
||||
echo "mode not set"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -1,26 +0,0 @@
|
||||
|
||||
function set_lockfile {
|
||||
local BASENAME=$(basename "$0")
|
||||
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
|
||||
OTHER_PID=$(cat ${LOCK_FILE})
|
||||
false
|
||||
else
|
||||
true
|
||||
fi
|
||||
}
|
||||
|
||||
function del_lockfile {
|
||||
local BASENAME=$(basename "$0")
|
||||
local LOCK_FILE="${LOCK_DIR}/${BASENAME}"
|
||||
|
||||
rm ${LOCK_FILE}
|
||||
}
|
||||
|
||||
mkdir -p ${REC_DIR}
|
||||
mkdir -p ${UPL_DIR}
|
||||
|
||||
Reference in New Issue
Block a user