PageRenderTime 51ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/Onyx-VJ 4.5.0/Onyx-AIR-Core/src/ui/window/CMidiWindow.as

http://onyx-vj.googlecode.com/
ActionScript | 1074 lines | 899 code | 79 blank | 96 comment | 112 complexity | 34b82421105e4c1d573a68992ac42825 MD5 | raw file
  1. /**
  2. * Copyright (c) 2003-2012 "Onyx-VJ Team" which is comprised of:
  3. *
  4. * Daniel Hai
  5. * Stefano Cottafavi
  6. * Bruce Lane
  7. *
  8. * All rights reserved.
  9. *
  10. * Licensed under the CREATIVE COMMONS Attribution-Noncommercial-Share Alike 3.0
  11. * You may not use this file except in compliance with the License.
  12. * You may obtain a copy of the License at: http://creativecommons.org/licenses/by-nc-sa/3.0/us/
  13. *
  14. * Please visit http://www.onyx-vj.com for more information
  15. *
  16. */
  17. package ui.window {
  18. import flash.display.Sprite;
  19. import flash.events.*;
  20. import flash.filesystem.File;
  21. import flash.ui.*;
  22. import flash.utils.Dictionary;
  23. import flash.utils.Timer;
  24. import onyx.asset.AssetFile;
  25. import onyx.core.*;
  26. import onyx.display.BlendModes;
  27. import onyx.display.ContentCustom;
  28. import onyx.display.LayerImplementor;
  29. import onyx.display.OutputDisplay;
  30. import onyx.parameter.Parameter;
  31. import onyx.parameter.Parameters;
  32. import onyx.plugin.*;
  33. import onyx.system.NativeAppLauncher;
  34. import onyx.tween.Tween;
  35. import onyx.tween.TweenProperty;
  36. import onyx.utils.string.*;
  37. import ui.controls.*;
  38. import ui.core.*;
  39. import ui.layer.LayerPage;
  40. import ui.layer.UILayer;
  41. import ui.policy.*;
  42. import ui.states.*;
  43. /**
  44. * Remote Mapping Window
  45. */
  46. public final class CMidiWindow extends Window {
  47. /**
  48. * @private
  49. */
  50. private var pane:ScrollPane;
  51. private var connectBtn:TextButton;
  52. private var outputBtn:TextButton;
  53. private var nanoBtn:TextButton;
  54. private var resetBtn:TextButton;
  55. private var lightAllBtn:TextButton;
  56. private var lightBtn:TextButton;
  57. private var tween:Tween;
  58. private var index:int = 0;
  59. private var selectedLayer:int = 0;
  60. private var previousLayer:int = 0;
  61. private var layer:Layer;
  62. private var timer:Timer = new Timer(1000);
  63. private var pathToExe:String = 'MidiPipe.exe';
  64. private var tempText:String = 'outp launchpad';
  65. private var appLauncher:NativeAppLauncher;
  66. private var numerator:uint = 1;
  67. private var denominator:uint = 3;
  68. private const OFF:uint = 12;
  69. private const REDLOW:uint = 13;
  70. private const REDFULL:uint = 15;
  71. private const AMBERLOW:uint = 29;
  72. private const AMBERFULL:uint = 63;
  73. private const YELLOW:uint = 62;
  74. private const GREENLOW:uint = 28;
  75. private const GREENFULL:uint = 60;
  76. private const amountW:int = DISPLAY_WIDTH / 2.5;
  77. private const amountH:int = DISPLAY_HEIGHT / 2.5;
  78. private var fadeFilter:Filter;
  79. private var fadeFilterActive:Boolean = false;
  80. private var randomBlendActive:Boolean = false;
  81. private var hashCurrentBlendModes:Dictionary;
  82. private var randomDistortActive:Boolean = false;
  83. public static var useTransition:Transition;
  84. private var l:Layer;
  85. private var filter:Filter;
  86. private var test:Filter;
  87. private var flters:Array;
  88. /**
  89. * @Constructor
  90. */
  91. public function CMidiWindow(reg:WindowRegistration):void {
  92. // position & create
  93. super(reg, true, 260, 217);
  94. // show controls
  95. init();
  96. // we are draggable
  97. DragManager.setDraggable(this, true);
  98. }
  99. /**
  100. * @private
  101. */
  102. private function init():void
  103. {
  104. var index:int = 0;
  105. pane = new ScrollPane(242, 100);
  106. pane.x = 3;
  107. pane.y = 18;
  108. addChild(pane);
  109. var options:UIOptions = new UIOptions( true, true, null, 60, 12 );
  110. connectBtn = new TextButton(options, 'connect'),
  111. connectBtn.addEventListener(MouseEvent.MOUSE_DOWN, start);
  112. pane.addChild(connectBtn).y = (index++ * 15);
  113. nanoBtn = new TextButton(options, 'inpt loopbe'),
  114. nanoBtn.addEventListener(MouseEvent.MOUSE_DOWN, loopBeMsg);
  115. pane.addChild(nanoBtn).y = (index++ * 15);
  116. outputBtn = new TextButton(options, 'outp launchpad'),
  117. outputBtn.addEventListener(MouseEvent.MOUSE_DOWN, outpMsg);
  118. pane.addChild(outputBtn).y = (index++ * 15);
  119. resetBtn = new TextButton(options, 'reset lp btns'),
  120. resetBtn.addEventListener(MouseEvent.MOUSE_DOWN, reset);
  121. pane.addChild(resetBtn).y = (index++ * 15);
  122. lightAllBtn = new TextButton(options, 'lp light all'),
  123. lightAllBtn.addEventListener(MouseEvent.MOUSE_DOWN, lightAll);
  124. pane.addChild(lightAllBtn).y = (index++ * 15);
  125. /*lightBtn = new TextButton(options, 'nano light'),
  126. lightBtn.addEventListener(MouseEvent.MOUSE_DOWN, lightNano);
  127. pane.addChild(lightBtn).y = (index++ * 15);*/
  128. appLauncher = new NativeAppLauncher(pathToExe);
  129. appLauncher.addEventListener( Event.ACTIVATE, activate );
  130. appLauncher.addEventListener( Event.CLOSE, closed );
  131. appLauncher.addEventListener( Event.CHANGE, change );
  132. UILayer.selectLayer(selectedLayer);
  133. layer = Display.getLayerAt(selectedLayer);
  134. timer.addEventListener(TimerEvent.TIMER, onTimer);
  135. timer.start();
  136. }
  137. public function start(event:MouseEvent):void
  138. {
  139. appLauncher.launchExe();
  140. event.stopPropagation();
  141. }
  142. private function loopBeMsg(event:MouseEvent):void
  143. {
  144. appLauncher.writeData('list');
  145. //appLauncher.writeData('outp launchpad');
  146. appLauncher.writeData('inpt loopbe');
  147. layer = Display.getLayerAt(selectedLayer);
  148. event.stopPropagation();
  149. }
  150. private function outpMsg(event:MouseEvent):void
  151. {
  152. //appLauncher.writeData('list');
  153. appLauncher.writeData('outp launchpad');
  154. //appLauncher.writeData('inpt loop');
  155. appLauncher.writeData('144,64,'+AMBERLOW);
  156. appLauncher.writeData('144,65,'+AMBERLOW);
  157. appLauncher.writeData('144,66,'+AMBERLOW);
  158. appLauncher.writeData('144,67,'+AMBERLOW);
  159. appLauncher.writeData('144,96,'+AMBERLOW);
  160. layer = Display.getLayerAt(selectedLayer);
  161. event.stopPropagation();
  162. }
  163. public function reset(event:MouseEvent):void
  164. {
  165. appLauncher.writeData('176,0,0');
  166. event.stopPropagation();
  167. }
  168. public function lightAll(event:MouseEvent):void
  169. {
  170. appLauncher.writeData('176,0,127');
  171. event.stopPropagation();
  172. }
  173. /*public function lightNano(event:MouseEvent):void
  174. {
  175. appLauncher.writeData('176,32,127');
  176. event.stopPropagation();
  177. }*/
  178. public function dutyCycle():void
  179. {
  180. if (numerator++>7) numerator = 1;
  181. if (denominator++>17) denominator = 3;
  182. var duty:uint = (16 * (numerator - 1)) + (denominator - 3);
  183. //if (duty > 127) duty = 0;
  184. appLauncher.writeData('176,30,' + duty);
  185. }
  186. public function gradient():void
  187. {
  188. for (var red:uint=0;red<8;red++)
  189. {
  190. for (var green:uint=0;green<8;green++)
  191. {
  192. var colour:uint = 12 + red + (green*16);
  193. var pos:uint = red + ((green)*16);
  194. appLauncher.writeData('144,' + pos + ',' + colour);
  195. }
  196. }
  197. }
  198. private function lightPad( padIndex:uint, color:uint):void
  199. {
  200. appLauncher.writeData('144,' + padIndex + ','+AMBERLOW );
  201. }
  202. private function onTimer(event:TimerEvent):void
  203. {
  204. var layer:Layer = (UIObject.selection as UILayer).layer;
  205. //dutyCycle();
  206. }
  207. private function tweenFinish(event:Event):void {
  208. tween.removeEventListener(Event.COMPLETE, tweenFinish);
  209. //var layer:Layer = Display.getLayerAt(selectedLayer);
  210. layer.visible = false;
  211. }
  212. private function sendMsg(event:MouseEvent):void {
  213. switch (event.currentTarget) {
  214. case connectBtn:
  215. break;
  216. }
  217. event.stopPropagation();
  218. }
  219. public function change(evt:Event):void
  220. {
  221. var rcvd:String = appLauncher.readAppOutput();
  222. var rcvdInt:uint = uint(rcvd);
  223. var channel:uint = rcvdInt & 0xf;
  224. var cmd:uint = rcvdInt & 0xf0;
  225. var noteon:uint = (rcvdInt>> 8) & 0xff;
  226. var velocity:uint = (rcvdInt>> 16) & 0xff;
  227. trace("change:" + noteon + " mod:" + noteon%4 + " velocity:" + velocity + " channel:" + channel);
  228. /*
  229. * LAUNCHPAD
  230. */
  231. if (channel == 1)
  232. {
  233. if ( noteon > 67 )
  234. {
  235. if ( noteon % 4 == 0 )
  236. {
  237. previousLayer = selectedLayer;
  238. selectedLayer = 4;
  239. UILayer.selectLayer(selectedLayer);
  240. layer = Display.getLayerAt(selectedLayer);
  241. }
  242. else
  243. {
  244. if ( layer==null )
  245. {
  246. UILayer.selectLayer(selectedLayer);
  247. layer = Display.getLayerAt(selectedLayer);
  248. }
  249. }
  250. }
  251. else
  252. {
  253. previousLayer = selectedLayer;
  254. selectedLayer = noteon % 4;
  255. UILayer.selectLayer(selectedLayer);
  256. layer = Display.getLayerAt(selectedLayer);
  257. }
  258. switch ( noteon )
  259. {
  260. // 1st line: layer select
  261. case 64:
  262. case 65:
  263. case 66:
  264. case 67:
  265. case 96:
  266. if ( selectedLayer != previousLayer )
  267. {
  268. appLauncher.writeData('144,64,'+AMBERLOW);
  269. appLauncher.writeData('144,65,'+AMBERLOW);
  270. appLauncher.writeData('144,66,'+AMBERLOW);
  271. appLauncher.writeData('144,67,'+AMBERLOW);
  272. appLauncher.writeData('144,96,'+AMBERLOW);
  273. appLauncher.writeData('144,' + noteon + ',' + GREENFULL);
  274. if (layer.visible)
  275. {
  276. appLauncher.writeData('144,'+(noteon-4)+','+GREENFULL);
  277. }
  278. else
  279. {
  280. appLauncher.writeData('144,'+(noteon-4)+','+REDLOW);
  281. }
  282. }
  283. break;
  284. // go to A
  285. case 97:
  286. if ( Display.channelMix > 0 ) Display.channelMix -= 0.03;
  287. break;
  288. // go to B
  289. case 98:
  290. if ( Display.channelMix < 1 ) Display.channelMix += 0.03;
  291. break;
  292. // switch A/B
  293. case 99:
  294. const property:TweenProperty = (Display.channelMix > .5) ? new TweenProperty('channelMix', Display.channelMix, 0) : new TweenProperty('channelMix', Display.channelMix, 1);
  295. new Tween( Display, 4000, property );
  296. break;
  297. //2nd line visibility
  298. case 60:
  299. case 61:
  300. case 62:
  301. case 63:
  302. case 92:
  303. if (layer.visible)
  304. {
  305. appLauncher.writeData('144,'+noteon+','+REDLOW);
  306. tween = new Tween(
  307. layer,
  308. 250,
  309. new TweenProperty('alpha', layer.alpha, 0)
  310. );
  311. tween.addEventListener(Event.COMPLETE, tweenFinish);
  312. }
  313. else
  314. {
  315. appLauncher.writeData('144,'+noteon+','+GREENFULL);
  316. layer.visible = true;
  317. tween = new Tween(
  318. layer,
  319. 250,
  320. new TweenProperty('alpha', 0, 1)
  321. );
  322. }
  323. break;
  324. // fade chopDown
  325. case 93:
  326. if ( fadeFilterActive == false )
  327. {
  328. fadeFilterActive = true;
  329. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  330. fadeFilter.setParameterValue('feedBlend', 'darken');
  331. fadeFilter.setParameterValue('feedAlpha', .7);
  332. Display.addFilter(fadeFilter);
  333. }
  334. else
  335. {
  336. fadeFilterActive = false;
  337. Display.removeFilter(fadeFilter);
  338. fadeFilter = null;
  339. }
  340. break;
  341. // fade chopUp
  342. case 94:
  343. if ( fadeFilterActive == false )
  344. {
  345. fadeFilterActive = true;
  346. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  347. fadeFilter.setParameterValue('feedBlend', 'lighten');
  348. fadeFilter.setParameterValue('feedAlpha', .7);
  349. Display.addFilter(fadeFilter);
  350. }
  351. else
  352. {
  353. fadeFilterActive = false;
  354. Display.removeFilter(fadeFilter);
  355. fadeFilter = null;
  356. }
  357. break;
  358. case 95:
  359. if (Display.brightness < 0)
  360. {
  361. appLauncher.writeData('144,95,'+GREENFULL);
  362. }
  363. else
  364. {
  365. appLauncher.writeData('144,95,'+REDLOW);
  366. }
  367. new Tween(
  368. Display,
  369. 500,
  370. new TweenProperty('brightness', Display.brightness, (Display.brightness < 0) ? 0 : -1)
  371. )
  372. break;
  373. //3rd line: pause (lacks 58 and 59)
  374. case 56:
  375. case 57:
  376. case 88:
  377. if (layer.paused)
  378. {
  379. layer.pause(false);
  380. appLauncher.writeData('144,'+noteon+','+GREENFULL);
  381. }
  382. else
  383. {
  384. layer.pause(true);
  385. appLauncher.writeData('144,'+noteon+','+REDLOW);
  386. }
  387. break;
  388. //select layer
  389. case 58:
  390. if (velocity == 127)
  391. {
  392. previousLayer = selectedLayer;
  393. selectedLayer--;
  394. if (selectedLayer < 0) selectedLayer = 4;
  395. UILayer.selectLayer(selectedLayer);
  396. layer = Display.getLayerAt(selectedLayer);
  397. }
  398. break;
  399. case 59:
  400. if (velocity == 127)
  401. {
  402. previousLayer = selectedLayer;
  403. selectedLayer++;
  404. if (selectedLayer > 4) selectedLayer = 0;
  405. UILayer.selectLayer(selectedLayer);
  406. layer = Display.getLayerAt(selectedLayer);
  407. }
  408. break;
  409. // fade screen
  410. case 89:
  411. if ( fadeFilterActive == false )
  412. {
  413. fadeFilterActive = true;
  414. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  415. fadeFilter.setParameterValue('feedBlend', 'screen');
  416. fadeFilter.setParameterValue('feedAlpha', .6);
  417. Display.addFilter(fadeFilter);
  418. }
  419. else
  420. {
  421. fadeFilterActive = false;
  422. Display.removeFilter(fadeFilter);
  423. fadeFilter = null;
  424. }
  425. break;
  426. // fade multiply
  427. case 90:
  428. if ( fadeFilterActive == false )
  429. {
  430. fadeFilterActive = true;
  431. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  432. fadeFilter.setParameterValue('feedBlend', 'multiply');
  433. fadeFilter.setParameterValue('feedAlpha', .6);
  434. Display.addFilter(fadeFilter);
  435. }
  436. else
  437. {
  438. fadeFilterActive = false;
  439. Display.removeFilter(fadeFilter);
  440. fadeFilter = null;
  441. }
  442. break;
  443. // random blend
  444. case 91:
  445. if ( randomBlendActive == false )
  446. {
  447. randomBlendActive = true;
  448. Display.addEventListener(Event.ENTER_FRAME, randomBlend);
  449. hashCurrentBlendModes = new Dictionary(true);
  450. for each (l in Display.layers) {
  451. hashCurrentBlendModes[l] = l.blendMode;
  452. }
  453. }
  454. else
  455. {
  456. randomBlendActive = false;
  457. Display.removeEventListener(Event.ENTER_FRAME, randomBlend);
  458. for each (l in Display.layers) {
  459. l.blendMode = hashCurrentBlendModes[l] || 'normal';
  460. l.alpha = 1;
  461. delete hashCurrentBlendModes[l];
  462. }
  463. hashCurrentBlendModes = null;
  464. }
  465. break;
  466. //4th line: bounce
  467. case 52:
  468. case 53:
  469. case 54:
  470. case 55:
  471. case 84:
  472. layer.framerate *= -1;
  473. break;
  474. // random 3D distort
  475. case 85:
  476. randomDistortActive = true;
  477. var filters:Array, filter:Filter, plugin:Plugin;
  478. plugin = PluginManager.getFilterDefinition('DISTORT');
  479. if (plugin) {
  480. for each (var lay:Layer in Display.loadedLayers) {
  481. if (lay.path) {
  482. filter = null;
  483. filters = lay.filters;
  484. for each (var test:Filter in filters) {
  485. if (test.name === 'DISTORT') {
  486. filter = test;
  487. break;
  488. }
  489. }
  490. if (!filter) {
  491. filter = plugin.createNewInstance() as Filter;
  492. lay.addFilter(filter);
  493. }
  494. new Tween(
  495. filter,
  496. 300,
  497. new TweenProperty('bottomLeftX', filter.getParameterValue('bottomLeftX'), (Math.random() * -amountW)),
  498. new TweenProperty('topLeftX', filter.getParameterValue('topLeftX'), (Math.random() * -amountW)),
  499. new TweenProperty('bottomRightX', filter.getParameterValue('bottomRightX'), DISPLAY_WIDTH + (Math.random() * amountW)),
  500. new TweenProperty('topRightX', filter.getParameterValue('topRightX'), DISPLAY_WIDTH + (Math.random() * amountW)),
  501. new TweenProperty('bottomLeftY', filter.getParameterValue('bottomLeftY'), DISPLAY_HEIGHT + (Math.random() * amountH)),
  502. new TweenProperty('topLeftY', filter.getParameterValue('topLeftY'), (Math.random() * -amountH)),
  503. new TweenProperty('bottomRightY', filter.getParameterValue('bottomRightY'), DISPLAY_HEIGHT + (Math.random() * amountH)),
  504. new TweenProperty('topRightY', filter.getParameterValue('topRightY'), (Math.random() * -amountH))
  505. )
  506. }
  507. }
  508. }
  509. break;
  510. case 86:
  511. if ( randomDistortActive == true )
  512. {
  513. randomDistortActive = false;
  514. for each (l in Display.layers) {
  515. new Tween(
  516. l,
  517. 600,
  518. new TweenProperty('x', l.x, 0),
  519. new TweenProperty('y', l.y, 0),
  520. new TweenProperty('scaleX', l.scaleX, 1),
  521. new TweenProperty('scaleY', l.scaleY, 1)
  522. )
  523. filter = null;
  524. filters = l.filters;
  525. for each (test in filters) {
  526. if (test.name === 'DISTORT') {
  527. filter = test;
  528. break;
  529. }
  530. }
  531. if (filter) {
  532. new Tween(
  533. filter,
  534. 300,
  535. new TweenProperty('bottomLeftX', filter.getParameterValue('bottomLeftX'), 0),
  536. new TweenProperty('topLeftX', filter.getParameterValue('topLeftX'), 0),
  537. new TweenProperty('bottomRightX', filter.getParameterValue('bottomRightX'), DISPLAY_WIDTH),
  538. new TweenProperty('topRightX', filter.getParameterValue('topRightX'), DISPLAY_WIDTH),
  539. new TweenProperty('bottomLeftY', filter.getParameterValue('bottomLeftY'), DISPLAY_HEIGHT),
  540. new TweenProperty('topLeftY', filter.getParameterValue('topLeftY'), 0),
  541. new TweenProperty('bottomRightY', filter.getParameterValue('bottomRightY'), DISPLAY_HEIGHT),
  542. new TweenProperty('topRightY', filter.getParameterValue('topRightY'), 0)
  543. )
  544. }
  545. }
  546. }
  547. break;
  548. //saturation b&w
  549. case 87:
  550. Console.output("saturation:",Display.saturation);
  551. if (Display.saturation < 1)
  552. {
  553. appLauncher.writeData('144,86,'+GREENFULL);
  554. }
  555. else
  556. {
  557. appLauncher.writeData('144,86,'+REDLOW);
  558. }
  559. new Tween(
  560. Display,
  561. 500,
  562. new TweenProperty('saturation', Display.saturation, (Display.saturation < 1) ? 1 : 0)
  563. )
  564. break;
  565. //5th line: channel AB
  566. case 48:
  567. case 49:
  568. case 50:
  569. case 51:
  570. case 80:
  571. layer.channel = !layer.channel;
  572. break;
  573. case 81:
  574. if (layer.scaleX == 1.1 )
  575. {
  576. new Tween(
  577. layer,
  578. 60,
  579. new TweenProperty('scaleX', layer.scaleX, 1),
  580. new TweenProperty('scaleY', layer.scaleY, 1)
  581. )
  582. }
  583. else
  584. {
  585. new Tween(
  586. layer,
  587. 60,
  588. new TweenProperty('scaleX', layer.scaleX, 1.1),
  589. new TweenProperty('scaleY', layer.scaleY, 1.1)
  590. )
  591. }
  592. break;
  593. // framerate
  594. case 82:
  595. for each (l in Display.layers) l.framerate += .1;
  596. break;
  597. case 83:
  598. for each (l in Display.layers) l.framerate -= .1;
  599. break;
  600. // 6th line
  601. case 44:
  602. case 45:
  603. case 46:
  604. case 47:
  605. case 76:
  606. if (layer)
  607. {
  608. //layer.alpha = 0.99;
  609. if (layer.getParameters())
  610. {
  611. if (layer.getParameters().getParameter('midi'))
  612. {
  613. layer.getParameters().getParameter('midi').value = velocity;
  614. }
  615. }
  616. else
  617. {
  618. trace("layer.getParameters() null");
  619. }
  620. }
  621. else
  622. {
  623. trace("layer null");
  624. }
  625. break;
  626. default:
  627. //for the rest: load onx
  628. var f:File = new File( AssetFile.resolvePath( 'library/' + noteon + '.onx' ) );
  629. if ( f.exists )
  630. {
  631. const li:LayerImplementor = (Display as OutputDisplay).getLayerAt(0) as LayerImplementor;
  632. (Display as OutputDisplay).load(f.url, li, useTransition);
  633. }
  634. else
  635. {
  636. Console.output( f.url + ' does not exist' );
  637. }
  638. break;
  639. }
  640. }// end launchpad
  641. else
  642. {
  643. /*
  644. * NANOKONTROL2
  645. */
  646. switch ( noteon )
  647. {
  648. // go to A
  649. case 61:
  650. if ( Display.channelMix > 0 ) Display.channelMix -= 0.03;
  651. break;
  652. // go to B
  653. case 62:
  654. if ( Display.channelMix < 1 ) Display.channelMix += 0.03;
  655. break;
  656. // switch A/B
  657. case 60:
  658. const prop:TweenProperty = (Display.channelMix > .5) ? new TweenProperty('channelMix', Display.channelMix, 0) : new TweenProperty('channelMix', Display.channelMix, 1);
  659. new Tween( Display, 4000, prop );
  660. break;
  661. //2nd line visibility
  662. case 48:
  663. if (layer.visible)
  664. {
  665. tween = new Tween(
  666. layer,
  667. 250,
  668. new TweenProperty('alpha', layer.alpha, 0)
  669. );
  670. tween.addEventListener(Event.COMPLETE, tweenFinish);
  671. }
  672. else
  673. {
  674. layer.visible = true;
  675. tween = new Tween(
  676. layer,
  677. 250,
  678. new TweenProperty('alpha', 0, 1)
  679. );
  680. }
  681. break;
  682. // fade chopDown
  683. case 93:
  684. if ( fadeFilterActive == false )
  685. {
  686. fadeFilterActive = true;
  687. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  688. fadeFilter.setParameterValue('feedBlend', 'darken');
  689. fadeFilter.setParameterValue('feedAlpha', .7);
  690. Display.addFilter(fadeFilter);
  691. }
  692. else
  693. {
  694. fadeFilterActive = false;
  695. Display.removeFilter(fadeFilter);
  696. fadeFilter = null;
  697. }
  698. break;
  699. // fade chopUp
  700. case 94:
  701. if ( fadeFilterActive == false )
  702. {
  703. fadeFilterActive = true;
  704. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  705. fadeFilter.setParameterValue('feedBlend', 'lighten');
  706. fadeFilter.setParameterValue('feedAlpha', .7);
  707. Display.addFilter(fadeFilter);
  708. }
  709. else
  710. {
  711. fadeFilterActive = false;
  712. Display.removeFilter(fadeFilter);
  713. fadeFilter = null;
  714. }
  715. break;
  716. case 95:
  717. new Tween(
  718. Display,
  719. 500,
  720. new TweenProperty('brightness', Display.brightness, (Display.brightness < 0) ? 0 : -1)
  721. )
  722. break;
  723. case 39:
  724. if (layer.paused)
  725. {
  726. layer.pause(false);
  727. }
  728. else
  729. {
  730. layer.pause(true);
  731. }
  732. break;
  733. //select layer
  734. case 58:
  735. if (velocity == 127)
  736. {
  737. previousLayer = selectedLayer;
  738. selectedLayer--;
  739. if (selectedLayer < 0) selectedLayer = 4;
  740. UILayer.selectLayer(selectedLayer);
  741. layer = Display.getLayerAt(selectedLayer);
  742. }
  743. break;
  744. case 59:
  745. if (velocity == 127)
  746. {
  747. previousLayer = selectedLayer;
  748. selectedLayer++;
  749. if (selectedLayer > 4) selectedLayer = 0;
  750. UILayer.selectLayer(selectedLayer);
  751. layer = Display.getLayerAt(selectedLayer);
  752. }
  753. break;
  754. // fade screen
  755. case 38:
  756. if ( fadeFilterActive == false )
  757. {
  758. fadeFilterActive = true;
  759. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  760. fadeFilter.setParameterValue('feedBlend', 'screen');
  761. fadeFilter.setParameterValue('feedAlpha', .6);
  762. Display.addFilter(fadeFilter);
  763. }
  764. else
  765. {
  766. fadeFilterActive = false;
  767. Display.removeFilter(fadeFilter);
  768. fadeFilter = null;
  769. }
  770. break;
  771. // fade multiply
  772. case 54:
  773. if ( fadeFilterActive == false )
  774. {
  775. fadeFilterActive = true;
  776. fadeFilter = PluginManager.createFilter('ECHO') as Filter;
  777. fadeFilter.setParameterValue('feedBlend', 'multiply');
  778. fadeFilter.setParameterValue('feedAlpha', .6);
  779. Display.addFilter(fadeFilter);
  780. }
  781. else
  782. {
  783. fadeFilterActive = false;
  784. Display.removeFilter(fadeFilter);
  785. fadeFilter = null;
  786. }
  787. break;
  788. // random blend
  789. case 55:
  790. if ( randomBlendActive == false )
  791. {
  792. randomBlendActive = true;
  793. Display.addEventListener(Event.ENTER_FRAME, randomBlend);
  794. hashCurrentBlendModes = new Dictionary(true);
  795. for each (l in Display.layers) {
  796. hashCurrentBlendModes[l] = l.blendMode;
  797. }
  798. }
  799. else
  800. {
  801. randomBlendActive = false;
  802. Display.removeEventListener(Event.ENTER_FRAME, randomBlend);
  803. for each (l in Display.layers) {
  804. l.blendMode = hashCurrentBlendModes[l] || 'normal';
  805. l.alpha = 1;
  806. delete hashCurrentBlendModes[l];
  807. }
  808. hashCurrentBlendModes = null;
  809. }
  810. break;
  811. //4th line: bounce
  812. case 64:
  813. layer.framerate *= -1;
  814. break;
  815. // random 3D distort
  816. case 37:
  817. randomDistortActive = true;
  818. plugin = PluginManager.getFilterDefinition('DISTORT');
  819. if (plugin) {
  820. for each (l in Display.loadedLayers) {
  821. if (l.path) {
  822. filter = null;
  823. flters = l.filters;
  824. for each (test in flters) {
  825. if (test.name === 'DISTORT') {
  826. filter = test;
  827. break;
  828. }
  829. }
  830. if (!filter) {
  831. filter = plugin.createNewInstance() as Filter;
  832. l.addFilter(filter);
  833. }
  834. new Tween(
  835. filter,
  836. 300,
  837. new TweenProperty('bottomLeftX', filter.getParameterValue('bottomLeftX'), (Math.random() * -amountW)),
  838. new TweenProperty('topLeftX', filter.getParameterValue('topLeftX'), (Math.random() * -amountW)),
  839. new TweenProperty('bottomRightX', filter.getParameterValue('bottomRightX'), DISPLAY_WIDTH + (Math.random() * amountW)),
  840. new TweenProperty('topRightX', filter.getParameterValue('topRightX'), DISPLAY_WIDTH + (Math.random() * amountW)),
  841. new TweenProperty('bottomLeftY', filter.getParameterValue('bottomLeftY'), DISPLAY_HEIGHT + (Math.random() * amountH)),
  842. new TweenProperty('topLeftY', filter.getParameterValue('topLeftY'), (Math.random() * -amountH)),
  843. new TweenProperty('bottomRightY', filter.getParameterValue('bottomRightY'), DISPLAY_HEIGHT + (Math.random() * amountH)),
  844. new TweenProperty('topRightY', filter.getParameterValue('topRightY'), (Math.random() * -amountH))
  845. )
  846. }
  847. }
  848. }
  849. break;
  850. case 53:
  851. if ( randomDistortActive == true )
  852. {
  853. randomDistortActive = false;
  854. for each (l in Display.layers) {
  855. new Tween(
  856. l,
  857. 600,
  858. new TweenProperty('x', l.x, 0),
  859. new TweenProperty('y', l.y, 0),
  860. new TweenProperty('scaleX', l.scaleX, 1),
  861. new TweenProperty('scaleY', l.scaleY, 1)
  862. )
  863. filter = null;
  864. flters = l.filters;
  865. for each (test in flters) {
  866. if (test.name === 'DISTORT') {
  867. filter = test;
  868. break;
  869. }
  870. }
  871. if (filter) {
  872. new Tween(
  873. filter,
  874. 300,
  875. new TweenProperty('bottomLeftX', filter.getParameterValue('bottomLeftX'), 0),
  876. new TweenProperty('topLeftX', filter.getParameterValue('topLeftX'), 0),
  877. new TweenProperty('bottomRightX', filter.getParameterValue('bottomRightX'), DISPLAY_WIDTH),
  878. new TweenProperty('topRightX', filter.getParameterValue('topRightX'), DISPLAY_WIDTH),
  879. new TweenProperty('bottomLeftY', filter.getParameterValue('bottomLeftY'), DISPLAY_HEIGHT),
  880. new TweenProperty('topLeftY', filter.getParameterValue('topLeftY'), 0),
  881. new TweenProperty('bottomRightY', filter.getParameterValue('bottomRightY'), DISPLAY_HEIGHT),
  882. new TweenProperty('topRightY', filter.getParameterValue('topRightY'), 0)
  883. )
  884. }
  885. }
  886. }
  887. break;
  888. //saturation b&w
  889. case 69:
  890. Console.output("saturation:",Display.saturation);
  891. new Tween(
  892. Display,
  893. 500,
  894. new TweenProperty('saturation', Display.saturation, (Display.saturation < 1) ? 1 : 0)
  895. )
  896. break;
  897. case 65:
  898. layer.channel = !layer.channel;
  899. break;
  900. case 33:
  901. if (layer.scaleX == 1.1 )
  902. {
  903. new Tween(
  904. layer,
  905. 60,
  906. new TweenProperty('scaleX', layer.scaleX, 1),
  907. new TweenProperty('scaleY', layer.scaleY, 1)
  908. )
  909. }
  910. else
  911. {
  912. new Tween(
  913. layer,
  914. 60,
  915. new TweenProperty('scaleX', layer.scaleX, 1.1),
  916. new TweenProperty('scaleY', layer.scaleY, 1.1)
  917. )
  918. }
  919. break;
  920. // framerate
  921. case 44:
  922. for each (l in Display.layers) l.framerate += .1;
  923. break;
  924. case 43:
  925. for each (l in Display.layers) l.framerate -= .1;
  926. break;
  927. case 0:
  928. if (velocity>0) layer.alpha = velocity/127;
  929. break;
  930. case 1:
  931. if (velocity>0) layer.brightness = velocity/127;
  932. break;
  933. case 2:
  934. if (velocity>0) layer.contrast = velocity/127;
  935. break;
  936. case 3:
  937. if (velocity>0) layer.saturation = velocity/64;
  938. break;
  939. case 4:
  940. if (velocity>0) layer.hue = velocity/127;
  941. break;
  942. case 7:
  943. if (layer)
  944. {
  945. //layer.alpha = 0.99;
  946. if (layer.getParameters())
  947. {
  948. if (layer.getParameters().getParameter('midi'))
  949. {
  950. layer.getParameters().getParameter('midi').value = velocity;
  951. }
  952. }
  953. else
  954. {
  955. trace("layer.getParameters() null");
  956. }
  957. }
  958. else
  959. {
  960. trace("layer null");
  961. }
  962. break;
  963. default:
  964. break;
  965. }
  966. }
  967. //appLauncher.writeData('144,' + noteon + ',' + velocity );
  968. //3 = red, 5=low red, 30=mid orange,
  969. }
  970. private function randomBlend(event:Event):void {
  971. for each (l in Display.layers) {
  972. l.blendMode = BlendModes[Math.floor(Math.random() * BlendModes.length)];
  973. l.alpha = .8;
  974. }
  975. }
  976. private function activate(evt:Event):void
  977. {
  978. //trace("activate");
  979. //running = true;
  980. }
  981. private function closed(evt:Event):void
  982. {
  983. //trace("closed");
  984. //running = false;
  985. }
  986. /**
  987. *
  988. */
  989. override public function dispose():void
  990. {
  991. // dispose
  992. super.dispose();
  993. }
  994. }
  995. }