feat(tracker): oscilloscope and LUFS / true peak detection

In addition to the oscilloscope and loudness/peak detections, this
commit refactors all the channels between components (i.e.
ModelMessages and PlayerMessages) etc. into a new class Broker. This
was done because now we have one more goroutine running: a Detector,
where the loudness / true peak detection is done in another thread.
The different threads/components are only aware of the Broker and
communicate through it. Currently, it's just a collection of
channels, so it's many-to-one communication, but in the future,
we could change Broker to have many-to-one-to-many communication.

Related to #61
This commit is contained in:
5684185+vsariola@users.noreply.github.com
2024-11-02 15:04:19 +02:00
parent 86c65939bb
commit ec222bd67d
16 changed files with 945 additions and 174 deletions

View File

@ -116,8 +116,8 @@ func (t *Tracker) Main() {
var ops op.Ops
for {
select {
case e := <-t.PlayerMessages:
t.ProcessPlayerMessage(e)
case e := <-t.Broker().ToModel:
t.ProcessMsg(e)
w.Invalidate()
case e := <-events:
switch e := e.(type) {
@ -166,6 +166,7 @@ func (t *Tracker) Main() {
w.Perform(system.ActionClose)
t.SaveRecovery()
t.quitWG.Done()
t.Broker().Close()
}
func eventLoop(w *app.Window, events chan<- event.Event, acks <-chan struct{}) {