diff --git a/main.py b/main.py index 95ef38e..eebc86e 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,5 @@ +import math + from rich.console import ConsoleOptions, Console from rich.segment import Segment from rich.style import Style @@ -128,11 +130,15 @@ class Channel(Widget): """ rms_value = var(0) - scaled_rms_value = var(0) - MAX_RMS = 2**64 + scaled_rms_value = var(0.0) + RMS_FACTOR = float(2**54) def compute_scaled_rms_value(self) -> float: - return self.rms_value / self.MAX_RMS + try: + db = 10 * math.log10(self.rms_value / self.RMS_FACTOR) + return (db + 90) / 110 + except ValueError: + return 0 def watch_scaled_rms_value(self, val) -> None: self.query_one(Meter).value = val @@ -165,8 +171,7 @@ class ChannelRow(Widget): rms_values = var([]) - def watch_rms_values(self, old_values, new_values): - print('watch_rms_values', new_values) + def watch_rms_values(self, new_values): for channel, value in zip(self.query(Channel), new_values): channel.rms_value = value @@ -320,7 +325,7 @@ class Mixer(App): self.out_port = mido.open_output('Mixer', virtual=True) def on_mount(self) -> None: - self.set_interval(.5, self.update_messages) + self.set_interval(.1, self.update_messages) def update_messages(self) -> None: self.out_port.send(self.STATUS_MSG) @@ -367,13 +372,15 @@ class Mixer(App): self.messages.append(hex_format(decoded_msg)) self.query_one('#log').update(self.messages) - print('update') input_row = self.query_one(InputChannelRow) input_row.rms_values = self.bf_rms.input_rms + input_row.mutate_reactive(ChannelRow.rms_values) playback_row = self.query_one(PlaybackChannelRow) playback_row.rms_values = self.bf_rms.playback_rms + playback_row.mutate_reactive(ChannelRow.rms_values) output_row = self.query_one(OutputChannelRow) output_row.rms_values = self.bf_rms.output_rms + output_row.mutate_reactive(ChannelRow.rms_values) #self.query_one('#status').update(self.bf_status.__dict__)