PageRenderTime 347ms CodeModel.GetById 171ms RepoModel.GetById 1ms app.codeStats 0ms

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

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