Changeset - 1241e61fcf74
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 6 years ago 2019-06-11 01:32:58
drewp@bigasterisk.com
old math bug where KC was sending to collector as fast as it could (100fps)
Ignore-this: 4541336057ab4c892c79d648f46c6f43
2 files changed with 6 insertions and 10 deletions:
0 comments (0 inline, 0 general)
bin/keyboardcomposer
Show inline comments
 
@@ -215,49 +215,49 @@ class KeyboardComposer(tk.Frame, SubClie
 
                 hw_sliders=True):
 
        tk.Frame.__init__(self, root, bg='black')
 
        SubClient.__init__(self)
 
        self.graph = graph
 
        self.session = session
 

	
 
        self.subbox: Dict[URIRef, SubmasterBox] = {}  # sub uri : SubmasterBox
 
        self.slider_table: Dict[Tuple[int, int], SubmasterBox] = {
 
        }  # coords : SubmasterBox
 
        self.rows: List[tk.Frame] = []  # this holds Tk Frames for each row
 

	
 
        self.current_row = 0  # should come from session graph
 

	
 
        self.use_hw_sliders = hw_sliders
 
        self.connect_to_hw(hw_sliders)
 

	
 
        self.make_key_hints()
 
        self.make_buttons()
 

	
 
        self.graph.addHandler(self.redraw_sliders)
 

	
 
        self.codeWatcher = CodeWatcher(
 
            onChange=lambda: self.graph.addHandler(self.redraw_sliders))
 

	
 
        self.send_levels_loop(delay=.05)
 
        self.send_levels_loop(periodSec=.05)
 
        self.graph.addHandler(self.rowFromGraph)
 

	
 
    def make_buttons(self):
 
        self.buttonframe = tk.Frame(self, bg='black')
 
        self.buttonframe.pack(side=tk.BOTTOM)
 

	
 
        self.sliders_status_var = tk.IntVar()
 
        self.sliders_status_var.set(self.use_hw_sliders)
 
        self.sliders_checkbutton = tk.Checkbutton(
 
            self.buttonframe,
 
            text="Sliders",
 
            variable=self.sliders_status_var,
 
            command=lambda: self.toggle_slider_connectedness(),
 
            bg='black',
 
            fg='white')
 
        self.sliders_checkbutton.pack(side=tk.LEFT)
 

	
 
        self.alltozerobutton = tk.Button(self.buttonframe,
 
                                         text="All to Zero",
 
                                         command=self.alltozero,
 
                                         bg='black',
 
                                         fg='white')
 
        self.alltozerobutton.pack(side='left')
 

	
light9/subclient.py
Show inline comments
 
from light9.collector.collector_client import sendToCollector
 
from twisted.internet import reactor
 
from twisted.internet.defer import Deferred
 
import traceback
 
import time
 
import logging
 
from rdflib import URIRef
 
from rdfdb.syncedgraph import SyncedGraph
 
log = logging.getLogger()
 

	
 

	
 
class SubClient:
 
    graph: SyncedGraph
 
    session: URIRef
 

	
 
    def __init__(self):
 
        """assumed that your init saves self.graph"""
 
        pass  # we may later need init code for network setup
 

	
 
    def get_levels_as_sub(self):
 
        """Subclasses must implement this method and return a Submaster
 
        object."""
 

	
 
    def send_levels(self):
 
        self._send_sub()
 

	
 
    def send_levels_loop(self, delay=1000) -> None:
 
        now = time.time()
 
    def send_levels_loop(self, periodSec=1.) -> None:
 
        sendStartTime = time.time()
 

	
 
        def done(sec):
 
            reactor.callLater(max(0,
 
                                  time.time() - (now + delay)),
 
                              self.send_levels_loop)
 
            delay = max(0, (sendStartTime + periodSec) - time.time())
 
            reactor.callLater(delay, self.send_levels_loop, periodSec)
 

	
 
        def err(e):
 
            log.warn('subclient loop: %r', e)
 
            reactor.callLater(2, self.send_levels_loop)
 
            reactor.callLater(2, self.send_levels_loop, periodSec)
 

	
 
        d = self._send_sub()
 
        d.addCallbacks(done, err)
 

	
 
    def _send_sub(self) -> Deferred:
 
        try:
 
            with self.graph.currentState() as g:
 
                outputSettings = self.get_output_settings(_graph=g)
 
        except Exception:
 
            traceback.print_exc()
 
            raise
 

	
 
        return sendToCollector(
 
            'subclient',
 
            self.session,
 
            outputSettings,
 
            # when KC uses zmq, we get message
 
            # pileups and delays on collector (even
 
            # at 20fps). When sequencer uses zmp,
 
            # it runs great at 40fps. Not sure the
 
            # difference- maybe Tk main loop?
 
            useZmq=False)
0 comments (0 inline, 0 general)