Changeset - 038eca7ff708
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 9 years ago 2016-06-12 01:49:32
drewp@bigasterisk.com
nsin and other effect shorthands
Ignore-this: 52f02611ab504e966d6addf8ff2a16c
2 files changed with 22 insertions and 24 deletions:
0 comments (0 inline, 0 general)
light9/effect/effecteval.py
Show inline comments
 
from __future__ import division
 
from rdflib import URIRef, Literal
 
from light9.namespaces import L9, RDF
 
from webcolors import rgb_to_hex, hex_to_rgb
 
from decimal import Decimal
 
import math
 

	
 
def literalColor(rnorm, gnorm, bnorm):
 
    return Literal(rgb_to_hex([rnorm * 255, gnorm * 255, bnorm * 255]))
 

	
 
def nsin(x): return (math.sin(x * (2 * math.pi)) + 1) / 2
 
def ncos(x): return (math.cos(x * (2 * math.pi)) + 1) / 2
 
def nsquare(t, on=.5):
 
    return (t % 1.0) < on
 
def lerp(a, b, t):
 
    return a + (b - a) * t
 

	
 
def scale(value, strength):
 
    if isinstance(value, Literal):
 
        value = value.toPython()
 

	
 
    if isinstance(value, Decimal):
 
        value = float(value)
 
        
 
    if isinstance(value, basestring):
 
        if value[0] == '#':
 
            r,g,b = hex_to_rgb(value)
 
            return rgb_to_hex([r * strength, g * strength, b * strength])
 
    elif isinstance(value, (int, float)):
 
@@ -80,34 +87,42 @@ class EffectEval(object):
 
                    ((songTime + .0) % 1.0),
 
                    ((songTime + .4) % 1.0),
 
                    ((songTime + .8) % 1.0),
 
                ]
 
            out.extend([
 
                # device, attr, lev
 
                
 
                (mov, L9['color'], Literal(rgb_to_hex([strength*x*255 for x in col]))),
 
                (mov, L9['rx'], Literal(100 + 70 * math.sin(songTime*2))),
 
            ] * (strength>0))
 
        elif self.effect == L9['effect/Curtain']:
 
            out.extend([
 
                (L9['device/lowPattern%s' % n], L9['color'], literalColor(0*strength, strength, strength)) for n in range(301,308+1)
 
                (L9['device/lowPattern%s' % n], L9['color'],
 
                 literalColor(0*strength, strength, strength))
 
                for n in range(301,308+1)
 
                ])
 
        elif self.effect == L9['effect/animRainbow']:
 
            for n in range(1, 5+1):
 
                scl = strength * nsin(songTime + n * .3)**3
 
                col = literalColor(
 
                        strength * (.5 + .5 * math.sin(songTime*6+n)),
 
                        strength * (.5 + .5 * math.sin(songTime*6+2+n)),
 
                        strength * (.5 + .5 * math.sin(songTime*6+4+n)))
 
                out.append((L9['device/aura%s' % n], L9['color'], col))
 
                
 
                        scl * nsin(songTime + n * .2),
 
                        scl * nsin(songTime + n * .2 + .3),
 
                        scl * nsin(songTime + n * .3 + .6))
 
                col = literalColor(scl * .6, scl * 0, scl * 1)
 
                dev = L9['device/aura%s' % n]
 
                out.append((dev, L9['color'], col))
 
                out.append((dev, L9['zoom'], .9))
 
                ang = songTime * 4
 
                out.append((dev, L9['rx'], lerp(.27, .7, (n-1)/4) + .2 * math.sin(ang+n)))
 
                out.append((dev, L9['ry'], lerp(.46, .52, (n-1)/4) + .5 * math.cos(ang+n)))
 
                    
 
        elif self.effect == L9['effect/Strobe']:
 
            attr, value = effectSettings[0]
 
            assert attr == L9['strength']
 
            strength = float(value)
 
            rate = 2
 
            duty = .3
 
            offset = 0
 
            f = (((songTime + offset) * rate) % 1.0)
 
            c = (f < duty) * strength
 
            col = rgb_to_hex([c * 255, c * 255, c * 255])
 
            out.extend([
show/dance2016/effect.n3
Show inline comments
 
@@ -7,43 +7,26 @@
 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 

	
 

	
 
effect:BlueStrip a :Effect; rdfs:label "blue"; :deviceSetting :ds3;
 
     :publishAttr :strength .
 

	
 
effect:RedStrip a :Effect; rdfs:label "red"; :deviceSetting :ds1, :ds2;
 
     :publishAttr :strength .
 

	
 
effect:Strobe a :Effect; rdfs:label "strobe"; :publishAttr :duty, :offset, :rate, :strength .
 

	
 

	
 
effect:animRainbow a :Effect; rdfs:label "animRainbow"; :publishAttr :strength, :rate;
 

	
 
     :setting effect:animRainbow_set1, effect:animRainbow_set10, effect:animRainbow_set11, effect:animRainbow_set12, effect:animRainbow_set13, effect:animRainbow_set14, effect:animRainbow_set15, effect:animRainbow_set16, effect:animRainbow_set17, effect:animRainbow_set18, effect:animRainbow_set19, effect:animRainbow_set6, effect:animRainbow_set7, effect:animRainbow_set8, effect:animRainbow_set9 .
 
effect:animRainbow a :Effect; rdfs:label "animRainbow"; :publishAttr :strength, :rate .
 

	
 
effect:animRainbow_set1 :device dev:aura1; :deviceAttr :zoom; :value 0.465 .
 
effect:animRainbow_set10 :device dev:aura3; :deviceAttr :zoom; :value 0.477 .
 
effect:animRainbow_set11 :device dev:aura4; :deviceAttr :zoom; :value 0.524 .
 
effect:animRainbow_set12 :device dev:aura5; :deviceAttr :zoom; :value 0.519 .
 
effect:animRainbow_set13 :device dev:aura5; :deviceAttr :ry; :value 0.509 .
 
effect:animRainbow_set14 :device dev:aura4; :deviceAttr :ry; :value 0.542 .
 
effect:animRainbow_set15 :device dev:aura3; :deviceAttr :ry; :value 0.485 .
 
effect:animRainbow_set16 :device dev:aura2; :deviceAttr :ry; :value 0.494 .
 
effect:animRainbow_set17 :device dev:aura1; :deviceAttr :ry; :value 0.463 .
 
effect:animRainbow_set18 :device dev:aura1; :deviceAttr :rx; :value 0.272 .
 
effect:animRainbow_set19 :device dev:aura2; :deviceAttr :rx; :value 0.310 .
 
effect:animRainbow_set6 :device dev:aura3; :deviceAttr :rx; :value 0.463 .
 
effect:animRainbow_set7 :device dev:aura4; :deviceAttr :rx; :value 0.672 .
 
effect:animRainbow_set8 :device dev:aura5; :deviceAttr :rx; :value 0.700 .
 
effect:animRainbow_set9 :device dev:aura2; :deviceAttr :zoom; :value 0.4779 .
 

	
 

	
 
effect:usa a :mockupEffect; rdfs:label "USA"; :chaseOffset 0;
 
     :chaseTempo 120; :code "chase()"; :devices dev:colorStrip, dev:moving1;
 
     :fadeShape :fadeCurve1; :palette "#0000ff", "#ff0000", "#ffffff";
 
     :publishAttr :strength .
 

	
 
:ds1 :attr :red; :device dev:colorStrip; :value "strength" .
 
:ds2 :attr :red; :device dev:moving1; :value "strength" .
 
:ds3 :attr :blue; :device dev:colorStrip; :value "strength" .
 
:ds4 :attr :color; :device dev:colorStrip; :value "#00ff00" .
 
:ds5 :attr :color; :device dev:colorStrip; :value "#300030" .
0 comments (0 inline, 0 general)