From f044b64ace4be673d7f1632ef2bbf17c0fed76fa Mon Sep 17 00:00:00 2001 From: Mashintime Date: Tue, 28 Nov 2023 17:46:55 -0500 Subject: [PATCH] Audio dbfs support --- gui/src/js/eventHandler.js | 5 ++++- modem/modem.py | 10 +++++----- modem/state_manager.py | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/gui/src/js/eventHandler.js b/gui/src/js/eventHandler.js index fd2dccc7..d724c64b 100644 --- a/gui/src/js/eventHandler.js +++ b/gui/src/js/eventHandler.js @@ -34,7 +34,10 @@ export function stateDispatcher(data) { stateStore.channel_busy = data["channel_busy"]; stateStore.is_codec2_traffic = data["is_codec2_traffic"]; stateStore.is_modem_running = data["is_modem_running"]; - stateStore.dbfs_level = data["audio_dbfs"]; + stateStore.dbfs_level = Math.round(data["audio_dbfs"]); + stateStore.dbfs_level_percent = Math.round( + Math.pow(10, data["audio_dbfs"] / 20) * 100, + ); stateStore.channel_busy_slot = data["channel_busy_slot"]; stateStore.beacon_state = data["is_beacon_running"]; stateStore.radio_status = data["radio_status"]; diff --git a/modem/modem.py b/modem/modem.py index e485b330..ebeac886 100644 --- a/modem/modem.py +++ b/modem/modem.py @@ -115,6 +115,7 @@ class RF: # https://github.com/DJ2LS/FreeDATA/issues/127 # https://github.com/DJ2LS/FreeDATA/issues/99 self.mod_out_locked = True + self.rms_counter = 0 # Make sure our resampler will work assert (self.AUDIO_SAMPLE_RATE_RX / self.MODEM_SAMPLE_RATE) == codec2.api.FDMDV_OS_48 # type: ignore @@ -1330,7 +1331,7 @@ class RF: whether the channel is "busy." """ # Initialize dbfs counter - rms_counter = 0 + # rms_counter = 0 # https://gist.github.com/ZWMiller/53232427efc5088007cab6feee7c6e4c # Fast Fourier Transform, 10*log10(abs) is to scale it to dB @@ -1357,8 +1358,8 @@ class RF: # Calculate audio dbfs # https://stackoverflow.com/a/9763652 # calculate dbfs every 50 cycles for reducing CPU load - rms_counter += 1 - if rms_counter > 50: + self.rms_counter += 1 + if self.rms_counter > 5: d = np.frombuffer(data, np.int16).astype(np.float32) # calculate RMS and then dBFS # https://dsp.stackexchange.com/questions/8785/how-to-compute-dbfs @@ -1372,8 +1373,7 @@ class RF: except Exception as e: self.states.set("audio_dbfs", -100) - - rms_counter = 0 + self.rms_counter = 0 # Convert data to int to decrease size dfft = dfft.astype(int) diff --git a/modem/state_manager.py b/modem/state_manager.py index 3d3916ec..3fe5fbf8 100644 --- a/modem/state_manager.py +++ b/modem/state_manager.py @@ -91,6 +91,7 @@ class StateManager: "radio_frequency": self.radio_frequency, "radio_mode": self.radio_mode, "channel_busy_slot": self.channel_busy_slot, + "audio_dbfs": self.audio_dbfs, } # .wait() blocks until the event is set