wip
This commit is contained in:
parent
834d260c96
commit
98b15597bc
4 changed files with 40 additions and 44 deletions
|
@ -1,39 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import datetime
|
|
||||||
import pytz
|
|
||||||
|
|
||||||
OUTDIR = "chunks"
|
|
||||||
CHUNK_SECONDS = 10800 # 3 Stunden
|
|
||||||
|
|
||||||
os.makedirs(OUTDIR, exist_ok=True)
|
|
||||||
|
|
||||||
def record_section():
|
|
||||||
tz = pytz.timezone("Europe/Berlin")
|
|
||||||
now = datetime.datetime.now(tz)
|
|
||||||
timestamp = now.strftime("%Y%m%d-%H%M%S")
|
|
||||||
filename = os.path.join(OUTDIR, f"{timestamp}.flac")
|
|
||||||
print(f"🎙️ Starte Aufnahme: {filename}")
|
|
||||||
|
|
||||||
cmd = [
|
|
||||||
"ffmpeg",
|
|
||||||
"-f", "pulse",
|
|
||||||
"-i", "alsa_input.usb-HANMUS_USB_AUDIO_24BIT_2I2O_1612310-00.analog-stereo",
|
|
||||||
"-ac", "1",
|
|
||||||
"-ar", "96000",
|
|
||||||
"-sample_fmt", "s32", # gerät kann nur 24bit, aber flac kann nur 32bit container
|
|
||||||
"-t", str(CHUNK_SECONDS),
|
|
||||||
"-c:a", "flac",
|
|
||||||
"-compression_level", "12",
|
|
||||||
filename
|
|
||||||
]
|
|
||||||
subprocess.run(cmd)
|
|
||||||
print(f"✅ Aufnahme abgeschlossen: {filename}")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
while True:
|
|
||||||
record_section()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -12,9 +12,9 @@ import shutil
|
||||||
RECORDINGS_DIR = "recordings"
|
RECORDINGS_DIR = "recordings"
|
||||||
PROCESSED_RECORDINGS_DIR = "recordings/processed"
|
PROCESSED_RECORDINGS_DIR = "recordings/processed"
|
||||||
DETECTIONS_DIR = "events"
|
DETECTIONS_DIR = "events"
|
||||||
DETECT_FREQUENCY_FROM = 210
|
DETECT_FREQUENCY_FROM = 208
|
||||||
DETECT_FREQUENCY_TO = 212
|
DETECT_FREQUENCY_TO = 214
|
||||||
CLIP_SECONDS = 1
|
CLIP_SECONDS = 3
|
||||||
THRESHOLD_BASE = 0.1
|
THRESHOLD_BASE = 0.1
|
||||||
OCTAVE_FACTOR = 0.1
|
OCTAVE_FACTOR = 0.1
|
||||||
CLIP_PADDING_BEFORE = 1
|
CLIP_PADDING_BEFORE = 1
|
||||||
|
@ -30,12 +30,14 @@ def process_chunk(filename):
|
||||||
|
|
||||||
print(info)
|
print(info)
|
||||||
|
|
||||||
for block in soundfile.blocks(path, blocksize=blocksize, overlap=0):
|
for num, block in enumerate(soundfile.blocks(path, blocksize=blocksize, overlap=int(blocksize*0.8))):
|
||||||
strengths = fft(block)
|
strengths = fft(block)
|
||||||
labels = fftfreq(len(block), d=1/samplerate)
|
labels = fftfreq(len(block), d=1/samplerate)
|
||||||
# get the frequency with the highest strength
|
# get the frequency with the highest strength
|
||||||
max_freq = labels[np.argmax(np.abs(strengths))]
|
max_freq = labels[np.argmax(np.abs(strengths))]
|
||||||
print(max_freq)
|
if DETECT_FREQUENCY_FROM <= max_freq <= DETECT_FREQUENCY_TO:
|
||||||
|
print(f'{num}: {max_freq:.1f}')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
os.makedirs(RECORDINGS_DIR, exist_ok=True)
|
os.makedirs(RECORDINGS_DIR, exist_ok=True)
|
33
record
Executable file
33
record
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
mkdir -p recordings
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
# get date in ISO 8601 format with nanoseconds
|
||||||
|
|
||||||
|
OS=$(uname)
|
||||||
|
|
||||||
|
if [ "$OS" = "Darwin" ]; then
|
||||||
|
DATE=$(gdate --iso-8601=ns)
|
||||||
|
elif [ "$OS" = "Linux" ]; then
|
||||||
|
DATE=$(date --iso-8601=ns)
|
||||||
|
else
|
||||||
|
echo "Unsupported OS: $OS"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# record audio using ffmpeg
|
||||||
|
|
||||||
|
ffmpeg \
|
||||||
|
-y \
|
||||||
|
-f pulse \
|
||||||
|
-i "alsa_input.usb-HANMUS_USB_AUDIO_24BIT_2I2O_1612310-00.analog-stereo" \
|
||||||
|
-ac 1 \
|
||||||
|
-ar 96000 \
|
||||||
|
-sample_fmt s32 \
|
||||||
|
-t "3600" \
|
||||||
|
-c:a flac \
|
||||||
|
-compression_level 12 \
|
||||||
|
"recordings/$DATE.flac"
|
||||||
|
done
|
Loading…
Reference in a new issue