Example #1
0
 def settings_update(self, get):
     if not self.count_set:
         self._set_count(light_count(get))
     self.brightness = Expression.convert(get('light', 'brightness'))
     if not self.period_set:
         self.period = Expression.convert(
             get('light', 'visualizer', 'period'))
Example #2
0
    def update_callback(self):
        self.period = Expression.convert(self.values.period)
        self.lighting_window.set_light_count(
            self.values.light_count
            or (self.values.layout[0] * self.values.layout[1]))
        self.lighting_window.set_shape(self.values.shape == 'rect')
        self.lighting_window.set_show_label(self.values.show_label)
        self.lighting_window.set_label_starts_at_zero(
            self.values.label_starts_at_zero)
        self.lighting_window.set_layout(self.values.layout, self.values.size,
                                        self.values.padding,
                                        self.values.instrument_padding,
                                        self.values.label_padding)
        self.columns = self.values.layout[0]

        self.transform = self.values.transform
        if self.transform:
            try:
                self.transform = cechomesh.Transform(self.transform)
            except:
                LOGGER.error('Don\'t understand transform %s', self.transform)
                self.transform = None
        self.brightness = Expression.convert(self.values.brightness)
        if self.transform:
            self.brightness = self.transform.apply(self.brightness)
Example #3
0
def split(items):
    kwds = {}
    numeric = []
    for k, v in six.iteritems(items):
        if isinstance(k, six.string_types) and k[0].isalpha():
            kwds[k] = v
        else:
            from echomesh.expression import Expression
            numeric.append([Expression.convert(k), Expression.convert(v)])
    return kwds, sorted(numeric)
Example #4
0
 def __init__(self, parent, description, name='Repeat', delay=0, **kwds):
     delay = Expression.convert(description.get('delay', delay))
     super(Repeat, self).__init__(parent,
                                  description,
                                  name,
                                  delay=delay,
                                  **kwds)
     self.random_delay = Expression.convert(
         description.get('random_delay', 0))
     self.period = Expression.convert(description.get('period', 0))
     self.repeat = Expression.convert(description.get('repeat', 'infinite'))
     assert self.random_delay > 0 or self.period > 0, (
         'You must set either a period or a random_delay')
Example #5
0
 def get(self, *path):
     with self.lock:
         value = self.clients.get(path)
         if not value:
             value = Expression.convert(Settings.get(*path))
             self.clients[path] = value
         return value
Example #6
0
    def __init__(self,
                 element,
                 period,
                 begin=None,
                 end=None,
                 count=None,
                 skip=1,
                 repeat=INFINITY,
                 **kwds):
        parts = [
            Expression.convert(x, element) for x in (count, begin, end, skip)
        ]
        self.count, self.begin, self.end, self.skip = Interval.interval(*parts)

        self.element = element
        self.period = Expression.convert(period, element)
        self.repeat = repeat
        if kwds:
            LOGGER.error('Unknown keywords "%s" for counter', kwds)
Example #7
0
 def settings_update(self, get):
     port = get('osc', 'server', 'port')
     if port == self.port:
         return
     if self.server:
         self.server.close()
         self.server = None
     self.port = port
     self.server = OSC.OSCServer(('', port), None, port)
     self.server.socket.settimeout(
         Expression.convert(get('network', 'timeout')))
Example #8
0
    def __init__(self,
                 element,
                 loops=1,
                 position=(0, 0),
                 rotation=(0, 0, 0),
                 size=1,
                 duration=None,
                 z=DEFAULT_Z,
                 shader=None,
                 **kwds):
        super(ImageSprite, self).__init__()
        import pi3d

        self.element = element
        self.imagename = IMAGE_DIRECTORY.expand(kwds.pop('file', None))
        del kwds['type']
        if kwds:
            s = '' if len(kwds) == 1 else 's'
            LOGGER.error('Unknown keyword%s: %s', s, ', '.join(kwds))

        self._loops = loops
        self._loop_number = 0
        self._position = Expression.expression(position, element)
        self._rotation = Expression.expression(rotation, element)
        self._size = Expression.expression(size, element)
        self._z = Expression.expression(z, element)
        self.element.time = 0  # elapsed time.
        self._time = 0  # start time.
        if duration is None:
            for env in [self._position, self._rotation, self._size, self._z]:
                if env.is_constant():
                    duration = max(duration, env.length)
            if duration is None:
                duration = INFINITY
        else:
            self._duration = Expression.convert(duration)

        if not self._duration:
            LOGGER.warning('An image sprite had a zero duration.')
        if not ImageSprite.CACHE:
            ImageSprite.CACHE = pi3d.TextureCache()

        texture = ImageSprite.CACHE.create(self.imagename)
        x, y, z = self.coords()
        self.sprite = pi3d.ImageSprite(texture,
                                       w=texture.ix,
                                       h=texture.iy,
                                       shader=Shader.shader(shader),
                                       x=x,
                                       y=y,
                                       z=z)
        self.sprite.repaint = self.repaint
Example #9
0
    def __init__(self, parent, desc):
        times = []
        for e in desc.get('elements', []):
            times.append([
                Expression.convert(e.pop(a, None)) for a in Sequence.ATTRIBUTES
            ])

        self.elements = []
        self.output = desc.get('output', None)
        self.patterns = {}
        for k, v in desc.get('pattern', {}).items():
            self.patterns[k] = make_pattern(self, v, k)

        super(Sequence, self).__init__(parent,
                                       desc,
                                       name='Sequence',
                                       full_slave=False)

        self.loops = Expression.convert(desc.get('loops', 1))
        self.duration = Expression.convert(desc.get('duration', 'infinity'))
        self.sequence = []
        self.paused_children = set()

        for element, t in zip(self.elements, times):
            begin, end, duration = t
            if duration is not None:
                if end is not None:
                    begin = end - duration
                elif begin is not None:
                    end = begin + duration

            self.sequence.append([begin or 0, element.start])

            if end is not None:
                self.sequence.append([end, element.pause])

        self.sequence.append([self.duration, self.pause])
        self.sequence.sort(key=operator.itemgetter(0))
Example #10
0
 def after_server_starts(self):
     if cechomesh.LOADED:
         run_after(self.run,
                   Expression.convert(Settings.get('execution',
                                                   'delay_before_run')))
     else:
         self.run()
         if self.display:
             self.display_loop()
         elif not USE_KEYBOARD_THREAD and self.keyboard_runnable:
             self.keyboard_runnable.loop()
         else:
             while self.is_running:
                 time.sleep(self.timeout)
Example #11
0
    def __init__(self, data, element=None):
        self.element = element

        from echomesh.expression import SplitNumbers
        kwds, numeric = SplitNumbers.split(data)
        self.times, self.data = zip(*numeric)
        if not self.times:
            raise Exception('Didn\'t understand envelope %s' % data)

        if len(self.times) == 1:
            self._set_constant(self.data[0])
            return

        _check_times(self.times)

        self.loops = kwds.get('loops', 1)
        if not isinstance(self.loops, six.integer_types):
            from echomesh.expression import Expression
            self.loops = Expression.convert(self.loops)

        self.last_time = self.times[-1]

        length = kwds.get('length', self.last_time * self.loops)
        from echomesh.expression import Expression
        self.length = Expression.convert(length, self.element)

        if self.length > 0:
            self._is_constant = False
            self.slot = 0
            self.reverse = kwds.get('reverse', False)

        else:
            self._set_constant(self.data[0])
            if self.length < 0:
                LOGGER.error('Negative length "%s" is not allowed.', length)
                self.length = 0
Example #12
0
    def settings_update(self, get):
        new_port = get('network', self.settings_name, 'port')
        timeout_name = 'network', 'timeout'
        timeout = Expression.convert(get(*timeout_name))
        self.port, old_port = new_port, self.port
        try:
            self.timeout = Expression.convert(timeout)
        except:
            timeout_name = '.'.join(timeout_name)
            LOGGER.error(
              '\nCouldn\'t evaluate value "%s" in "%s=%s"',
              timeout, timeout_name, timeout, raw=True)
            LOGGER.error(
                'Timeout defaults to %s=%s.', timeout_name, DEFAULT_TIMEOUT,
                raw=True)
            self.timeout = DEFAULT_TIMEOUT

        if self.is_running and self.socket:
            if self.port == old_port:
                self.socket.timeout = self.timeout
            else:
                self.remove_slave(self.socket)
                self.socket.pause()
                self._make_socket()
Example #13
0
def keyboard(instance, writer=sys.stdout, reader=sys.stdin.readline,
             new_thread=True):
    def processor(line):
        try:
            return Command.execute(instance, line)
        except:
            LOGGER.error('Error processing command line.')

    sleep = Expression.convert(Settings.get('execution',
                                            'delay_before_keyboard_activates'))
    keyboard = Keyboard(sleep=sleep, message=MESSAGE, processor=processor,
                        writer=writer, reader=reader)
    if new_thread:
        runnable = ThreadRunnable(target=keyboard.loop)
        runnable.add_mutual_pause_slave(keyboard)
        return keyboard, runnable
    else:
        return keyboard, keyboard
Example #14
0
    def __init__(self):
        super(Pi3dDisplay, self).__init__()
        self.timeout = Expression.convert(Settings.get('network', 'timeout'))
        keywords = {}

        background = Settings.get('pi3d', 'background')
        if background:
            keywords.update(background=background)

        dimensions = Settings.get('pi3d', 'dimensions')
        if dimensions:
            x, y, width, height = dimensions
            keywords.update(x=x, y=y, width=width, height=height)

        for k in ['aspect', 'depth', 'far', 'near', 'tk', 'window_title']:
            keywords[k] = Settings.get('pi3d', k)

        from pi3d import Display
        self.display = Display.create(**keywords)
        Settings.add_client(self)
        Shader.SHADER()
Example #15
0
 def test_hz(self):
     self.assertNear(Expression.convert('1Hz'), 1.0)
Example #16
0
 def test_unicode_fraction(self):
     self.assertNear(Expression.convert('½sec'), 0.5)
Example #17
0
 def test_fraction_and_paren(self):
     self.assertNear(Expression.convert('(1/2)sec'), 0.5)
Example #18
0
 def test_fraction(self):
     self.assertNear(Expression.convert('1/2sec'), 0.5)
Example #19
0
 def test_addition(self):
     self.assertNear(Expression.convert('13 + 12 ms'), 0.025)
Example #20
0
 def test_ms(self):
     self.assertNear(Expression.convert('10ms'), 0.01)
Example #21
0
 def test_negative_decimal(self):
     self.assertNear(Expression.convert('-103.4 semitones'),
                     0.0025475626362608667)
Example #22
0
 def test_exponential(self):
     self.assertNear(Expression.convert('-1.034E+2 semitones'),
                     0.0025475626362608667)
Example #23
0
 def test_ten_hz(self):
     self.assertNear(Expression.convert('10 hertz'), 0.1)
Example #24
0
 def test_unit_no_space(self):
     self.assertNear(Expression.convert('12dB'), 3.9810717055349722)
Example #25
0
 def test_unit(self):
     self.assertNear(Expression.convert('12 db'), 3.9810717055349722)
Example #26
0
 def test_string(self):
     self.assertNear(Expression.convert('12'), 12)
Example #27
0
 def test_ten_khz(self):
     self.assertNear(Expression.convert('10 kilohertz'), 0.0001)
Example #28
0
 def test_negative(self):
     self.assertNear(Expression.convert('-1 semitone'), 0.9438743126816935)
Example #29
0
 def test_semitones(self):
     self.assertNear(Expression.convert('10 semitones'), 1.7817974362806785)
Example #30
0
 def test_cent(self):
     self.assertNear(Expression.convert('50 cent'), 1.029302236643492)