Merge branch 'master' of https://github.com/sugarcubes/SugarCubes
authorAlexander Green <alexandergreen22@gmail.com>
Thu, 31 Oct 2013 02:47:13 +0000 (19:47 -0700)
committerAlexander Green <alexandergreen22@gmail.com>
Thu, 31 Oct 2013 02:47:13 +0000 (19:47 -0700)
don't know what's up here. .

MarkSlee.pde
SugarCubes.pde
_MIDI.pde
_Mappings.pde

index 58b0ea66f1f876c033396951149ce9062b30643f..4a87665c8df95f6b735b5eb23ed34ad0d5ddde4f 100644 (file)
@@ -1,3 +1,70 @@
+class Cathedrals extends SCPattern {
+  
+  private final BasicParameter xpos = new BasicParameter("XPOS", 0.5);
+  private final BasicParameter wid = new BasicParameter("WID", 0.5);
+  private final BasicParameter arms = new BasicParameter("ARMS", 0.5);
+  private final BasicParameter sat = new BasicParameter("SAT", 0.5);
+  private GraphicEQ eq;
+  
+  Cathedrals(GLucose glucose) {
+    super(glucose);
+    addParameter(xpos);
+    addParameter(wid);
+    addParameter(arms);
+    addParameter(sat);
+  }
+  protected void onActive() {
+    if (eq == null) {
+      eq = new GraphicEQ(lx, 16);
+      eq.slope.setValue(0.7);
+      eq.range.setValue(0.4);
+      eq.attack.setValue(0.4);
+      eq.release.setValue(0.4);
+      addParameter(eq.level);
+      addParameter(eq.range);
+      addParameter(eq.attack);
+      addParameter(eq.release);
+      addParameter(eq.slope);
+    }
+  }
+
+  public void run(double deltaMs) {
+    eq.run(deltaMs);
+    float bassLevel = eq.getAverageLevel(0, 4);
+    float trebleLevel = eq.getAverageLevel(8, 6);
+    
+    float falloff = 100 / (2 + 14*wid.getValuef());
+    float cx = model.xMin + (model.xMax-model.xMin) * xpos.getValuef();
+    float barm = 12 + 60*arms.getValuef()*max(0, 2*(bassLevel-0.1));
+    float tarm = 12 + 60*arms.getValuef()*max(0, 2*(trebleLevel-0.1));
+    
+    float arm = 0;
+    float middle = 0;
+    
+    float sf = 100. / (70 - 69.9*sat.getValuef());
+
+    for (Point p : model.points) {
+      float d = MAX_FLOAT;
+      if (p.y > model.cy) {
+        arm = tarm;
+        middle = model.yMax * 3/5.;
+      } else {
+        arm = barm;
+        middle = model.yMax * 1/5.;
+      }
+      if (abs(p.x - cx) < arm) {
+        d = min(abs(p.x - cx), abs(p.y - middle));
+      }
+      colors[p.index] = color(
+        (lx.getBaseHuef() + .2*abs(p.y - model.cy)) % 360,
+        min(100, sf*dist(abs(p.x - cx), p.y, arm, middle)),
+        max(0, 120 - d*falloff));
+    }
+  } 
+}
+  
 class MidiMusic extends SCPattern {
   
   private final Stack<LXLayer> newLayers = new Stack<LXLayer>();
@@ -21,6 +88,12 @@ class MidiMusic extends SCPattern {
     addModulator(sparkle).setValue(1);
   }
   
+  void onReset() {
+    for (LightUp light : lights) {
+      light.noteOff(null);
+    }
+  }
+  
   class Sweep extends LXLayer {
     
     final LinearEnvelope position = new LinearEnvelope(0, 1, 1000);
@@ -145,6 +218,12 @@ class MidiMusic extends SCPattern {
             sparkleDirection = false;
             sparkle.trigger();       
             break;
+          case 39:
+            effects.boom.trigger();
+            break;
+          case 40:
+            effects.flash.trigger();
+            break;
         }
       }
     }
@@ -392,7 +471,7 @@ class ViolinWave extends SCPattern {
     }
     
     float zeroDBReference = pow(10, (50 - 190*level.getValuef())/20.);
-    float dB = 20*GraphicEQ.log10(lx.audioInput().mix.level() / zeroDBReference);    
+    float dB = 20*GraphicEQ.log10(lx.audioInput().mix.level() / zeroDBReference);
     if (dB > dbValue.getValuef()) {
       rising = true;
       dbValue.setRangeFromHereTo(dB, 10).trigger();
@@ -722,13 +801,18 @@ class BassPod extends SCPattern {
 
   private GraphicEQ eq = null;
   
+  private final BasicParameter clr = new BasicParameter("CLR", 0.5);
+  
   public BassPod(GLucose glucose) {
     super(glucose);
+    addParameter(clr);
   }
   
   protected void onActive() {
     if (eq == null) {
       eq = new GraphicEQ(lx, 16);
+      eq.range.setValue(0.4);
+      eq.level.setValue(0.4);
       eq.slope.setValue(0.6);
       addParameter(eq.level);
       addParameter(eq.range);
@@ -743,8 +827,10 @@ class BassPod extends SCPattern {
     
     float bassLevel = eq.getAverageLevel(0, 5);
     
+    float satBase = bassLevel*480*clr.getValuef();
+    
     for (Point p : model.points) {
-      int avgIndex = (int) constrain(1 + abs(p.x-model.xMax/2.)/(model.xMax/2.)*(eq.numBands-5), 0, eq.numBands-5);
+      int avgIndex = (int) constrain(1 + abs(p.x-model.cx)/(model.cx)*(eq.numBands-5), 0, eq.numBands-5);
       float value = 0;
       for (int i = avgIndex; i < avgIndex + 5; ++i) {
         value += eq.getLevel(i);
@@ -754,7 +840,7 @@ class BassPod extends SCPattern {
       float b = constrain(8 * (value*model.yMax - abs(p.y-model.yMax/2.)), 0, 100);
       colors[p.index] = lx.hsb(
         (lx.getBaseHuef() + abs(p.y - model.cy) + abs(p.x - model.cx)) % 360,
-        constrain(bassLevel*240 - .6*dist(p.x, p.y, model.cx, model.cy), 0, 100),
+        constrain(satBase - .6*dist(p.x, p.y, model.cx, model.cy), 0, 100),
         b
       );
     }
@@ -1282,7 +1368,7 @@ class Traktor extends SCPattern {
       colors[p.index] = lx.hsb(
         (360 + lx.getBaseHuef() + .8*abs(p.x-model.cx)) % 360,
         100,
-        constrain(9 * (bass[pos]*model.cy - abs(p.y - model.cy)), 0, 100)
+        constrain(9 * (bass[pos]*model.cy - abs(p.y - model.cy + 5)), 0, 100)
       );
       colors[p.index] = blendColor(colors[p.index], lx.hsb(
         (400 + lx.getBaseHuef() + .5*abs(p.x-model.cx)) % 360,
@@ -1298,11 +1384,12 @@ class ColorFuckerEffect extends SCEffect {
   
   final BasicParameter level = new BasicParameter("BRT", 1);
   final BasicParameter desat = new BasicParameter("DSAT", 0);
+  final BasicParameter hueShift = new BasicParameter("HSHFT", 0);
   final BasicParameter sharp = new BasicParameter("SHARP", 0);
   final BasicParameter soft = new BasicParameter("SOFT", 0);
   final BasicParameter mono = new BasicParameter("MONO", 0);
   final BasicParameter invert = new BasicParameter("INVERT", 0);
-  final BasicParameter hueShift = new BasicParameter("HSHFT", 0);
+
   
   float[] hsb = new float[3];
   
@@ -1311,10 +1398,10 @@ class ColorFuckerEffect extends SCEffect {
     addParameter(level);
     addParameter(desat);
     addParameter(sharp);
+    addParameter(hueShift);
     addParameter(soft);
     addParameter(mono);
     addParameter(invert);
-    addParameter(hueShift);
   }
   
   public void doApply(int[] colors) {
index 00cc3b85725357fe911451147469dbaf3abcfde5..c89a72e3eef713ef84ae677d62a82773b4448fd0 100644 (file)
@@ -28,6 +28,7 @@ LXPattern[] patterns(GLucose glucose) {
 
     
     // Slee
+    new Cathedrals(glucose),
     new MidiMusic(glucose),
     new Pulley(glucose),
     new Swarm(glucose),
index 99c60d2bb5efb5a535532df39ee102be1a2e9461..a3363205f8914160418a9f15e34f38b44ef56dcc 100644 (file)
--- a/_MIDI.pde
+++ b/_MIDI.pde
@@ -411,7 +411,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
     case 7:
      switch (channel) {
        case 0:
-         effects.colorFucker.hueShift.setValue(value);
+         // effects.colorFucker.hueShift.setValue(value);
          return true;
        case 1:
          effects.colorFucker.desat.setValue(value);
@@ -437,6 +437,19 @@ public class APC40MidiInput extends GenericDeviceMidiInput {
     case 15:
       lx.engine.getDeck(GLucose.RIGHT_DECK).getFader().setValue(value);
       return true;
+      
+    // Cue level
+    case 47:
+      float val = effects.colorFucker.hueShift.getValuef();
+      int cv = cc.getValue();
+      if (cv < 64) {
+        cv = 64 + cv;
+      } else {
+        cv = cv - 64;
+      }
+      val += (cv - 64) / 300.;
+      effects.colorFucker.hueShift.setValue((val+1) % 1);
+      return true;
     }
     
     int parameterIndex = -1;
@@ -893,6 +906,12 @@ class ArturiaMinilabMidiInput extends GenericDeviceMidiInput {
       case 18:  parameterIndex = 5; break;
       case 19:  parameterIndex = 6; break;
       case 16:  parameterIndex = 7; break;
+      
+      case 75:
+        float val = effects.colorFucker.hueShift.getValuef();
+        val += (cc.getValue() - 64) / 256.;
+        effects.colorFucker.hueShift.setValue((val+1) % 1);
+        break;
     }
     if (parameterIndex >= 0) {
       List<LXParameter> parameters = midiEngine.getFocusedPattern().getParameters();
index 4649b62d9c8226bc593117f36e76c41df595d591..84e887c4472f6e5ef455239ff6d7c8ba55a12544 100644 (file)
@@ -88,80 +88,89 @@ public Model buildModel() {
         //                          dcubes.add(new Cube(-6+CW*4/3*i+CW*2/3., CH*.5, 0, 0, 0, 0, WRR));        
         // }
 
+float current_x_position = 0;
 scubes.add(new StaggeredTower(//tower 1
-      0,               // x
-       0   ,   // y
+      current_x_position,               // x
+       15   ,   // y
        0  ,   // z
-     0,  3, new Cube.Wiring[]{ WFR, WRL, WFR}));  
+     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
+current_x_position += 25.25;
 scubes.add(new StaggeredTower(// tower 2
-      22,               // x
+      current_x_position,               // x
        0  ,   // y
-       26   ,   // z
-     0,  3, new Cube.Wiring[]{ WRL, WFR, WRL})  );  
+       -10.5   ,   // z
+     45, 6, new Cube.Wiring[] { WFR, WFL, WRR, WRR, WFL, WRR}) );
+current_x_position += 25.25;
 scubes.add(new StaggeredTower(//tower 3
-      27,               // x
-       0   ,   // y
-       64,   // z
-     0,  4, new Cube.Wiring[]{ WFR, WRL, WFR, WRL})  );  
+      current_x_position,               // x
+       15   ,   // y
+       0,   // z
+     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WRR, WFL, WRR}) );
+current_x_position += 25.25;
 scubes.add(new StaggeredTower(//tower 4
-    54,               // x
-       7,   // y
-       75.5  ,   // z
-     0,  4, new Cube.Wiring[]{ WFR, WRL, WFR, WRL})  );  
-
+    current_x_position,               // x
+       0,   // y
+       -10.5  ,   // z
+     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
+current_x_position += 28;
 scubes.add(new StaggeredTower(//tower 5
-      75.5,               // x
-       0   ,   // y
-       100.5 ,   // z
-     0,  4, new Cube.Wiring[]{ WRR, WFL, WRR, WFL})  );
+      current_x_position,               // x
+       15   ,   // y
+       -4.5 ,   // z
+     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
+current_x_position += 28;
 scubes.add(new StaggeredTower(//tower 6
-      93.5,               // x
-       7 ,   // y
-       75.5,   // z
-     0, 4, new Cube.Wiring[]{ WFR, WRL, WFR, WRL})  );  
+      current_x_position,               // x
+       0 ,   // y
+       -10.5,   // z
+     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
+current_x_position += 25.25;
 scubes.add(new StaggeredTower(// tower 7
-      119,               // x
-       0   ,   // y
-      56.5,   // z
-     0,  4, new Cube.Wiring[]{ WRL, WFR, WRL, WFR})  ); 
-     
+      current_x_position,               // x
+       15   ,   // y
+      0,   // z
+     45, 6, new Cube.Wiring[] { WRR, WFL, WRR, WFL, WRR, WFL}) );
+current_x_position += 25.25;     
 scubes.add(new StaggeredTower(//tower 8
-      136.5,               // x
-       7  ,   // y
-       31.5  ,   // z
-     0,  4, new Cube.Wiring[]{ WFR, WRL, WFR, WRL})  );  
-  
+      current_x_position,               // x
+       0  ,   // y
+       -10.5 ,   // z
+     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
+current_x_position += 25.25;
 scubes.add(new StaggeredTower(//tower 9
-      161.5,               // x
-       0   ,   // y
-       20  ,   // z
-     0,  4, new Cube.Wiring[]{ WFR, WRL, WFR, WRL})  );  
+      current_x_position,               // x
+       15   ,   // y
+       0,   // z
+     45, 6, new Cube.Wiring[] { WFL, WRR, WFL, WRR, WFL, WRR}) );
+current_x_position += 25.25;
+
+//TOWERS ON DANCE FLOOR
 scubes.add(new StaggeredTower(//tower 10
-      176,               // x
-       7   ,   // y
-       -6.5  ,   // z
-     0,  3, new Cube.Wiring[]{ WRL, WFR, WRL})  );  
-scubes.add(new StaggeredTower(// tower 11
-      202.5,               // x
-       0   ,   // y
-         -26.5,   // z
-     0,  3, new Cube.Wiring[]{ WRL, WFR, WRL})  );  
-scubes.add(new StaggeredTower(// tower 12 CENTER TOWER AT 45degrees
-      73,               // x
-       0   ,   // y
-         58,   // z
-     -45,  4, new Cube.Wiring[]{ WFL, WRR, WFL, WRR})  );  
-scubes.add(new StaggeredTower(// Single cube on top of tower 3
-      22,               // x
-       81.5  ,   // y
-         39,   // z
-     -45,  1, new Cube.Wiring[]{ WFR})  );  
-scubes.add(new StaggeredTower(// Single cube on top of tower 4
-      42,               // x
-       112   ,   // y
-         72,   // z
-     -10,  1, new Cube.Wiring[]{ WRL})  );  
+      83.75+39+43-124.5,   // x
+      0,   // y
+       -47.5-43,   // z
+     0,  4, new Cube.Wiring[]{ WRR, WFL, WRR, WFL})  ); 
+scubes.add(new StaggeredTower(//tower 11
+      83.75,   // x
+       0,   // y
+       -47.5,   // z
+     0,  4, new Cube.Wiring[]{ WFL, WRR, WFL, WRR})  );  
+scubes.add(new StaggeredTower(//tower 12
+      83.75+39,   // x
+       0,   // y
+       -47.5,   // z
+     0,  4, new Cube.Wiring[]{ WRR, WFL, WRR, WFL})  ); 
+scubes.add(new StaggeredTower(//tower 13
+       83.75+39+43,   // x
+       0,   // y
+       -47.5-43,   // z
+     0,  4, new Cube.Wiring[]{ WRR, WFL, WRR, WFL})  ); 
+
+// scubes.add(new StaggeredTower(// Single cube on top of tower 4
+//       42,               // x
+//        112   ,   // y
+//          72,   // z
+//      -10,  1, new Cube.Wiring[]{ WRL})  );  
 
 
 
@@ -218,49 +227,59 @@ public PandaMapping[] buildPandaList() {
   return new PandaMapping[] {
     new PandaMapping(
       "10.200.1.28", new ChannelMapping[] {
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J3 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 41, 42}),                // 30 J7 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 43, 44}),  // 30 J8 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 6, 3}),                // 30 J13 (not working)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 45, 46}),                // 30 J14 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2}),                // 30 J15 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 4, 5}), // 30 J16
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 16, 17, 18}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 4, 5, 6}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 7, 8, 9}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 10, 11, 12}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 13, 14, 15}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
     }),
     new PandaMapping(
       "10.200.1.29", new ChannelMapping[] {
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J3 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 7, 8}),                // 30 J7 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 9, 10}),  // 30 J8 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 11, 12}),                // 30 J13 (not working)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 13, 14}),                // 30 J14 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 15, 16}),                // 30 J15 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 17, 18}), // 30 J16
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 34, 35, 36}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 19, 20, 21}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 22, 23, 24}), 
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 25, 26, 27}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 28, 29, 30}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 31, 32, 33}),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
     }),    
     new PandaMapping(
       "10.200.1.30", new ChannelMapping[] {
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 38, 39}), // 30 J3 *
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J3 *
         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 23, 24}),                // 30 J7 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 25, 26}),  // 30 J8 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 19, 20}),                // 30 J13 (not working)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 21, 22}),                // 30 J14 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                // 30 J15 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J16
-
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 37, 38, 39}),                // 30 J7 *
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 40, 41, 42}),  // 30 J8 *
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 43, 44, 45}),                // 30 J13 (not working)
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 46, 47, 48}),                // 30 J14 (unplugged)
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 49, 50, 51}),                // 30 J15 (unplugged)
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 52, 53, 54}), // 30 J16
    }),    
-    new PandaMapping(
-      "10.200.1.31", new ChannelMapping[] {
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 37, 40}), // 30 J3 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),  // 30 J4 //ORIG *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 27, 28}),                // 30 J7 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 29, 30}),  // 30 J8 *
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 31, 32}),                // 30 J13 (not working)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 33, 34}),                // 30 J14 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 35, 36}),                // 30 J15 (unplugged)
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }), // 30 J16               // 31 J16
-    }),
+     new PandaMapping(
+       "10.200.1.31", new ChannelMapping[] {
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J3 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 55, 56}), // 30 J7 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 57, 58}), //  J8 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 59, 60}),           // J13 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 61, 62}),                // 30 J14 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 63, 64}),                //  J15
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 65, 66}),              //  J16
+     }),
+     new PandaMapping(
+       "10.200.1.32", new ChannelMapping[] {
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J3 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),       // J4
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 67, 68}), // 30 J7 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 69, 70}), //  J8 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),           // J13 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                // 30 J14 
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),                //  J15
+         new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),              //  J16
+     }),
   };
 }