mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-07-31 18:30:31 +02:00
Create spectral_analysis.sh
This commit is contained in:
60
birdnet-pi/rootfs/helpers/spectral_analysis.sh
Normal file
60
birdnet-pi/rootfs/helpers/spectral_analysis.sh
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Performs the recording from the specified RTSP stream or soundcard
|
||||||
|
source /etc/birdnet/birdnet.conf
|
||||||
|
|
||||||
|
# Read the logging level from the configuration option
|
||||||
|
LOGGING_LEVEL="${LogLevel_BirdnetRecordingService}"
|
||||||
|
# If empty for some reason default to log level of error
|
||||||
|
[ -z $LOGGING_LEVEL ] && LOGGING_LEVEL='error'
|
||||||
|
# Additionally if we're at debug or info level then allow printing of script commands and variables
|
||||||
|
if [ "$LOGGING_LEVEL" == "info" ] || [ "$LOGGING_LEVEL" == "debug" ];then
|
||||||
|
# Enable printing of commands/variables etc to terminal for debugging
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -z $RECORDING_LENGTH ] && RECORDING_LENGTH=15
|
||||||
|
[ -d $RECS_DIR/StreamData ] || mkdir -p $RECS_DIR/StreamData
|
||||||
|
|
||||||
|
if [ ! -z $RTSP_STREAM ];then
|
||||||
|
# Explode the RSPT steam setting into an array so we can count the number we have
|
||||||
|
RTSP_STREAMS_EXPLODED_ARRAY=(${RTSP_STREAM//,/ })
|
||||||
|
|
||||||
|
while true;do
|
||||||
|
|
||||||
|
# Initially start the count off at 1 - our very first stream
|
||||||
|
RTSP_STREAMS_STARTED_COUNT=1
|
||||||
|
FFMPEG_PARAMS=""
|
||||||
|
|
||||||
|
# Loop over the streams
|
||||||
|
for i in "${RTSP_STREAMS_EXPLODED_ARRAY[@]}"
|
||||||
|
do
|
||||||
|
# Map id used to map input to output (first stream being 0), this is 0 based in ffmpeg so decrement our counter (which is more human readable) by 1
|
||||||
|
MAP_ID=$((RTSP_STREAMS_STARTED_COUNT-1))
|
||||||
|
# Build up the parameters to process the RSTP stream, including mapping for the output
|
||||||
|
FFMPEG_PARAMS+="-vn -thread_queue_size 512 -i ${i} -map ${MAP_ID}:a:0 -t ${RECORDING_LENGTH} -acodec pcm_s16le -ac 2 -ar 48000 file:${RECS_DIR}/StreamData/spectrum.wav "
|
||||||
|
# Increment counter
|
||||||
|
((RTSP_STREAMS_STARTED_COUNT += 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Make sure were passing something valid to ffmpeg, ffmpeg will run interactive and control our loop by waiting ${RECORDING_LENGTH} between loops because it will stop once that much has been recorded
|
||||||
|
if [ -n "$FFMPEG_PARAMS" ];then
|
||||||
|
ffmpeg -hide_banner -loglevel $LOGGING_LEVEL -nostdin $FFMPEG_PARAMS
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
else
|
||||||
|
if pgrep arecord &> /dev/null ;then
|
||||||
|
echo "Recording"
|
||||||
|
else
|
||||||
|
if [ -z ${REC_CARD} ];then
|
||||||
|
arecord -f S16_LE -c${CHANNELS} -r48000 -t wav --max-file-time ${RECORDING_LENGTH}\
|
||||||
|
--use-strftime ${RECS_DIR}/StreamData/spectrum.wav
|
||||||
|
else
|
||||||
|
arecord -f S16_LE -c${CHANNELS} -r48000 -t wav --max-file-time ${RECORDING_LENGTH}\
|
||||||
|
-D "${REC_CARD}" --use-strftime ${RECS_DIR}/StreamData/spectrum.wav
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create the spectral analysis
|
||||||
|
"$PYTHON_VIRTUAL_ENV" "$HOME"/BirdNET-Pi/scripts/spectral_analysis.py
|
||||||
Reference in New Issue
Block a user