Implemented meters

This commit is contained in:
Brian Hrebec 2026-03-06 23:41:14 -06:00
parent 5294df34c7
commit 57bcd3eebb

21
main.py
View file

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