From 0c4c5dda14b254d422cb567465350a639a50f98f Mon Sep 17 00:00:00 2001 From: CroneKorkN Date: Sun, 1 Jun 2025 16:10:27 +0200 Subject: [PATCH] wip --- process | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/process b/process index 8ca8564..cbdda97 100755 --- a/process +++ b/process @@ -37,10 +37,10 @@ def process_recording(filename): samples_per_block = int(BLOCK_SECONDS * samplerate) overlapping_samples = int(samples_per_block * BLOCK_OVERLAP_FACTOR) - # get median amplitude for normalization + # calculate a base amplitude for normalization complex_amplitudes_global = rfft(sound) - median_amplitude = np.median(np.abs(complex_amplitudes_global)) - print(f'median amplitude: {median_amplitude:.5f}rDB') + base_amplitude = np.mean(np.abs(complex_amplitudes_global)) + print(f'base amplitude: {base_amplitude:.5f}rDB') # initialize to a very old date @@ -55,11 +55,11 @@ def process_recording(filename): block = sound[start_sample:end_sample] # get block date and calculate FFT - block_date = recording_date + datetime.timedelta(seconds=block_num * BLOCK_SECONDS) + block_date = recording_date + datetime.timedelta(seconds=block_num * (samples_per_block - overlapping_samples) / samplerate) labels = rfftfreq(len(block), d=1/samplerate) complex_amplitudes = rfft(block) absolute_amplitudes = np.abs(complex_amplitudes) - amplitudes = absolute_amplitudes / median_amplitude + amplitudes = absolute_amplitudes / base_amplitude # get amplitudes only between 100 and 1000 Hz adjacent_amplitudes = amplitudes[(labels >= DETECT_FREQUENCY_FROM/ADJACENCY_FACTOR) & (labels <= DETECT_FREQUENCY_TO*ADJACENCY_FACTOR)] @@ -103,12 +103,13 @@ def process_recording(filename): else: # not detecting an event if current_event: - # conclude current event - print(f'🔊 {current_event["start_at"]}: {current_event["start_freq"]:.1f}Hz -> {current_event["end_freq"]:.1f}Hz @{current_event["max_amplitude"]:.0f}rDB') - current_event = None + duration = (current_event['end_at'] - current_event['start_at']).total_seconds() + print(f'🔊 {current_event['start_at'].strftime('%Y-%m-%d %H:%M:%S')} ({duration:.1f}s): {current_event['start_freq']:.1f}Hz->{current_event['end_freq']:.1f}Hz @{current_event['max_amplitude']:.0f}rDB') + write_clip() write_plot() + current_event = None block_num += DETECTION_DISTANCE // BLOCK_SECONDS block_num += 1