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.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__)