├── FlodXM.fla ├── FlodXM.swf ├── assets ├── Flod3.ttf └── Background.png ├── haXe Version ├── bin │ ├── Test.swf │ ├── expressInstall.swf │ ├── Test.html │ └── swfobject.js ├── data │ ├── data.swf │ ├── fairyfan.xm │ ├── makedata.bat │ └── data.xml ├── make.hxml ├── make.bat ├── Def.hx ├── neoart │ ├── flod │ │ ├── xm │ │ │ ├── XMPoint.hx │ │ │ ├── XMPattern.hx │ │ │ ├── XMRow.hx │ │ │ ├── XMSample.hx │ │ │ ├── XMData.hx │ │ │ ├── XMEnvelope.hx │ │ │ ├── XMInstrument.hx │ │ │ ├── XM.hx │ │ │ ├── XMVoice.hx │ │ │ └── XMLoader.hx │ │ └── core │ │ │ ├── Sample.hx │ │ │ ├── SBChannel.hx │ │ │ ├── SBPlayer.hx │ │ │ ├── SBSample.hx │ │ │ └── Soundblaster.hx │ └── flip │ │ ├── Huffman.hx │ │ ├── ZipEntry.hx │ │ ├── ZipFile.hx │ │ └── Inflater.hx ├── README ├── Test.hx └── LoadingBar.hx ├── neoart ├── flod │ ├── core │ │ ├── Sample.as │ │ ├── SBChannel.as │ │ ├── SBSample.as │ │ ├── SBPlayer.as │ │ └── Soundblaster.as │ └── xm │ │ ├── XMPattern.as │ │ ├── XMSample.as │ │ ├── XMRow.as │ │ ├── XMPoint.as │ │ ├── XMData.as │ │ ├── XMEnvelope.as │ │ ├── XMInstrument.as │ │ ├── XM.as │ │ ├── XMVoice.as │ │ └── XMLoader.as ├── flip │ ├── Huffman.as │ ├── ZipEntry.as │ ├── ZipFile.as │ └── Inflater.as ├── flexi │ ├── Invalidate.as │ ├── Theme.as │ ├── ToggleButton.as │ ├── Control.as │ ├── Label.as │ └── Button.as └── flectrum │ ├── SoundEx.as │ ├── Split.as │ ├── Inward.as │ ├── Outward.as │ ├── Stripe.as │ └── Visualizer.as ├── license.txt ├── README └── FlodXM.as /FlodXM.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/FlodXM.fla -------------------------------------------------------------------------------- /FlodXM.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/FlodXM.swf -------------------------------------------------------------------------------- /assets/Flod3.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/assets/Flod3.ttf -------------------------------------------------------------------------------- /assets/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/assets/Background.png -------------------------------------------------------------------------------- /haXe Version/bin/Test.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/haXe Version/bin/Test.swf -------------------------------------------------------------------------------- /haXe Version/data/data.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/haXe Version/data/data.swf -------------------------------------------------------------------------------- /haXe Version/data/fairyfan.xm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/haXe Version/data/fairyfan.xm -------------------------------------------------------------------------------- /haXe Version/bin/expressInstall.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/FlodXM/HEAD/haXe Version/bin/expressInstall.swf -------------------------------------------------------------------------------- /haXe Version/make.hxml: -------------------------------------------------------------------------------- 1 | # Flash10 2 | # Flash10 3 | -cp .\ 4 | #-cp ..\..\..\Lib 5 | -swf .\bin\Test.swf 6 | -swf-lib .\data\data.swf 7 | -swf-version 10 8 | -main Test 9 | -------------------------------------------------------------------------------- /haXe Version/data/makedata.bat: -------------------------------------------------------------------------------- 1 | "E:\Home\Karg\Projects\Haxe\tools\samhaxe\bin\samhaxe.exe" -c "E:\Home\Karg\Projects\Haxe\tools\samhaxe\bin\samhaxe.conf.personal.xml" data.xml data.swf 2 | -------------------------------------------------------------------------------- /haXe Version/make.bat: -------------------------------------------------------------------------------- 1 | @rem "C:\Program Files\Motion-Twin\haxe-2.07-win\haxe.exe" --no-traces --flash-use-stage make.hxml 2 | "C:\Program Files\Motion-Twin\haxe-2.07-win\haxe.exe" -debug --flash-use-stage make.hxml 3 | -------------------------------------------------------------------------------- /haXe Version/Def.hx: -------------------------------------------------------------------------------- 1 | class Def 2 | { 3 | // size of the stage (pixels) 4 | public static var STAGE_WIDTH : Int = 320; 5 | public static var STAGE_HEIGHT : Int = 240; 6 | 7 | // size of the loading bar (pixels) 8 | public static var LOADING_BAR_WIDTH : Int = 64; 9 | public static var LOADING_BAR_HEIGHT : Int = 6; 10 | 11 | // spacing between loading bar and frame (pixels) 12 | public static var LOADING_BAR_H_SPACING : Int = 2; 13 | public static var LOADING_BAR_V_SPACING : Int = 2; 14 | 15 | // timings (miliseconds) 16 | public static var AUTO_ROTATION_DELAY : Float = 50; 17 | public static var TRANSITION_DELAY : Float = 3000; 18 | } -------------------------------------------------------------------------------- /haXe Version/data/data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /neoart/flod/core/Sample.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core { 13 | 14 | public final class Sample { 15 | public var 16 | l : Number = 0.0, 17 | r : Number = 0.0, 18 | next : Sample; 19 | } 20 | } -------------------------------------------------------------------------------- /neoart/flod/xm/XMPattern.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMPattern { 15 | internal var 16 | length : int, 17 | rows : Vector., 18 | size : int; 19 | } 20 | } -------------------------------------------------------------------------------- /neoart/flod/xm/XMSample.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | import neoart.flod.core.*; 14 | 15 | public final class XMSample extends SBSample { 16 | public var 17 | finetune : int, 18 | panning : int, 19 | relative : int; 20 | } 21 | } -------------------------------------------------------------------------------- /neoart/flod/xm/XMRow.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMRow { 15 | internal var 16 | note : int, 17 | instrument : int, 18 | volume : int, 19 | effect : int, 20 | param : int; 21 | } 22 | } -------------------------------------------------------------------------------- /neoart/flod/xm/XMPoint.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMPoint { 15 | internal var 16 | frame : int, 17 | value : int; 18 | 19 | public function XMPoint(x:int = 0, y:int = 0) { 20 | frame = x; 21 | value = y; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMPoint.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | @final class XMPoint 15 | { 16 | // internal 17 | public var frame : Int; 18 | public var value : Int; 19 | 20 | public function new(x : Int = 0, y : Int = 0) 21 | { 22 | this.frame = x; 23 | this.value = y; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMPattern.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import flash.Vector; 15 | 16 | @final class XMPattern 17 | { 18 | // internal 19 | public var length : Int; 20 | public var rows : Vector; 21 | public var size : Int; 22 | 23 | public function new() 24 | { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /haXe Version/neoart/flod/core/Sample.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core; 13 | 14 | class Sample 15 | { 16 | public var l : Float; 17 | public var r : Float; 18 | public var next : Sample; 19 | 20 | public function new() 21 | { 22 | l = 0.0; 23 | r = 0.0; 24 | //next = null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /neoart/flip/Huffman.as: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | 14 | public final class Huffman { 15 | internal var 16 | count : Vector., 17 | symbol : Vector.; 18 | 19 | public function Huffman(length:int) { 20 | count = new Vector.(length, true); 21 | symbol = new Vector.(length, true); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flip/Huffman.hx: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | 14 | public final class Huffman { 15 | internal var 16 | count : Vector., 17 | symbol : Vector.; 18 | 19 | public function Huffman(length:int) { 20 | count = new Vector.(length, true); 21 | symbol = new Vector.(length, true); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMRow.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | class XMRow 15 | { 16 | // these members were internal 17 | public var note : Int; 18 | public var instrument : Int; 19 | public var volume : Int; 20 | public var effect : Int; 21 | public var param : Int; 22 | 23 | public function new() 24 | { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /neoart/flod/xm/XMData.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMData { 15 | internal var 16 | points : Vector., 17 | total : int, 18 | sustain : int, 19 | loopStart : int, 20 | loopEnd : int, 21 | flags : int; 22 | 23 | public function XMData() { 24 | points = new Vector.(12, true); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMSample.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import neoart.flod.core.SBSample; 15 | 16 | class XMSample extends SBSample 17 | { 18 | public var finetune : Int; 19 | public var panning : Int; 20 | public var relative : Int; 21 | 22 | public function new() 23 | { 24 | super(); 25 | 26 | finetune = 0; 27 | panning = 0; 28 | relative = 0; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /haXe Version/README: -------------------------------------------------------------------------------- 1 | FlodXM haXe Port by Stefan Dicu (http://www.pirongames.com) 2 | 3 | Based on FlodXM by Christian Corti, Neoart Costa Rica (flod@neoartcr.com) 4 | 5 | Looking for MOD Replay? Check out Flod: https://github.com/photonstorm/Flod 6 | 7 | This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 8 | To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to 9 | Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 10 | 11 | This release of FlodXM is not final, it is still in an early development stage, I'm just releasing it right 12 | now because I won't have much time to work on it in the next months and I don't want to let people wait 13 | any longer :) 14 | 15 | FlodXM tooks 3 months to reach this stage so if you want to use it in any commercial production I'll ask you 16 | to mention the proper credits and to make a donation to: chreil@hotmail.com via PayPal, thank you. -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | FlodXM version Alpha 3 2 | Flectrum version 1.1 3 | Flexi version 1.0 4 | Flip version 1.0 5 | 6 | 2011/09/26 7 | Christian Corti 8 | Neoart Costa Rica 9 | 10 | E-Mail: flod@neoartcr.com 11 | 12 | This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 13 | To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to 14 | Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 15 | 16 | This release of FlodXM is not final, it is still in an early development stage, I'm just releasing it right 17 | now because I won't have much time to work on it in the next months and I don't want to let people wait 18 | any longer :) 19 | 20 | FlodXM tooks 3 months to reach this stage so if you want to use it in any commercial production I'll ask you 21 | to mention the proper credits and to make a donation to: chreil@hotmail.com via PayPal, thank you. -------------------------------------------------------------------------------- /haXe Version/Test.hx: -------------------------------------------------------------------------------- 1 | import neoart.flod.core.Soundblaster; 2 | import neoart.flod.xm.XMPlayer; 3 | import neoart.flod.xm.XM; 4 | 5 | import flash.display.Sprite; 6 | 7 | class Test 8 | { 9 | public static function main() 10 | { 11 | if(haxe.Firebug.detect()) 12 | { 13 | haxe.Firebug.redirectTraces(); 14 | } 15 | 16 | var loadingBar = new LoadingBar(); 17 | flash.Lib.current.addChild(loadingBar); 18 | 19 | //try 20 | //{ 21 | var mixer = new Soundblaster(); 22 | var player = new XMPlayer(mixer); 23 | //player.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); 24 | 25 | trace("FT_SIN test: " + XM.FT2_SINE[1]); 26 | 27 | var version = player.load(new Data_Music()); 28 | trace("loading track completed " + version); 29 | player.play(); 30 | /*} 31 | catch(e : Dynamic) 32 | { 33 | trace(e); 34 | } 35 | */ 36 | } 37 | 38 | //private function soundCompleteHandler(e:Event):void 39 | //{ 40 | //} 41 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMData.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import flash.Vector; 15 | 16 | @final class XMData 17 | { 18 | public var points : Vector; 19 | public var total : Int; 20 | public var sustain : Int; 21 | public var loopStart : Int; 22 | public var loopEnd : Int; 23 | public var flags : Int; 24 | 25 | public function new() 26 | { 27 | points = new Vector(12, true); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /neoart/flod/xm/XMEnvelope.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMEnvelope { 15 | internal var 16 | value : int, 17 | position : int, 18 | frame : int, 19 | delta : int, 20 | fraction : int, 21 | stopped : int; 22 | 23 | internal function reset(value:int):void { 24 | this.value = value; 25 | position = 0; 26 | frame = 0; 27 | delta = 0; 28 | stopped = 0; 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMEnvelope.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | @final class XMEnvelope 15 | { 16 | public var value : Int; 17 | public var position : Int; 18 | public var frame : Int; 19 | public var delta : Int; 20 | public var fraction : Int; 21 | public var stopped : Int; 22 | 23 | public /*internal*/ function reset(value : Int) : Void 24 | { 25 | this.value = value; 26 | position = 0; 27 | frame = 0; 28 | delta = 0; 29 | fraction = 0; 30 | stopped = 0; 31 | } 32 | 33 | public function new() 34 | { 35 | //reset(0); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This project is now discontinued. The source code has been merged (and improved!) into the main Flod library: https://github.com/photonstorm/Flod 2 | 3 | FlodXM version Alpha 3 4 | Flectrum version 1.1 5 | Flexi version 1.0 6 | Flip version 1.0 7 | 8 | 2011/09/26 9 | Christian Corti 10 | Neoart Costa Rica 11 | 12 | E-Mail: flod@neoartcr.com 13 | 14 | Looking for MOD Replay? Check out Flod: https://github.com/photonstorm/Flod 15 | 16 | This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 17 | To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to 18 | Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 19 | 20 | This release of FlodXM is not final, it is still in an early development stage, I'm just releasing it right 21 | now because I won't have much time to work on it in the next months and I don't want to let people wait 22 | any longer :) 23 | 24 | FlodXM tooks 3 months to reach this stage so if you want to use it in any commercial production I'll ask you 25 | to mention the proper credits and to make a donation to: chreil@hotmail.com via PayPal, thank you. -------------------------------------------------------------------------------- /neoart/flod/xm/XMInstrument.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XMInstrument { 15 | internal var 16 | name : String = "", 17 | samples : Vector., 18 | noteSamples : Vector., 19 | fadeout : int, 20 | hasVolume : int, 21 | volData : XMData, 22 | hasPanning : int, 23 | panData : XMData, 24 | vibratoType : int, 25 | vibratoSweep : int, 26 | vibratoSpeed : int, 27 | vibratoDepth : int; 28 | 29 | public function XMInstrument() { 30 | noteSamples = new Vector.(96, true); 31 | volData = new XMData; 32 | panData = new XMData; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /neoart/flexi/Invalidate.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | 14 | public final class Invalidate { 15 | public static const 16 | ALL : int = 0, 17 | DATA : int = 1, 18 | SIZE : int = 2, 19 | STATE : int = 3, 20 | STYLE : int = 4, 21 | SET : int = 5; 22 | private var 23 | flags : int; 24 | 25 | public function isInvalid(index:int):Boolean { 26 | return Boolean((flags & (1 << (index & 31))) >> (index & 31)); 27 | } 28 | 29 | public function reset():void { 30 | flags = 0; 31 | } 32 | 33 | public function invalidate(index:int):void { 34 | flags |= (1 << (index & 31)); 35 | } 36 | 37 | public function validate(index:int):void { 38 | flags &= ~(1 << (index & 31)); 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /neoart/flod/core/SBChannel.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core { 13 | 14 | public final class SBChannel { 15 | public var 16 | index : int, 17 | next : SBChannel, 18 | mute : int, 19 | volume : Number, 20 | lvol : Number, 21 | rvol : Number, 22 | panning : Number, 23 | sample : SBSample, 24 | pointer : Number, 25 | counter : int, 26 | speed : Number; 27 | 28 | public function SBChannel(index:int) { 29 | this.index = index; 30 | } 31 | 32 | public function initialize():void { 33 | volume = 0.0; 34 | lvol = 0.0; 35 | rvol = 0.0; 36 | panning = 0.0; 37 | sample = null; 38 | pointer = 0.0; 39 | counter = 0; 40 | speed = 0.0; 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMInstrument.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import flash.Vector; 15 | 16 | @final class XMInstrument 17 | { 18 | public var name : String; 19 | public var samples : Vector; 20 | public var noteSamples : Vector; 21 | public var fadeout : Int; 22 | public var hasVolume : Int; 23 | public var volData : XMData; 24 | public var hasPanning : Int; 25 | public var panData : XMData; 26 | public var vibratoType : Int; 27 | public var vibratoSweep : Int; 28 | public var vibratoSpeed : Int; 29 | public var vibratoDepth : Int; 30 | 31 | public function new() 32 | { 33 | name = ""; 34 | noteSamples = new Vector(96, true); 35 | volData = new XMData(); 36 | panData = new XMData(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /neoart/flip/ZipEntry.as: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | import flash.utils.*; 14 | 15 | public final class ZipEntry { 16 | public var 17 | name : String, 18 | extra : ByteArray, 19 | version : int, 20 | flag : int, 21 | method : int, 22 | time : uint, 23 | crc : uint, 24 | compressed : uint, 25 | size : uint, 26 | offset : uint; 27 | 28 | public function get date():Date { 29 | return new Date( 30 | ((time >> 25) & 0x7f) + 1980, 31 | ((time >> 21) & 0x0f) - 1, 32 | (time >> 16) & 0x1f, 33 | (time >> 11) & 0x1f, 34 | (time >> 5) & 0x3f, 35 | (time & 0x1f) << 1 36 | ); 37 | } 38 | 39 | public function get isDirectory():Boolean { return Boolean(name.charAt(name.length - 1) == "/"); } 40 | } 41 | } -------------------------------------------------------------------------------- /neoart/flexi/Theme.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | import flash.text.*; 14 | 15 | [Embed(source="/assets/Flod3.ttf", fontName="Flod", mimeType="application/x-font-truetype", embedAsCFF="false")] 16 | 17 | public final class Theme extends Font { 18 | public static const 19 | FONT_NAME : String = "Flod", 20 | FONT_SIZE : int = 8, 21 | 22 | LABEL_NORMAL : int = 0x101420, 23 | LABEL_DISABLED : int = 0x73777d, 24 | BUTTON_LABEL : int = 0x101420, 25 | TOGGLE_LABEL : int = 0x101420, 26 | 27 | BUTTON_STATES : Array = [ 28 | [0xbec2c8, 0x5a5e64, 0x8c9096], //rest 29 | [0xa5a9af, 0x73777d, 0x91959b], //disabled 30 | [0xaabedc, 0x465a78, 0x788caa], //hover 31 | [0x3c506e, 0x3c506e, 0x6e82a0], //hover pressed 32 | [0x50545a, 0x50545a, 0x82868c]]; //pressed 33 | } 34 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flip/ZipEntry.hx: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | import flash.utils.*; 14 | 15 | public final class ZipEntry { 16 | public var 17 | name : String, 18 | extra : ByteArray, 19 | version : int, 20 | flag : int, 21 | method : int, 22 | time : uint, 23 | crc : uint, 24 | compressed : uint, 25 | size : uint, 26 | offset : uint; 27 | 28 | public function get date():Date { 29 | return new Date( 30 | ((time >> 25) & 0x7f) + 1980, 31 | ((time >> 21) & 0x0f) - 1, 32 | (time >> 16) & 0x1f, 33 | (time >> 11) & 0x1f, 34 | (time >> 5) & 0x3f, 35 | (time & 0x1f) << 1 36 | ); 37 | } 38 | 39 | public function get isDirectory():Boolean { return Boolean(name.charAt(name.length - 1) == "/"); } 40 | } 41 | } -------------------------------------------------------------------------------- /haXe Version/bin/Test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FloxXM HaXe Port Test 5 | 6 | 7 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |

You have to install Adobe Flash Player!

24 |

Get Adobe Flash player

25 |
26 | 27 |
28 | 29 |
30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /haXe Version/neoart/flod/core/SBChannel.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core; 13 | 14 | class SBChannel 15 | { 16 | public var index : Int; 17 | public var next : SBChannel; 18 | public var mute : Int; 19 | public var volume : Float; 20 | public var lvol : Float; 21 | public var rvol : Float; 22 | public var panning : Float; 23 | public var sample : SBSample; 24 | public var pointer : Float; 25 | public var counter : Int; 26 | public var speed : Float; 27 | 28 | public function new (index : Int) 29 | { 30 | this.index = index; 31 | 32 | //initialize(); 33 | } 34 | 35 | public function initialize() : Void 36 | { 37 | volume = 0.0; 38 | lvol = 0.0; 39 | rvol = 0.0; 40 | panning = 0.0; 41 | sample = null; 42 | pointer = 0.0; 43 | counter = 0; 44 | speed = 0.0; 45 | 46 | // it's not initialized anywhere in the code 47 | mute = 0; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /neoart/flod/core/SBSample.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core { 13 | import flash.utils.*; 14 | 15 | public class SBSample { 16 | public var 17 | name : String = "", 18 | bits : int = 8, 19 | length : int, 20 | loopStart : int, 21 | loopLen : int, 22 | loopMode : int, 23 | volume : int, 24 | data : Vector.; 25 | 26 | public function store(stream:ByteArray):void { 27 | var delta:int, i:int, len:int = length, total:int, value:int; 28 | data = new Vector.(len, true); 29 | 30 | if (bits == 8) { 31 | total = stream.position + len; 32 | if (total > stream.length) 33 | len = stream.length - stream.position; 34 | 35 | for (i = 0; i < len; ++i) { 36 | value = stream.readByte() + delta; 37 | if (value > 127) value -= 256; 38 | else if (value < -128) value += 256; 39 | 40 | data[i] = value * 0.0078125; 41 | delta = value; 42 | } 43 | } else { 44 | total = stream.position + (len << 1); 45 | if (total > stream.length) 46 | len = (stream.length - stream.position) >> 1; 47 | 48 | for (i = 0; i < len; ++i) { 49 | value = stream.readShort() + delta; 50 | if (value > 32767) value -= 65536; 51 | else if (value < -32768) value += 65536; 52 | 53 | data[i] = value * 0.00003051758; 54 | delta = value; 55 | } 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /haXe Version/LoadingBar.hx: -------------------------------------------------------------------------------- 1 | class LoadingBar extends flash.display.Sprite 2 | { 3 | private var frame : flash.display.Shape; 4 | private var bar : flash.display.Shape; 5 | 6 | private var barAlpha : Float; 7 | private var barAlphaVel : Float; 8 | 9 | public function new() 10 | { 11 | super(); 12 | 13 | createUI(); 14 | 15 | addEventListener(flash.events.Event.ENTER_FRAME, onEnterFrame); 16 | } 17 | 18 | private function createUI() 19 | { 20 | // add a black background 21 | var bkg = new flash.display.Shape(); 22 | 23 | bkg.graphics.lineStyle(1.0, 0x000000); 24 | bkg.graphics.beginFill(0xFFFFFF); 25 | bkg.graphics.drawRect(0, 0, 320, 240); 26 | bkg.graphics.endFill(); 27 | 28 | addChild(bkg); 29 | 30 | // add the progress bar frame 31 | frame = new flash.display.Shape(); 32 | 33 | frame.graphics.lineStyle(1.0, 0xFFFFFF); 34 | frame.graphics.drawRect(0, 0, 2 * Def.LOADING_BAR_H_SPACING + Def.LOADING_BAR_WIDTH, 2 * Def.LOADING_BAR_V_SPACING + Def.LOADING_BAR_HEIGHT); 35 | 36 | addChild(frame); 37 | 38 | frame.x = 320 / 2 - frame.width / 2; 39 | frame.y = 240 / 2 - frame.height / 2; 40 | 41 | // add the progress bar 42 | bar = new flash.display.Shape(); 43 | bar.graphics.lineStyle(1.0, 0xFFFFFF); 44 | bar.graphics.beginFill(0xFFFFFF); 45 | bar.graphics.drawRect(0, 0, Def.LOADING_BAR_WIDTH, Def.LOADING_BAR_HEIGHT); 46 | bar.graphics.endFill(); 47 | 48 | addChild(bar); 49 | 50 | bar.x = 320 / 2 - bar.width / 2; 51 | bar.y = 240 / 2 - bar.height / 2; 52 | 53 | bar.scaleX = 0.0; 54 | 55 | barAlpha = 1.0; 56 | barAlphaVel = -0.05; 57 | } 58 | 59 | function onEnterFrame(e: flash.events.Event) 60 | { 61 | var totalBytes = flash.Lib.current.loaderInfo.bytesTotal; 62 | var loadedBytes = flash.Lib.current.loaderInfo.bytesLoaded; 63 | 64 | bar.scaleX = loadedBytes / totalBytes; 65 | 66 | //trace(loadedBytes + "/" + totalBytes); 67 | 68 | // modify the alpha 69 | barAlpha += barAlphaVel; 70 | 71 | if (barAlpha < 0.5) 72 | { 73 | barAlphaVel = 0.05; 74 | barAlpha = 0.5; 75 | } 76 | 77 | if (barAlpha >= 1.0) 78 | { 79 | barAlphaVel = -0.05; 80 | barAlpha = 1.0; 81 | } 82 | 83 | bar.alpha = barAlpha; 84 | frame.alpha = barAlpha; 85 | 86 | if (loadedBytes == totalBytes) 87 | { 88 | // de-activate this control 89 | removeEventListener(flash.events.Event.ENTER_FRAME, onEnterFrame); 90 | } 91 | } 92 | } -------------------------------------------------------------------------------- /neoart/flexi/ToggleButton.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | import flash.display.*; 14 | import flash.events.*; 15 | 16 | public final class ToggleButton extends Button { 17 | private var 18 | m_default : String, 19 | m_selected : String, 20 | m_pressed : Boolean; 21 | 22 | public function ToggleButton(container:DisplayObjectContainer = null, x:Number = 0.0, y:Number = 0.0, caption:String = "", selected:String = "", w:Number = 27.0, h:Number = 19.0) { 23 | m_default = caption; 24 | m_selected = selected == "" ? caption : selected; 25 | super(container, x, y, caption, w, h); 26 | } 27 | 28 | override public function set enabled(value:Boolean):void { 29 | super.enabled = value; 30 | if (value) { 31 | m_state = m_pressed ? Control.PRESSED : Control.REST; 32 | invalidate(Invalidate.STATE); 33 | } 34 | } 35 | 36 | override public function get caption():String { return m_default; } 37 | override public function set caption(value:String):void { 38 | super.caption = m_default = value; 39 | } 40 | 41 | public function get pressed():Boolean { return m_pressed; } 42 | public function set pressed(value:Boolean):void { 43 | if (value == m_pressed) return; 44 | m_pressed = value; 45 | m_state = value ? Control.PRESSED : Control.REST; 46 | invalidate(Invalidate.STATE); 47 | } 48 | 49 | public function get pressedCaption():String { return m_selected; } 50 | public function set pressedCaption(value:String):void { 51 | m_selected = value; 52 | if (m_pressed) super.caption = value; 53 | } 54 | 55 | override protected function draw():void { 56 | super.draw(); 57 | if (!m_enabled) return; 58 | 59 | if (m_pressed) { 60 | m_caption.color = Theme.TOGGLE_LABEL; 61 | m_caption.text = m_selected; 62 | } else { 63 | m_caption.color = Theme.BUTTON_LABEL; 64 | m_caption.text = m_default; 65 | } 66 | 67 | center(); 68 | } 69 | 70 | override protected function mouseDownHandler(e:MouseEvent):void { 71 | m_pressed = Boolean(!m_pressed); 72 | super.mouseDownHandler(e); 73 | } 74 | 75 | override protected function mouseUpHandler(e:MouseEvent):void { 76 | stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 77 | m_state = m_pressed ? Control.PRESSED : Control.REST; 78 | invalidate(Invalidate.STATE); 79 | } 80 | 81 | override protected function rollHandler(e:MouseEvent):void { 82 | if (!m_pressed) super.rollHandler(e); 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /neoart/flod/core/SBPlayer.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core { 13 | import flash.events.*; 14 | import flash.media.*; 15 | import flash.utils.*; 16 | 17 | public class SBPlayer extends EventDispatcher { 18 | public static const 19 | ENCODING : String = "us-ascii"; 20 | public var 21 | mixer : Soundblaster, 22 | channels : int, 23 | version : int, 24 | title : String = "", 25 | length : int, 26 | restart : int, 27 | speed : int, 28 | tempo : int, 29 | loopSong : int, 30 | track : Vector., 31 | counter : int; 32 | protected var 33 | sound : Sound, 34 | soundChan : SoundChannel, 35 | soundPos : Number, 36 | timer : int, 37 | master : int; 38 | 39 | public function SBPlayer(mixer:Soundblaster = null) { 40 | this.mixer = mixer || new Soundblaster(); 41 | this.mixer.player = this; 42 | loopSong = 0; 43 | soundPos = 0.0; 44 | } 45 | 46 | public function load(stream:ByteArray):int { 47 | version = 0; 48 | stream.endian = "littleEndian"; 49 | stream.position = 0; 50 | return version; 51 | } 52 | 53 | public function play(processor:Sound = null):int { 54 | if (!version) return 0; 55 | if (soundPos == 0.0) initialize(); 56 | sound = processor || new Sound(); 57 | sound.addEventListener(SampleDataEvent.SAMPLE_DATA, mixer.mix); 58 | 59 | soundChan = sound.play(soundPos); 60 | soundChan.addEventListener(Event.SOUND_COMPLETE, completeHandler); 61 | soundPos = 0.0; 62 | return 1; 63 | } 64 | 65 | public function pause():void { 66 | if (!version || !soundChan) return; 67 | soundPos = soundChan.position; 68 | removeEvents(); 69 | } 70 | 71 | public function stop():void { 72 | if (!version) return; 73 | if (soundChan) removeEvents(); 74 | soundPos = 0.0; 75 | reset(); 76 | } 77 | 78 | public function process():void { } 79 | 80 | protected function setup():void { 81 | mixer.setup(channels); 82 | } 83 | 84 | protected function initialize():void { 85 | mixer.initialize(); 86 | counter = speed; 87 | timer = 0; 88 | master = 64; 89 | mixer.samplesTick = 110250 / tempo; 90 | } 91 | 92 | protected function reset():void { } 93 | 94 | private function completeHandler(e:Event):void { 95 | stop(); 96 | dispatchEvent(e); 97 | } 98 | 99 | private function removeEvents():void { 100 | soundChan.stop(); 101 | soundChan.removeEventListener(Event.SOUND_COMPLETE, completeHandler); 102 | sound.removeEventListener(SampleDataEvent.SAMPLE_DATA, mixer.mix); 103 | } 104 | } 105 | } -------------------------------------------------------------------------------- /neoart/flexi/Control.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | import flash.display.*; 14 | import flash.events.*; 15 | 16 | public class Control extends Sprite { 17 | public static const 18 | REST : int = 0, 19 | DISABLED : int = 1, 20 | HOVER : int = 2, 21 | HOVER_PRESSED : int = 3, 22 | PRESSED : int = 4; 23 | 24 | protected var 25 | m_enabled : Boolean = true, 26 | m_flags : Invalidate, 27 | m_state : int, 28 | m_width : int, 29 | m_height : int; 30 | 31 | public function Control(container:DisplayObjectContainer, x:Number, y:Number) { 32 | move(x, y); 33 | if (container) container.addChild(this); 34 | initialize(); 35 | m_width = super.width; 36 | m_height = super.height; 37 | } 38 | 39 | public function get enabled():Boolean { return m_enabled; } 40 | public function set enabled(value:Boolean):void { 41 | if (value == m_enabled) return; 42 | m_enabled = value; 43 | m_state = value ? REST : DISABLED; 44 | mouseEnabled = value; 45 | invalidate(Invalidate.STATE); 46 | } 47 | 48 | override public function get width():Number { return m_width; } 49 | override public function set width(value:Number):void { 50 | if (int(value) == m_width) return; 51 | resize(value, m_height); 52 | } 53 | 54 | override public function get height():Number { return m_height; } 55 | override public function set height(value:Number):void { 56 | if (int(value) == m_height) return; 57 | resize(m_width, value); 58 | } 59 | 60 | override public function set x(value:Number):void { 61 | move(value, super.y); 62 | } 63 | 64 | override public function set y(value:Number):void { 65 | move(super.x, value); 66 | } 67 | 68 | public function move(x:Number, y:Number):void { 69 | super.x = Math.round(x); 70 | super.y = Math.round(y); 71 | } 72 | 73 | public function offset(x:Number, y:Number):void { 74 | move(super.x + x, super.y + y); 75 | } 76 | 77 | public function resize(w:Number, h:Number):void { 78 | m_width = Math.round(w); 79 | m_height = Math.round(h); 80 | invalidate(Invalidate.SIZE); 81 | } 82 | 83 | protected function initialize():void { 84 | tabEnabled = false; 85 | m_flags = new Invalidate(); 86 | } 87 | 88 | protected function draw():void { 89 | m_flags.reset(); 90 | } 91 | 92 | protected function invalidate(index:int = Invalidate.ALL):void { 93 | m_flags.invalidate(index); 94 | 95 | if (!m_flags.isInvalid(Invalidate.SET)) { 96 | addEventListener(Event.ENTER_FRAME, invalidateHandler); 97 | m_flags.invalidate(Invalidate.SET); 98 | } 99 | } 100 | 101 | protected function isInvalid(index:int, ...indexes:Array):Boolean { 102 | if (m_flags.isInvalid(index) || m_flags.isInvalid(Invalidate.ALL)) return true; 103 | while (indexes.length > 0) { if (m_flags.isInvalid(indexes.pop())) return true; } 104 | return false; 105 | } 106 | 107 | private function invalidateHandler(e:Event):void { 108 | m_flags.validate(Invalidate.SET); 109 | removeEventListener(Event.ENTER_FRAME, invalidateHandler); 110 | draw(); 111 | } 112 | } 113 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/core/SBPlayer.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core; 13 | 14 | import flash.utils.ByteArray; 15 | import flash.events.EventDispatcher; 16 | import flash.events.Event; 17 | import flash.events.SampleDataEvent; 18 | import flash.media.Sound; 19 | import flash.media.SoundChannel; 20 | import flash.Vector; 21 | 22 | class SBPlayer extends EventDispatcher 23 | { 24 | public static inline var ENCODING : String = "us-ascii"; 25 | 26 | public var mixer : Soundblaster; 27 | public var channels : Int; 28 | public var version : Int; 29 | public var title : String; 30 | public var length : Int; 31 | public var restart : Int; 32 | public var speed : Int; 33 | public var tempo : Int; 34 | public var loopSong : Int; 35 | public var track : Vector; 36 | public var counter : Int; 37 | public var master (default, setMaster) : Int; 38 | 39 | // protected 40 | private var sound : Sound; 41 | private var soundChan : SoundChannel; 42 | private var soundPos : Float; 43 | private var timer : Int; 44 | 45 | public function new(mixer:Soundblaster = null) 46 | { 47 | super(); 48 | 49 | this.mixer = (mixer == null) ? new Soundblaster() : mixer; 50 | this.mixer.player = this; 51 | 52 | loopSong = 0; 53 | soundPos = 0.0; 54 | title = ""; 55 | 56 | master = 64; 57 | } 58 | 59 | public function load(stream:ByteArray) : Int 60 | { 61 | version = 0; 62 | stream.endian = flash.utils.Endian.LITTLE_ENDIAN;//"littleEndian"; 63 | stream.position = 0; 64 | return version; 65 | } 66 | 67 | public function play(processor:Sound = null) : Int 68 | { 69 | // !version 70 | if (version == 0) return 0; 71 | if (soundPos == 0.0) initialize(); 72 | sound = (processor == null) ? new Sound() : processor; 73 | sound.addEventListener(SampleDataEvent.SAMPLE_DATA, mixer.mix); 74 | 75 | soundChan = sound.play(soundPos); 76 | soundChan.addEventListener(Event.SOUND_COMPLETE, completeHandler); 77 | soundPos = 0.0; 78 | return 1; 79 | } 80 | 81 | public function pause() : Void 82 | { 83 | // !version 84 | if (version == 0 || soundChan == null) 85 | { 86 | return; 87 | } 88 | 89 | soundPos = soundChan.position; 90 | removeEvents(); 91 | } 92 | 93 | public function stop() : Void 94 | { 95 | // !version 96 | if (version == 0) return; 97 | if (soundChan != null) removeEvents(); 98 | soundPos = 0.0; 99 | reset(); 100 | } 101 | 102 | public function process() : Void { } 103 | 104 | private function setup() : Void 105 | { 106 | mixer.setup(channels); 107 | } 108 | 109 | private function initialize() : Void 110 | { 111 | mixer.initialize(); 112 | counter = speed; 113 | timer = 0; 114 | mixer.samplesTick = Std.int(110250 / tempo); 115 | 116 | trace(counter); 117 | } 118 | 119 | private function reset() : Void { } 120 | 121 | private function completeHandler(e : Event) : Void 122 | { 123 | stop(); 124 | dispatchEvent(e); 125 | } 126 | 127 | private function removeEvents() : Void 128 | { 129 | soundChan.stop(); 130 | soundChan.removeEventListener(Event.SOUND_COMPLETE, completeHandler); 131 | sound.removeEventListener(SampleDataEvent.SAMPLE_DATA, mixer.mix); 132 | } 133 | 134 | private function setMaster(v : Int) : Int 135 | { 136 | if (v > 64) 137 | { 138 | v = 64; 139 | } 140 | 141 | if (v < 0) 142 | { 143 | v = 0; 144 | } 145 | 146 | master = v; 147 | 148 | return master; 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /haXe Version/neoart/flod/core/SBSample.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core; 13 | 14 | import flash.utils.ByteArray; 15 | import flash.utils.Endian; 16 | //import flash.Vector; 17 | 18 | // TODO: replace Vector with flash.Memory 19 | class SBSample 20 | { 21 | public var name : String; 22 | public var bits : Int; 23 | public var length : Int; 24 | public var loopStart : Int; 25 | public var loopLen : Int; 26 | public var loopMode : Int; 27 | public var volume : Int; 28 | 29 | // haxe port: turn this into flash.Memory 30 | //public var data : Vector; 31 | public var bytes (default, null) : ByteArray; 32 | 33 | public function new() 34 | { 35 | bits = 8; 36 | name = ""; 37 | } 38 | 39 | public function store(stream : ByteArray) : Void 40 | { 41 | var delta : Int = 0; 42 | //var i : Int; 43 | var len : Int = length; 44 | var total : Int; 45 | 46 | // original code: var value : Int 47 | var value : Int; 48 | 49 | //data = new Vector(len, true); 50 | bytes = new ByteArray(); 51 | bytes.endian = Endian.LITTLE_ENDIAN; 52 | 53 | //var dataString : String = ""; 54 | 55 | //trace("sample length: " + data.length); 56 | 57 | if (bits == 8) 58 | { 59 | total = stream.position + len; 60 | // TODO: comparison of Int and UInt 61 | if (total > Std.int(stream.length)) 62 | len = stream.length - stream.position; 63 | 64 | for (i in 0...len) 65 | { 66 | value = stream.readByte() + delta; 67 | 68 | if (value > 127) 69 | { 70 | value -= 256; 71 | } 72 | else if (value < -128) 73 | { 74 | value += 256; 75 | } 76 | 77 | //data[i] = value * 0.0078125; 78 | bytes.writeFloat(value * 0.0078125); 79 | delta = value; 80 | } 81 | } 82 | else 83 | { 84 | total = stream.position + (len << 1); 85 | 86 | // TODO: comparison of Int and UInt 87 | if (total > Std.int(stream.length)) 88 | { 89 | len = (stream.length - stream.position) >> 1; 90 | 91 | trace("length truncated!"); 92 | } 93 | 94 | for (i in 0...len) 95 | { 96 | value = stream.readShort() + delta; 97 | 98 | if (value > 32767) 99 | { 100 | value -= 65536; 101 | } 102 | else if (value < -32768) 103 | { 104 | value += 65536; 105 | } 106 | 107 | //data[i] = value * 0.00003051758; 108 | bytes.writeFloat(value * 0.00003051758); 109 | delta = value; 110 | 111 | //dataString = dataString + " " + data[i]; 112 | } 113 | 114 | //trace(dataString); 115 | } 116 | 117 | fixLength(); 118 | } 119 | 120 | public function fill(count : Int, value : Float) 121 | { 122 | bytes = new ByteArray(); 123 | bytes.endian = Endian.LITTLE_ENDIAN; 124 | 125 | for(i in 0...count) 126 | { 127 | bytes.writeFloat(value); 128 | } 129 | 130 | fixLength(); 131 | } 132 | 133 | // haxe.Memory needs a ByteArray with at least 1024 bytes in it 134 | // need to fill in the rest of the bytes 135 | private function fixLength() 136 | { 137 | if (bytes == null) 138 | { 139 | return; 140 | } 141 | 142 | if (bytes.position < 1024) 143 | { 144 | var fillCount : Int = ((1024 - bytes.position) >> 2) + 1; 145 | 146 | trace("fill bytes: " + fillCount); 147 | 148 | for(i in 0...fillCount) 149 | { 150 | bytes.writeFloat(0.0); 151 | } 152 | } 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /neoart/flip/ZipFile.as: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | import flash.utils.*; 14 | 15 | public final class ZipFile { 16 | public static const 17 | ENDIAN : String = "littleEndian"; 18 | public var 19 | entries : Vector.; 20 | private const 21 | ERROR1 : String = "The archive is either in unknown format or damaged.", 22 | ERROR2 : String = "Unexpected end of archive.", 23 | ERROR3 : String = "Encrypted archive not supported.", 24 | ERROR4 : String = "Compression method not supported."; 25 | private var 26 | stream : ByteArray; 27 | 28 | public function ZipFile(stream:ByteArray) { 29 | this.stream = stream; 30 | this.stream.endian = ENDIAN; 31 | parseEnd(); 32 | } 33 | 34 | public function uncompress(entry:ZipEntry):ByteArray { 35 | var buffer:ByteArray, inflater:Inflater, size:int; 36 | if (entry == null) return null; 37 | 38 | stream.position = entry.offset + 28; 39 | size = stream.readUnsignedShort(); 40 | stream.position = 30 + entry.name.length + size; 41 | 42 | buffer = new ByteArray(); 43 | buffer.endian = ENDIAN; 44 | if (entry.compressed > 0) stream.readBytes(buffer, 0, entry.compressed); 45 | 46 | switch (entry.method) { 47 | case 0: 48 | return buffer; 49 | case 8: 50 | inflater = new Inflater(); 51 | inflater.input = buffer; 52 | inflater.inflate(); 53 | return inflater.output; 54 | default: 55 | throw new Error(ERROR4, 4); 56 | break; 57 | } 58 | } 59 | 60 | private function parseCentral():void { 61 | var entry:ZipEntry, i:int, header:ByteArray = new ByteArray, len:int = entries.length, size:int; 62 | header.endian = ENDIAN; 63 | 64 | for (i = 0; i < len; ++i) { 65 | stream.readBytes(header, 0, 46); 66 | if (header.readUnsignedInt() != 0x02014b50) throw new Error(ERROR2, 2); 67 | header.position += 24; 68 | 69 | size = header.readUnsignedShort(); 70 | if (size == 0) throw new Error(ERROR2, 2); 71 | entry = new ZipEntry(); 72 | entry.name = stream.readUTFBytes(size); 73 | 74 | size = header.readUnsignedShort(); 75 | if (size > 0) { 76 | entry.extra = new ByteArray(); 77 | stream.readBytes(entry.extra, 0, size); 78 | } 79 | 80 | stream.position += header.readUnsignedShort(); 81 | header.position = 6; 82 | entry.version = header.readUnsignedShort(); 83 | 84 | entry.flag = header.readUnsignedShort(); 85 | if ((entry.flag & 1) == 1) throw new Error(ERROR3, 3); 86 | 87 | entry.method = header.readUnsignedShort(); 88 | entry.time = header.readUnsignedInt(); 89 | entry.crc = header.readUnsignedInt(); 90 | entry.compressed = header.readUnsignedInt(); 91 | entry.size = header.readUnsignedInt(); 92 | 93 | header.position = 42; 94 | entry.offset = header.readUnsignedInt(); 95 | entries[i] = entry; 96 | } 97 | } 98 | 99 | private function parseEnd():void { 100 | var i:int = stream.length - 22, l:int = (i - 65536) > 0 ? i - 65536 : 0; 101 | 102 | do { 103 | if (stream[i] != 0x50) continue; 104 | stream.position = i; 105 | if (stream.readUnsignedInt() == 0x06054b50) break; 106 | } while (--i > l); 107 | 108 | if (i == l) throw new Error(ERROR1, 1); 109 | 110 | stream.position = i + 10; 111 | entries = new Vector.(stream.readUnsignedShort(), true); 112 | stream.position = i + 16; 113 | stream.position = stream.readUnsignedInt(); 114 | parseCentral(); 115 | } 116 | } 117 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flip/ZipFile.hx: -------------------------------------------------------------------------------- 1 | /* Flip 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flip { 13 | import flash.utils.*; 14 | 15 | public final class ZipFile { 16 | public static const 17 | ENDIAN : String = "littleEndian"; 18 | public var 19 | entries : Vector.; 20 | private const 21 | ERROR1 : String = "The archive is either in unknown format or damaged.", 22 | ERROR2 : String = "Unexpected end of archive.", 23 | ERROR3 : String = "Encrypted archive not supported.", 24 | ERROR4 : String = "Compression method not supported."; 25 | private var 26 | stream : ByteArray; 27 | 28 | public function ZipFile(stream:ByteArray) { 29 | this.stream = stream; 30 | this.stream.endian = ENDIAN; 31 | parseEnd(); 32 | } 33 | 34 | public function uncompress(entry:ZipEntry):ByteArray { 35 | var buffer:ByteArray, inflater:Inflater, size:int; 36 | if (entry == null) return null; 37 | 38 | stream.position = entry.offset + 28; 39 | size = stream.readUnsignedShort(); 40 | stream.position = 30 + entry.name.length + size; 41 | 42 | buffer = new ByteArray(); 43 | buffer.endian = ENDIAN; 44 | if (entry.compressed > 0) stream.readBytes(buffer, 0, entry.compressed); 45 | 46 | switch (entry.method) { 47 | case 0: 48 | return buffer; 49 | case 8: 50 | inflater = new Inflater(); 51 | inflater.input = buffer; 52 | inflater.inflate(); 53 | return inflater.output; 54 | default: 55 | throw new Error(ERROR4, 4); 56 | break; 57 | } 58 | } 59 | 60 | private function parseCentral():void { 61 | var entry:ZipEntry, i:int, header:ByteArray = new ByteArray, len:int = entries.length, size:int; 62 | header.endian = ENDIAN; 63 | 64 | for (i = 0; i < len; ++i) { 65 | stream.readBytes(header, 0, 46); 66 | if (header.readUnsignedInt() != 0x02014b50) throw new Error(ERROR2, 2); 67 | header.position += 24; 68 | 69 | size = header.readUnsignedShort(); 70 | if (size == 0) throw new Error(ERROR2, 2); 71 | entry = new ZipEntry(); 72 | entry.name = stream.readUTFBytes(size); 73 | 74 | size = header.readUnsignedShort(); 75 | if (size > 0) { 76 | entry.extra = new ByteArray(); 77 | stream.readBytes(entry.extra, 0, size); 78 | } 79 | 80 | stream.position += header.readUnsignedShort(); 81 | header.position = 6; 82 | entry.version = header.readUnsignedShort(); 83 | 84 | entry.flag = header.readUnsignedShort(); 85 | if ((entry.flag & 1) == 1) throw new Error(ERROR3, 3); 86 | 87 | entry.method = header.readUnsignedShort(); 88 | entry.time = header.readUnsignedInt(); 89 | entry.crc = header.readUnsignedInt(); 90 | entry.compressed = header.readUnsignedInt(); 91 | entry.size = header.readUnsignedInt(); 92 | 93 | header.position = 42; 94 | entry.offset = header.readUnsignedInt(); 95 | entries[i] = entry; 96 | } 97 | } 98 | 99 | private function parseEnd():void { 100 | var i:int = stream.length - 22, l:int = (i - 65536) > 0 ? i - 65536 : 0; 101 | 102 | do { 103 | if (stream[i] != 0x50) continue; 104 | stream.position = i; 105 | if (stream.readUnsignedInt() == 0x06054b50) break; 106 | } while (--i > l); 107 | 108 | if (i == l) throw new Error(ERROR1, 1); 109 | 110 | stream.position = i + 10; 111 | entries = new Vector.(stream.readUnsignedShort(), true); 112 | stream.position = i + 16; 113 | stream.position = stream.readUnsignedInt(); 114 | parseCentral(); 115 | } 116 | } 117 | } -------------------------------------------------------------------------------- /neoart/flexi/Label.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | import flash.display.*; 14 | import flash.text.*; 15 | 16 | public class Label extends Control { 17 | protected var 18 | m_autoSize : Boolean = true, 19 | m_color : int, 20 | m_field : TextField, 21 | m_format : TextFormat, 22 | m_metrics : TextLineMetrics; 23 | 24 | public function Label(container:DisplayObjectContainer = null, x:Number = 0.0, y:Number = 0.0, text:String = "") { 25 | super(container, x, y); 26 | this.text = text; 27 | } 28 | 29 | public function get align():String { return m_format.align; } 30 | public function set align(value:String):void { 31 | if (value == m_format.align) return; 32 | m_format.align = value; 33 | m_field.setTextFormat(m_format); 34 | m_field.width = m_width; 35 | m_field.height = m_height; 36 | 37 | switch (m_format.align) { 38 | case "center": 39 | m_field.scrollH = m_field.maxScrollH >> 1; 40 | break; 41 | case "right": 42 | m_field.scrollH = m_field.maxScrollH; 43 | break; 44 | default: 45 | m_field.scrollH = 0; 46 | break; 47 | } 48 | } 49 | 50 | public function get autoSize():Boolean { return m_autoSize; } 51 | public function set autoSize(value:Boolean):void { 52 | if (value == m_autoSize) return; 53 | m_autoSize = value; 54 | 55 | if (value) { 56 | m_field.autoSize = "left"; 57 | resize(m_field.width, m_field.height); 58 | } else { 59 | m_field.autoSize = "none"; 60 | } 61 | } 62 | 63 | public function get color():int { return m_color; } 64 | public function set color(value:int):void { 65 | m_format.color = m_color = value; 66 | m_field.setTextFormat(m_format); 67 | } 68 | 69 | override public function set enabled(value:Boolean):void { 70 | super.enabled = value; 71 | mouseEnabled = false; 72 | m_format.color = value ? m_color : Theme.LABEL_DISABLED; 73 | m_field.setTextFormat(m_format); 74 | } 75 | 76 | public function get font():String { return m_format.font; } 77 | public function set font(name:String):void { 78 | m_format.font = name; 79 | m_field.setTextFormat(m_format); 80 | resize(m_field.width, m_field.height); 81 | } 82 | 83 | public function get fontSize():int { return int(m_format.size); } 84 | public function set fontSize(value:int):void { 85 | m_format.size = value; 86 | m_field.setTextFormat(m_format); 87 | resize(m_field.width, m_field.height); 88 | } 89 | 90 | public function get letterSpacing():int { return int(m_format.letterSpacing); } 91 | public function set letterSpacing(value:int):void { 92 | m_format.letterSpacing = value; 93 | m_field.setTextFormat(m_format); 94 | resize(m_field.width, m_field.height); 95 | } 96 | 97 | public function get text():String { return m_field.text; } 98 | public function set text(value:String):void { 99 | m_field.text = value; 100 | m_field.setTextFormat(m_format); 101 | resize(m_field.width, m_field.height); 102 | } 103 | 104 | public function get textWidth():int { 105 | return m_metrics.width; 106 | } 107 | 108 | public function get textHeight():int { 109 | return m_metrics.height; 110 | } 111 | 112 | override public function resize(w:Number, h:Number):void { 113 | m_metrics = m_field.getLineMetrics(0); 114 | super.resize(w, h); 115 | } 116 | 117 | override protected function initialize():void { 118 | super.initialize(); 119 | mouseEnabled = false; 120 | 121 | m_format = new TextFormat(); 122 | m_format.color = m_color = Theme.LABEL_NORMAL; 123 | m_format.font = Theme.FONT_NAME; 124 | m_format.size = Theme.FONT_SIZE; 125 | 126 | m_field = new TextField(); 127 | m_field.antiAliasType = "normal"; 128 | m_field.autoSize = "left"; 129 | m_field.defaultTextFormat = m_format; 130 | m_field.embedFonts = true; 131 | m_field.gridFitType = "pixel"; 132 | m_field.mouseEnabled = false; 133 | m_field.selectable = false; 134 | m_field.text = "Label"; 135 | m_field.wordWrap = false; 136 | 137 | addChild(m_field); 138 | resize(m_field.width, m_field.height); 139 | } 140 | } 141 | } -------------------------------------------------------------------------------- /neoart/flod/xm/XM.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | 14 | public final class XM { 15 | public static const 16 | FLAG_PERIOD : int = 1, 17 | FLAG_VOLUME : int = 2, 18 | FLAG_PANNING : int = 4, 19 | FLAG_TRIGGER : int = 8, 20 | FLAG_STOP : int = 16, 21 | 22 | NOTE_KEYOFF : int = 97, 23 | 24 | ENVELOPE_OFF : int = 0, 25 | ENVELOPE_ON : int = 1, 26 | ENVELOPE_SUSTAIN : int = 2, 27 | ENVELOPE_LOOP : int = 4, 28 | 29 | FX_ARPEGGIO : int = 0, 30 | FX_PORTAMENTO_UP : int = 1, 31 | FX_PORTAMENTO_DOWN : int = 2, 32 | FX_TONE_PORTAMENTO : int = 3, 33 | FX_VIBRATO : int = 4, 34 | FX_TONE_PORTAMENTO_VOLUME_SLIDE : int = 5, 35 | FX_VIBRATO_VOLUME_SLIDE : int = 6, 36 | FX_TREMOLO : int = 7, 37 | FX_SET_PANNING : int = 8, 38 | FX_SAMPLE_OFFSET : int = 9, 39 | FX_VOLUME_SLIDE : int = 10, 40 | FX_POSITION_JUMP : int = 11, 41 | FX_SET_VOLUME : int = 12, 42 | FX_PATTERN_BREAK : int = 13, 43 | FX_EXTENDED_EFFECTS : int = 14, 44 | FX_SET_SPEED : int = 15, 45 | FX_SET_GLOBAL_VOLUME : int = 16, 46 | FX_GLOBAL_VOLUME_SLIDE : int = 17, 47 | FX_KEYOFF : int = 20, 48 | FX_SET_ENVELOPE_POSITION : int = 21, 49 | FX_PANNING_SLIDE : int = 24, 50 | FX_MULTI_RETRIG_NOTE : int = 27, 51 | FX_TREMOR : int = 29, 52 | FX_EXTRA_FINE_PORTAMENTO : int = 31, 53 | 54 | EX_FINE_PORTAMENTO_UP : int = 1, 55 | EX_FINE_PORTAMENTO_DOWN : int = 2, 56 | EX_GLISSANDO_CONTROL : int = 3, 57 | EX_VIBRATO_CONTROL : int = 4, 58 | EX_SET_FINETUNE : int = 5, 59 | EX_PATTERN_LOOP : int = 6, 60 | EX_TREMOLO_CONTROL : int = 7, 61 | EX_RETRIG_NOTE : int = 9, 62 | EX_FINE_VOLUME_SLIDE_UP : int = 10, 63 | EX_FINE_VOLUME_SLIDE_DOWN : int = 11, 64 | EX_NOTE_CUT : int = 12, 65 | EX_NOTE_DELAY : int = 13, 66 | EX_PATTERN_DELAY : int = 14, 67 | 68 | VX_VOLUME_SLIDE_DOWN : int = 6, 69 | VX_VOLUME_SLIDE_UP : int = 7, 70 | VX_FINE_VOLUME_SLIDE_DOWN : int = 8, 71 | VX_FINE_VOLUME_SLIDE_UP : int = 9, 72 | VX_SET_VIBRATO_SPEED : int = 10, 73 | VX_VIBRATO : int = 11, 74 | VX_SET_PANNING : int = 12, 75 | VX_PANNING_SLIDE_LEFT : int = 13, 76 | VX_PANNING_SLIDE_RIGHT : int = 14, 77 | VX_TONE_PORTAMENTO : int = 15, 78 | 79 | MOD_SINE : Vector. = Vector.([ 80 | 0, 24, 49, 74, 97, 120, 141, 161, 180, 197, 212, 224, 235, 244, 250, 253, 81 | 255, 253, 250, 244, 235, 224, 212, 197, 180, 161, 141, 120, 97, 74, 49, 24]), 82 | 83 | FT2_SINE : Vector. = Vector.([ 84 | 0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23, 85 | -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44, 86 | -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59, 87 | -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64, 88 | -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60, 89 | -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46, 90 | -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26, 91 | -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2, 92 | 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23, 93 | 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44, 94 | 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 95 | 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 96 | 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60, 97 | 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 98 | 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26, 99 | 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2]); 100 | } 101 | } -------------------------------------------------------------------------------- /neoart/flexi/Button.as: -------------------------------------------------------------------------------- 1 | /* Flexi 1.0 2 | 2010/05/12 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flexi { 13 | import flash.display.*; 14 | import flash.events.*; 15 | import flash.utils.*; 16 | 17 | public class Button extends Control { 18 | protected var 19 | m_autoRepeat : Boolean, 20 | m_caption : Label, 21 | m_timer : Timer, 22 | m_x : int, 23 | m_y : int; 24 | 25 | public function Button(container:DisplayObjectContainer = null, x:Number = 0.0, y:Number = 0.0, caption:String = "", w:Number = 72.0, h:Number = 19.0) { 26 | super(container, x, y); 27 | m_caption.text = caption; 28 | enabled = false; 29 | resize(w, h); 30 | } 31 | 32 | public function get autoRepeat():Boolean { return m_autoRepeat; } 33 | public function set autoRepeat(value:Boolean):void { 34 | if (value == m_autoRepeat) return; 35 | m_autoRepeat = value; 36 | 37 | if (value) { 38 | m_timer = new Timer(240, 1); 39 | m_timer.addEventListener(TimerEvent.TIMER, timerHandler); 40 | } else if (m_timer) { 41 | m_timer.removeEventListener(TimerEvent.TIMER, timerHandler); 42 | m_timer = null; 43 | } 44 | } 45 | 46 | public function get caption():String { return m_caption.text; } 47 | public function set caption(value:String):void { 48 | m_caption.text = value; 49 | center(); 50 | } 51 | 52 | override public function set enabled(value:Boolean):void { 53 | super.enabled = m_caption.enabled = value; 54 | } 55 | 56 | public function disableHover():Function { 57 | removeEventListener(MouseEvent.ROLL_OVER, rollHandler); 58 | removeEventListener(MouseEvent.ROLL_OUT, rollHandler); 59 | return rollHandler; 60 | } 61 | 62 | override public function resize(w:Number, h:Number):void { 63 | super.resize(w, h); 64 | center(); 65 | } 66 | 67 | override protected function initialize():void { 68 | super.initialize(); 69 | m_caption = new Label(this); 70 | m_caption.color = Theme.BUTTON_LABEL; 71 | 72 | addEventListener(MouseEvent.ROLL_OVER, rollHandler); 73 | addEventListener(MouseEvent.ROLL_OUT, rollHandler); 74 | addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 75 | } 76 | 77 | protected function center():void { 78 | m_x = m_caption.x = (m_width - m_caption.width) >> 1; 79 | m_y = m_caption.y = ((m_height - m_caption.height) >> 1) + 1; 80 | } 81 | 82 | override protected function draw():void { 83 | var g:Graphics = graphics, h:int = m_height, w:int = m_width; 84 | 85 | if (isInvalid(Invalidate.SIZE, Invalidate.STATE)) { 86 | g.clear(); 87 | g.beginFill(Theme.BUTTON_STATES[m_state][0]); 88 | 89 | if (m_state >= Control.HOVER_PRESSED) { 90 | graphics.drawRect(0, 0, w, h); 91 | } else { 92 | g.drawRect(0, 0, w - 1, 1); 93 | g.drawRect(0, 1, 1, h - 2); 94 | g.beginFill(Theme.BUTTON_STATES[m_state][1]); 95 | g.drawRect(1, h - 1, w - 1, 1); 96 | g.drawRect(w - 1, 1, 1, h - 2); 97 | } 98 | 99 | g.beginFill(Theme.BUTTON_STATES[m_state][2]); 100 | g.drawRect(1, 1, w - 2, h - 2); 101 | g.endFill(); 102 | 103 | if (m_state == Control.HOVER_PRESSED) m_caption.offset(1, 1); 104 | else m_caption.move(m_x, m_y); 105 | } 106 | 107 | super.draw(); 108 | } 109 | 110 | protected function mouseDownHandler(e:MouseEvent):void { 111 | stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 112 | m_state = Control.HOVER_PRESSED; 113 | invalidate(Invalidate.STATE); 114 | if (m_autoRepeat) m_timer.start(); 115 | } 116 | 117 | protected function mouseUpHandler(e:MouseEvent):void { 118 | stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 119 | if (m_autoRepeat) endPress(); 120 | m_state = e.target == this ? Control.HOVER : Control.REST; 121 | invalidate(Invalidate.STATE); 122 | } 123 | 124 | protected function rollHandler(e:MouseEvent):void { 125 | if (m_autoRepeat) endPress(); 126 | if (m_enabled) { 127 | m_state = e.type == MouseEvent.ROLL_OUT ? Control.REST : Control.HOVER; 128 | invalidate(Invalidate.STATE); 129 | } 130 | } 131 | 132 | private function timerHandler(e:TimerEvent):void { 133 | dispatchEvent(new MouseEvent(MouseEvent.CLICK)); 134 | m_timer.reset(); 135 | m_timer.delay = 80; 136 | m_timer.start(); 137 | } 138 | 139 | private function endPress():void { 140 | m_timer.reset(); 141 | m_timer.delay = 240; 142 | } 143 | } 144 | } -------------------------------------------------------------------------------- /neoart/flectrum/SoundEx.as: -------------------------------------------------------------------------------- 1 | /* Flectrum version 1.1 2 | 2009/08/31 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flectrum { 13 | import flash.events.*; 14 | import flash.media.*; 15 | import flash.utils.*; 16 | 17 | public class SoundEx extends Sound { 18 | public static const SOUND_START:String = "soundStart"; 19 | public static const SOUND_STOP: String = "soundStop"; 20 | 21 | public static const SPECTRUM_LEFT: String = "left"; 22 | public static const SPECTRUM_RIGHT: String = "right"; 23 | public static const SPECTRUM_BOTH: String = "both"; 24 | public static const SPECTRUM_DOUBLE:String = "double"; 25 | 26 | public static const METHOD_ADD: String = "add"; 27 | public static const METHOD_SAMPLE:String = "sample"; 28 | 29 | public var soundChannel:SoundChannel; 30 | public var fourier:Boolean; 31 | public var stretchFactor:int; 32 | public var spectrum:String; 33 | 34 | protected var values:ByteArray; 35 | protected var vector:Vector.; 36 | 37 | public function SoundEx(fourier:Boolean = false, stretchFactor:int = 2) { 38 | this.fourier = fourier; 39 | this.stretchFactor = stretchFactor; 40 | values = new ByteArray(); 41 | vector = new Vector.(); 42 | super(); 43 | } 44 | 45 | override public function play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel { 46 | soundChannel = super.play(startTime, loops, sndTransform); 47 | soundChannel.addEventListener(Event.SOUND_COMPLETE, completeHandler); 48 | dispatchEvent(new Event(SOUND_START)); 49 | return soundChannel; 50 | } 51 | 52 | public function stop():void { 53 | if (!soundChannel) return; 54 | soundChannel.stop(); 55 | dispatchEvent(new Event(SOUND_STOP)); 56 | soundChannel = null; 57 | } 58 | 59 | public function addMono(columns:int):Vector. { 60 | var i:int, j:int, l:int, o:Number = 256 / columns, p:Number = 0, s:Number, t:Number; 61 | SoundMixer.computeSpectrum(values, fourier, stretchFactor); 62 | 63 | switch (spectrum) { 64 | case SPECTRUM_BOTH: o *= 2; 65 | break; 66 | case SPECTRUM_DOUBLE: columns <<= 1; 67 | break; 68 | case SPECTRUM_RIGHT: values.position = 1024; 69 | break; 70 | } 71 | vector.length = columns; 72 | 73 | for (i = 0; i < columns; ++i) { 74 | t = 0; 75 | l = (((Math.ceil(p += o) >> 2) << 4) - values.position) >> 2; 76 | for (j = 0; j < l; ++j) { 77 | if ((s = values.readFloat()) < 0) s = -s; 78 | t += s; 79 | } 80 | t /= l; 81 | vector[i] = t * (2 - t); 82 | } 83 | return vector; 84 | } 85 | 86 | public function addStereo(columns:int):Vector. { 87 | var c:int, i:int, j:int, l:int, o:Number = 256 / columns, p:Number = 0, s:Number, t:Number; 88 | SoundMixer.computeSpectrum(values, fourier, stretchFactor); 89 | vector.length = columns; 90 | 91 | for (i = 0; i < columns; ++i) { 92 | t = 0; 93 | l = (((Math.ceil(p += o) >> 2) << 4) - values.position) >> 2; 94 | 95 | for (j = 0; j < l; ++j) { 96 | if ((s = values.readFloat()) < 0) s = -s; 97 | t += s; 98 | values.position = 1024 + c; 99 | if ((s = values.readFloat()) < 0) s = -s; 100 | t += s; 101 | values.position = (c += 4); 102 | } 103 | t /= (l << 1); 104 | vector[i] = t * (2 - t); 105 | } 106 | return vector; 107 | } 108 | 109 | public function sampleMono(columns:int):Vector. { 110 | var i:int, o:Number = 256 / columns, p:Number = 0, s:Number; 111 | SoundMixer.computeSpectrum(values, fourier, stretchFactor); 112 | 113 | switch (spectrum) { 114 | case SPECTRUM_BOTH: o *= 2; 115 | break; 116 | case SPECTRUM_DOUBLE: columns <<= 1; 117 | break; 118 | case SPECTRUM_RIGHT: values.position = p = 1024; 119 | break; 120 | } 121 | vector.length; 122 | 123 | for (i = 0; i < columns; ++i) { 124 | if ((s = values.readFloat()) < 0) s = -s; 125 | vector[i] = s * (2 - s); 126 | values.position = Math.ceil(p += o) << 2; 127 | } 128 | return vector; 129 | } 130 | 131 | public function sampleStereo(columns:int):Vector. { 132 | var i:int, o:Number = 256 / columns, p:Number = 0, s:Number, t:Number; 133 | SoundMixer.computeSpectrum(values, fourier, stretchFactor); 134 | vector.length = columns; 135 | 136 | for (i = 0; i < columns; ++i) { 137 | if ((s = values.readFloat()) < 0) s = -s; 138 | t = s; 139 | values.position = 1024 + (Math.ceil(p) << 2); 140 | if ((s = values.readFloat()) < 0) s = -s; 141 | t += s; 142 | values.position = Math.ceil(p += o) << 2; 143 | t *= 0.5; 144 | vector[i] = t * (2 - t); 145 | } 146 | return vector; 147 | } 148 | 149 | protected function completeHandler(e:Event):void { 150 | soundChannel.removeEventListener(Event.SOUND_COMPLETE, completeHandler); 151 | dispatchEvent(e); 152 | soundChannel = null; 153 | } 154 | 155 | public function get stereoPeak():Number { 156 | if (!soundChannel) return 0; 157 | return (soundChannel.leftPeak + soundChannel.rightPeak) * 0.5; 158 | } 159 | } 160 | } -------------------------------------------------------------------------------- /neoart/flectrum/Split.as: -------------------------------------------------------------------------------- 1 | /* Flectrum version 1.1 2 | 2009/08/31 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flectrum { 13 | import flash.display.*; 14 | import flash.geom.*; 15 | 16 | public class Split extends Visualizer { 17 | private var columns:int; 18 | 19 | public function Split() { 20 | super(); 21 | } 22 | 23 | override internal function override():void { 24 | flectrum.m_spectrum = SoundEx.SPECTRUM_BOTH; 25 | flectrum.stereo = false; 26 | } 27 | 28 | override internal function meterUpdate(spectrum:Vector.):void { 29 | var h:int, i:int, s:Number; 30 | sourceRect.x = 0; 31 | buffer.fillRect(buffer.rect, 0); 32 | 33 | for (i = 0; i < flectrum.m_columns; ++i) { 34 | s = spectrum[i]; 35 | if (s > levels[i]) levels[i] = s; 36 | h = Math.ceil(levels[i] * flectrum.m_rows) * sectionHeight; 37 | if (i >= columns) sourceRect.y = 0; 38 | else sourceRect.y = m_height - h; 39 | sourceRect.height = h; 40 | buffer.fillRect(sourceRect, 0xff000000); 41 | 42 | sourceRect.x += sectionWidth; 43 | levels[i] -= flectrum.m_decay; 44 | } 45 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 46 | } 47 | 48 | override internal function peaksUpdate(spectrum:Vector.):void { 49 | var h:int, i:int, s:Number 50 | sourceRect.x = 0; 51 | buffer.fillRect(buffer.rect, 0); 52 | 53 | for (i = 0; i < flectrum.m_columns; ++i) { 54 | s = spectrum[i]; 55 | if (s > meters[i]) meters[i] = s; 56 | h = Math.ceil(meters[i] * flectrum.m_rows) * sectionHeight; 57 | if (i >= columns) { 58 | sourceRect.y = 0; 59 | sourceRect.height = h; 60 | } else { 61 | sourceRect.y = m_height - h; 62 | sourceRect.height = h; 63 | } 64 | buffer.fillRect(sourceRect, 0xff000000); 65 | 66 | if (s > levels[i]) { 67 | levels[i] = s; 68 | if (i >= columns) sourceRect.y -= sectionHeight; 69 | } else { 70 | h = Math.ceil(levels[i] * flectrum.m_rows) * sectionHeight; 71 | if (i >= columns) sourceRect.y = h - sectionHeight; 72 | else sourceRect.y = m_height - h; 73 | } 74 | sourceRect.height = flectrum.m_rowSize; 75 | buffer.fillRect(sourceRect, flectrum.m_peaksAlpha); 76 | 77 | sourceRect.x += sectionWidth; 78 | meters[i] -= flectrum.m_decay; 79 | levels[i] -= flectrum.m_peaksDecay; 80 | } 81 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 82 | } 83 | 84 | override internal function trailUpdate(spectrum:Vector.):void { 85 | var h:int, i:int; 86 | sourceRect.x = 0; 87 | buffer.fillRect(buffer.rect, flectrum.m_trailAlpha); 88 | bitmapData.copyPixels(bitmapData, bitmapData.rect, destPoint, buffer); 89 | buffer.fillRect(buffer.rect, 0); 90 | 91 | for (i = 0; i < flectrum.m_columns; ++i) { 92 | h = Math.ceil(spectrum[i] * flectrum.m_rows) * sectionHeight; 93 | if (i >= columns) sourceRect.y = 0; 94 | else sourceRect.y = m_height - h; 95 | sourceRect.height = h; 96 | buffer.fillRect(sourceRect, 0xff000000); 97 | sourceRect.x += sectionWidth; 98 | } 99 | bitmapData.copyPixels(input, input.rect, destPoint, buffer, null, true); 100 | } 101 | 102 | override protected function clone():void { 103 | var i:int, v:Vector.; 104 | 105 | if ((flectrum.m_columns & 1) != 0) { 106 | flectrum.m_columns--; 107 | m_width -= sectionWidth; 108 | } 109 | buffer = new BitmapData(m_width, flectrum.meter.height, true, 0); 110 | buffer.lock(); 111 | destPoint.x = 0; 112 | columns = flectrum.m_columns >> 1; 113 | 114 | for (i = 0; i < columns; ++i) { 115 | buffer.copyPixels(flectrum.meter, flectrum.meter.rect, destPoint); 116 | destPoint.x += sectionWidth; 117 | } 118 | v = scale(true, true); 119 | 120 | sourceRect.x = columns * sectionWidth; 121 | sourceRect.y = 0; 122 | sourceRect.width = flectrum.meter.width; 123 | sourceRect.height = flectrum.meter.height; 124 | 125 | for (i = columns; i < flectrum.m_columns; ++i) { 126 | buffer.setVector(sourceRect, v); 127 | sourceRect.x += sectionWidth; 128 | } 129 | levels = new Vector.(flectrum.m_columns, true); 130 | meters = new Vector.(flectrum.m_columns, true); 131 | finalizeClone(); 132 | } 133 | 134 | override protected function draw():void { 135 | var s:Shape = new Shape(), g:Graphics = s.graphics, m:Matrix = new Matrix(), w:int; 136 | 137 | if ((flectrum.m_columns & 1) != 0) { 138 | flectrum.m_columns--; 139 | m_width -= sectionWidth; 140 | } 141 | w = m_width >> 1; 142 | columns = flectrum.m_columns >> 1; 143 | 144 | m.createGradientBox(w, m_height, Math.PI * 0.5, 0, 0); 145 | g.beginGradientFill("linear", flectrum.m_colors[0], flectrum.m_alphas[0], flectrum.m_ratios[0], m); 146 | g.drawRect(0, 0, w, m_height); 147 | 148 | m.createGradientBox(w, m_height, Math.PI * 1.5, w, 0); 149 | g.beginGradientFill("linear", flectrum.m_colors[1], flectrum.m_alphas[1], flectrum.m_ratios[1], m); 150 | g.drawRect(w, 0, w, m_height); 151 | 152 | levels = new Vector.(flectrum.m_columns, true); 153 | meters = new Vector.(flectrum.m_columns, true); 154 | finalizeDraw(s); 155 | } 156 | } 157 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XM.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import flash.Vector; 15 | 16 | // TODO: replace MOD_SINE and FT2_SINE with Memory 17 | @final class XM 18 | { 19 | public static inline var FLAG_PERIOD : Int = 1; 20 | public static inline var FLAG_VOLUME : Int = 2; 21 | public static inline var FLAG_PANNING : Int = 4; 22 | public static inline var FLAG_TRIGGER : Int = 8; 23 | public static inline var FLAG_STOP : Int = 16; 24 | 25 | public static inline var NOTE_KEYOFF : Int = 97; 26 | 27 | public static inline var ENVELOPE_OFF : Int = 0; 28 | public static inline var ENVELOPE_ON : Int = 1; 29 | public static inline var ENVELOPE_SUSTAIN : Int = 2; 30 | public static inline var ENVELOPE_LOOP : Int = 4; 31 | 32 | public static inline var FX_ARPEGGIO : Int = 0; 33 | public static inline var FX_PORTAMENTO_UP : Int = 1; 34 | public static inline var FX_PORTAMENTO_DOWN : Int = 2; 35 | public static inline var FX_TONE_PORTAMENTO : Int = 3; 36 | public static inline var FX_VIBRATO : Int = 4; 37 | public static inline var FX_TONE_PORTAMENTO_VOLUME_SLIDE : Int = 5; 38 | public static inline var FX_VIBRATO_VOLUME_SLIDE : Int = 6; 39 | public static inline var FX_TREMOLO : Int = 7; 40 | public static inline var FX_SET_PANNING : Int = 8; 41 | public static inline var FX_SAMPLE_OFFSET : Int = 9; 42 | public static inline var FX_VOLUME_SLIDE : Int = 10; 43 | public static inline var FX_POSITION_JUMP : Int = 11; 44 | public static inline var FX_SET_VOLUME : Int = 12; 45 | public static inline var FX_PATTERN_BREAK : Int = 13; 46 | public static inline var FX_EXTENDED_EFFECTS : Int = 14; 47 | public static inline var FX_SET_SPEED : Int = 15; 48 | public static inline var FX_SET_GLOBAL_VOLUME : Int = 16; 49 | public static inline var FX_GLOBAL_VOLUME_SLIDE : Int = 17; 50 | public static inline var FX_KEYOFF : Int = 20; 51 | public static inline var FX_SET_ENVELOPE_POSITION : Int = 21; 52 | public static inline var FX_PANNING_SLIDE : Int = 24; 53 | public static inline var FX_MULTI_RETRIG_NOTE : Int = 27; 54 | public static inline var FX_TREMOR : Int = 29; 55 | public static inline var FX_EXTRA_FINE_PORTAMENTO : Int = 31; 56 | 57 | public static inline var EX_FINE_PORTAMENTO_UP : Int = 1; 58 | public static inline var EX_FINE_PORTAMENTO_DOWN : Int = 2; 59 | public static inline var EX_GLISSANDO_CONTROL : Int = 3; 60 | public static inline var EX_VIBRATO_CONTROL : Int = 4; 61 | public static inline var EX_SET_FINETUNE : Int = 5; 62 | public static inline var EX_PATTERN_LOOP : Int = 6; 63 | public static inline var EX_TREMOLO_CONTROL : Int = 7; 64 | public static inline var EX_RETRIG_NOTE : Int = 9; 65 | public static inline var EX_FINE_VOLUME_SLIDE_UP : Int = 10; 66 | public static inline var EX_FINE_VOLUME_SLIDE_DOWN : Int = 11; 67 | public static inline var EX_NOTE_CUT : Int = 12; 68 | public static inline var EX_NOTE_DELAY : Int = 13; 69 | public static inline var EX_PATTERN_DELAY : Int = 14; 70 | 71 | public static inline var VX_VOLUME_SLIDE_DOWN : Int = 6; 72 | public static inline var VX_VOLUME_SLIDE_UP : Int = 7; 73 | public static inline var VX_FINE_VOLUME_SLIDE_DOWN : Int = 8; 74 | public static inline var VX_FINE_VOLUME_SLIDE_UP : Int = 9; 75 | public static inline var VX_SET_VIBRATO_SPEED : Int = 10; 76 | public static inline var VX_VIBRATO : Int = 11; 77 | public static inline var VX_SET_PANNING : Int = 12; 78 | public static inline var VX_PANNING_SLIDE_LEFT : Int = 13; 79 | public static inline var VX_PANNING_SLIDE_RIGHT : Int = 14; 80 | public static inline var VX_TONE_PORTAMENTO : Int = 15; 81 | 82 | public static var MOD_SINE : Vector; 83 | public static var FT2_SINE : Vector; 84 | 85 | public static var INIT_XM = 86 | { 87 | MOD_SINE = Vector.ofArray([ 88 | 0, 24, 49, 74, 97, 120, 141, 161, 180, 197, 212, 224, 235, 244, 250, 253, 89 | 255, 253, 250, 244, 235, 224, 212, 197, 180, 161, 141, 120, 97, 74, 49, 24]); 90 | 91 | FT2_SINE = Vector.ofArray([ 92 | 0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23, 93 | -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44, 94 | -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59, 95 | -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64, 96 | -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60, 97 | -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46, 98 | -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26, 99 | -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2, 100 | 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23, 101 | 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44, 102 | 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 103 | 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 104 | 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60, 105 | 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 106 | 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26, 107 | 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2]); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /neoart/flod/xm/XMVoice.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm { 13 | import neoart.flod.core.*; 14 | 15 | public final class XMVoice { 16 | internal var 17 | index : int, 18 | next : XMVoice, 19 | channel : SBChannel, 20 | flags : int, 21 | note : int, 22 | target : int, 23 | period : int, 24 | frequency : int, 25 | frqDelta : int, 26 | delay : int, 27 | keyoff : int, 28 | instrument : XMInstrument, 29 | autoVibratoPos : int, 30 | autoSweepPos : int, 31 | sample : XMSample, 32 | finetune : int, 33 | sampleOffset : int, 34 | patternLoopRow : int, 35 | patternLoopCnt : int, 36 | fadeout : int, 37 | isFading : int, 38 | volume : int, 39 | volSlide : int, 40 | volSlideMaster : int, 41 | fineVolSlideUp : int, 42 | fineVolSlideDown : int, 43 | volEnvelope : XMEnvelope, 44 | panning : int, 45 | panSlide : int, 46 | panEnvelope : XMEnvelope, 47 | arpeggioOn : int, 48 | portaDown : int, 49 | portaUp : int, 50 | finePortaUp : int, 51 | finePortaDown : int, 52 | xtraPortaUp : int, 53 | xtraPortaDown : int, 54 | portaPeriod : int, 55 | portaSpeed : int, 56 | vibratoOn : int, 57 | vibratoPos : int, 58 | vibratoSpeed : int, 59 | vibratoDepth : int, 60 | tremoloPos : int, 61 | tremoloSpeed : int, 62 | tremoloDepth : int, 63 | waveControl : int, 64 | tremorPos : int, 65 | tremorOn : int, 66 | tremorOff : int, 67 | tremorVol : int, 68 | retrigX : int, 69 | retrigY : int, 70 | volTemp : int; 71 | 72 | public function XMVoice(index:int) { 73 | this.index = index; 74 | volEnvelope = new XMEnvelope(); 75 | panEnvelope = new XMEnvelope(); 76 | } 77 | 78 | internal function reset():void { 79 | volume = sample.volume; 80 | volTemp = volume; 81 | panning = sample.panning; 82 | finetune = sample.finetune; 83 | keyoff = 0; 84 | fadeout = 65536; 85 | isFading = 0; 86 | 87 | volEnvelope.reset(64); 88 | panEnvelope.reset(32); 89 | 90 | autoVibratoPos = 0; 91 | autoSweepPos = 0; 92 | tremorPos = 0; 93 | 94 | if ((waveControl & 15) < 4) vibratoPos = 0; 95 | if ((waveControl >> 4) < 4) tremoloPos = 0; 96 | 97 | flags |= (XM.FLAG_VOLUME | XM.FLAG_PANNING); 98 | } 99 | 100 | internal function autoVibrato():void { 101 | var delta:int; 102 | 103 | if (++autoSweepPos > instrument.vibratoSweep) 104 | autoSweepPos = instrument.vibratoSweep; 105 | 106 | autoVibratoPos = (autoVibratoPos + instrument.vibratoSpeed) & 255; 107 | 108 | switch (instrument.vibratoType) { 109 | case 0: 110 | delta = XM.FT2_SINE[autoVibratoPos]; 111 | break; 112 | case 1: 113 | if (autoVibratoPos < 128) delta = -64; 114 | else delta = 64; 115 | break; 116 | case 2: 117 | delta = ((64 + (autoVibratoPos >> 1)) & 127) - 64; 118 | break; 119 | case 3: 120 | delta = ((64 - (autoVibratoPos >> 1)) & 127) - 64; 121 | break; 122 | } 123 | 124 | delta *= instrument.vibratoDepth; 125 | if (instrument.vibratoSweep) 126 | delta = delta * (autoSweepPos / instrument.vibratoSweep); 127 | 128 | frqDelta = (delta >> 6); 129 | flags |= XM.FLAG_PERIOD; 130 | } 131 | 132 | internal function tonePortamento():void { 133 | if (period < portaPeriod) { 134 | period += portaSpeed << 2; 135 | if (period > portaPeriod) period = portaPeriod; 136 | } else if (period > portaPeriod) { 137 | period -= portaSpeed << 2; 138 | if (period < portaPeriod) period = portaPeriod; 139 | } 140 | 141 | frequency = period; 142 | flags |= XM.FLAG_PERIOD; 143 | } 144 | 145 | internal function tremolo():void { 146 | var delta:int, position:int = tremoloPos & 31, value:int; 147 | 148 | switch ((waveControl >> 4) & 3) { 149 | case 0: 150 | delta = XM.MOD_SINE[position]; 151 | break; 152 | case 1: 153 | delta = position << 3; 154 | break; 155 | case 2: 156 | delta = 255; 157 | break; 158 | } 159 | 160 | value = (delta * tremoloDepth) >> 6; 161 | 162 | if (tremoloPos > 31) volume = volTemp - value; 163 | else volume = volTemp + value; 164 | 165 | tremoloPos = (tremoloPos + tremoloSpeed) & 63; 166 | flags |= XM.FLAG_VOLUME; 167 | } 168 | 169 | internal function vibrato():void { 170 | var delta:int, position:int = vibratoPos & 31, value:int; 171 | 172 | switch (waveControl & 3) { 173 | case 0: 174 | delta = XM.MOD_SINE[position]; 175 | break; 176 | case 1: 177 | delta = position << 3; 178 | if (vibratoPos > 31) delta = 255 - delta; 179 | break; 180 | default: 181 | delta = 255; 182 | break; 183 | } 184 | 185 | value = (delta * vibratoDepth) >> 7; 186 | 187 | if (vibratoPos > 31) frequency = period - value; 188 | else frequency = period + value; 189 | 190 | vibratoPos = (vibratoPos + vibratoSpeed) & 63; 191 | flags |= XM.FLAG_PERIOD; 192 | } 193 | 194 | internal function tremor():void { 195 | if (tremorPos >= tremorOn) { 196 | tremorVol = volume; 197 | volume = 0; 198 | flags |= XM.FLAG_VOLUME; 199 | } 200 | 201 | if (++tremorPos >= tremorOff) { 202 | tremorPos = 0; 203 | volume = tremorVol; 204 | flags |= XM.FLAG_VOLUME; 205 | } 206 | } 207 | } 208 | } -------------------------------------------------------------------------------- /neoart/flectrum/Inward.as: -------------------------------------------------------------------------------- 1 | /* Flectrum version 1.1 2 | 2009/08/31 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flectrum { 13 | import flash.display.*; 14 | import flash.geom.*; 15 | 16 | public class Inward extends Visualizer { 17 | private var rows:int; 18 | 19 | public function Inward() { 20 | super(); 21 | } 22 | 23 | override internal function override():void { 24 | flectrum.spectrum = SoundEx.SPECTRUM_DOUBLE; 25 | flectrum.stereo = false; 26 | } 27 | 28 | override internal function meterUpdate(spectrum:Vector.):void { 29 | var h:int, i:int, r:int = flectrum.m_columns, s:Number; 30 | sourceRect.x = 0; 31 | buffer.fillRect(buffer.rect, 0xff000000); 32 | 33 | for (i = 0; i < flectrum.m_columns; ++i) { 34 | s = spectrum[i]; 35 | if (s > levels[i]) levels[i] = s; 36 | h = Math.ceil(levels[i] * rows) * sectionHeight; 37 | sourceRect.y = h; 38 | sourceRect.height = m_height - h; 39 | 40 | s = spectrum[r]; 41 | if (s > levels[r]) levels[r] = s; 42 | h = Math.ceil(levels[r] * rows) * sectionHeight; 43 | sourceRect.height += m_height - h; 44 | buffer.fillRect(sourceRect, 0); 45 | 46 | sourceRect.x += sectionWidth; 47 | levels[i] -= flectrum.m_decay; 48 | levels[r] -= flectrum.m_decay; 49 | ++r; 50 | } 51 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 52 | } 53 | 54 | override internal function peaksUpdate(spectrum:Vector.):void { 55 | var h1:int, h2:int, i:int, r:int = flectrum.m_columns, s1:Number, s2:Number; 56 | sourceRect.x = 0; 57 | buffer.fillRect(buffer.rect, 0xff000000); 58 | 59 | for (i = 0; i < flectrum.m_columns; ++i) { 60 | s1 = spectrum[i]; 61 | if (s1 > meters[i]) meters[i] = s1; 62 | h1 = Math.ceil(meters[i] * rows) * sectionHeight; 63 | sourceRect.y = h1; 64 | sourceRect.height = m_height - h1; 65 | 66 | s2 = spectrum[r]; 67 | if (s2 > meters[r]) meters[r] = s2; 68 | h2 = Math.ceil(meters[r] * rows) * sectionHeight; 69 | sourceRect.height += m_height - h2; 70 | buffer.fillRect(sourceRect, 0); 71 | 72 | if (s1 > levels[i]) { 73 | levels[i] = s1; 74 | } else { 75 | h1 = Math.ceil(levels[i] * rows) * sectionHeight; 76 | sourceRect.y = h1; 77 | } 78 | sourceRect.y -= sectionHeight; 79 | sourceRect.height = flectrum.m_rowSize; 80 | buffer.fillRect(sourceRect, flectrum.m_peaksAlpha); 81 | 82 | if (s2 > levels[r]) { 83 | levels[r] = s2; 84 | } else { 85 | h2 = Math.ceil(levels[r] * rows) * sectionHeight; 86 | sourceRect.y = (m_height << 1) - h2; 87 | } 88 | buffer.fillRect(sourceRect, flectrum.m_peaksAlpha); 89 | 90 | sourceRect.x += sectionWidth; 91 | meters[i] -= flectrum.m_decay; 92 | levels[i] -= flectrum.m_peaksDecay; 93 | meters[r] -= flectrum.m_decay; 94 | levels[r] -= flectrum.m_peaksDecay; 95 | ++r; 96 | } 97 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 98 | } 99 | 100 | override internal function trailUpdate(spectrum:Vector.):void { 101 | var h:int, i:int, r:int = flectrum.m_columns; 102 | sourceRect.x = 0; 103 | buffer.fillRect(buffer.rect, flectrum.m_trailAlpha); 104 | bitmapData.copyPixels(bitmapData, bitmapData.rect, destPoint, buffer); 105 | buffer.fillRect(buffer.rect, 0xff000000); 106 | 107 | for (i = 0; i < flectrum.m_columns; ++i) { 108 | h = Math.ceil(spectrum[i] * rows) * sectionHeight; 109 | sourceRect.y = h; 110 | sourceRect.height = m_height - h; 111 | h = Math.ceil(spectrum[r] * rows) * sectionHeight; 112 | sourceRect.height += m_height - h; 113 | buffer.fillRect(sourceRect, 0); 114 | sourceRect.x += sectionWidth; 115 | ++r; 116 | } 117 | bitmapData.copyPixels(input, input.rect, destPoint, buffer, null, true); 118 | } 119 | 120 | override protected function clone():void { 121 | var i:int, v:Vector.; 122 | buffer = new BitmapData(m_width - flectrum.m_colSpacing, (m_height - flectrum.m_rowSpacing) << 1, true, 0); 123 | buffer.lock(); 124 | 125 | v = scale(true, true); 126 | destPoint.x = 0; 127 | destPoint.y = m_height - flectrum.m_rowSpacing; 128 | 129 | sourceRect.x = 0; 130 | sourceRect.y = 0; 131 | sourceRect.width = flectrum.meter.width; 132 | sourceRect.height = flectrum.meter.height; 133 | 134 | for (i = 0; i < flectrum.m_columns; ++i) { 135 | buffer.setVector(sourceRect, v); 136 | sourceRect.x += sectionWidth; 137 | buffer.copyPixels(flectrum.meter, flectrum.meter.rect, destPoint); 138 | destPoint.x += sectionWidth; 139 | } 140 | levels = new Vector.(flectrum.m_columns << 1, true); 141 | meters = new Vector.(flectrum.m_columns << 1, true); 142 | m_height <<= 1; 143 | finalizeClone(); 144 | m_height >>= 1; 145 | rows = flectrum.m_rows >> 1; 146 | } 147 | 148 | override protected function draw():void { 149 | var c:int = flectrum.m_columns << 1, h:int, s:Shape = new Shape(), g:Graphics = s.graphics, m:Matrix = new Matrix(); 150 | 151 | if ((flectrum.m_rows & 1) != 0) { 152 | flectrum.m_rows--; 153 | m_height -= sectionHeight; 154 | } 155 | h = m_height >> 1; 156 | rows = flectrum.m_rows >> 1; 157 | 158 | m.createGradientBox(m_width, h, Math.PI * 1.5, 0, 0); 159 | g.beginGradientFill("linear", flectrum.m_colors[0], flectrum.m_alphas[0], flectrum.m_ratios[0], m); 160 | g.drawRect(0, 0, m_width, h); 161 | 162 | m.createGradientBox(m_width, h, Math.PI * 0.5, 0, h); 163 | g.beginGradientFill("linear", flectrum.m_colors[1], flectrum.m_alphas[1], flectrum.m_ratios[1], m); 164 | g.drawRect(0, h, m_width, h); 165 | 166 | levels = new Vector.(c, true); 167 | meters = new Vector.(c, true); 168 | finalizeDraw(s); 169 | m_height = h; 170 | } 171 | } 172 | } -------------------------------------------------------------------------------- /neoart/flectrum/Outward.as: -------------------------------------------------------------------------------- 1 | /* Flectrum version 1.1 2 | 2009/08/31 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flectrum { 13 | import flash.display.*; 14 | import flash.geom.*; 15 | 16 | public class Outward extends Visualizer { 17 | private var rows:int; 18 | 19 | public function Outward() { 20 | super(); 21 | } 22 | 23 | override internal function override():void { 24 | flectrum.spectrum = SoundEx.SPECTRUM_DOUBLE; 25 | flectrum.stereo = false; 26 | } 27 | 28 | override internal function meterUpdate(spectrum:Vector.):void { 29 | var h:int, i:int, r:int = flectrum.m_columns, s:Number; 30 | sourceRect.x = 0; 31 | buffer.fillRect(buffer.rect, 0); 32 | 33 | for (i = 0; i < flectrum.m_columns; ++i) { 34 | s = spectrum[i]; 35 | if (s > levels[i]) levels[i] = s; 36 | h = Math.ceil(levels[i] * rows) * sectionHeight; 37 | sourceRect.y = m_height - h; 38 | sourceRect.height = h; 39 | 40 | s = spectrum[r]; 41 | if (s > levels[r]) levels[r] = s; 42 | h = Math.ceil(levels[r] * rows) * sectionHeight; 43 | sourceRect.height += h; 44 | buffer.fillRect(sourceRect, 0xff000000); 45 | 46 | sourceRect.x += sectionWidth; 47 | levels[i] -= flectrum.m_decay; 48 | levels[r] -= flectrum.m_decay; 49 | ++r; 50 | } 51 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 52 | } 53 | 54 | override internal function peaksUpdate(spectrum:Vector.):void { 55 | var h1:int, h2:int, i:int, r:int = flectrum.m_columns, s1:Number, s2:Number; 56 | sourceRect.x = 0; 57 | buffer.fillRect(buffer.rect, 0); 58 | 59 | for (i = 0; i < flectrum.m_columns; ++i) { 60 | s1 = spectrum[i]; 61 | if (s1 > meters[i]) meters[i] = s1; 62 | h1 = Math.ceil(meters[i] * rows) * sectionHeight; 63 | sourceRect.y = m_height - h1; 64 | sourceRect.height = h1; 65 | 66 | s2 = spectrum[r]; 67 | if (s2 > meters[r]) meters[r] = s2; 68 | h2 = Math.ceil(meters[r] * rows) * sectionHeight; 69 | sourceRect.height += h2; 70 | buffer.fillRect(sourceRect, 0xff000000); 71 | 72 | if (s1 > levels[i]) { 73 | levels[i] = s1; 74 | } else { 75 | h1 = Math.ceil(levels[i] * rows) * sectionHeight; 76 | sourceRect.y = m_height - h1; 77 | } 78 | sourceRect.height = flectrum.m_rowSize; 79 | buffer.fillRect(sourceRect, flectrum.m_peaksAlpha); 80 | 81 | if (s2 > levels[r]) { 82 | levels[r] = s2; 83 | } else { 84 | h2 = Math.ceil(levels[r] * rows) * sectionHeight; 85 | sourceRect.y = m_height + h2; 86 | } 87 | if (sourceRect.y > m_height) { 88 | sourceRect.y -= sectionHeight; 89 | buffer.fillRect(sourceRect, flectrum.m_peaksAlpha); 90 | } 91 | 92 | sourceRect.x += sectionWidth; 93 | meters[i] -= flectrum.m_decay; 94 | levels[i] -= flectrum.m_peaksDecay; 95 | meters[r] -= flectrum.m_decay; 96 | levels[r] -= flectrum.m_peaksDecay; 97 | ++r; 98 | } 99 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 100 | } 101 | 102 | override internal function trailUpdate(spectrum:Vector.):void { 103 | var h:int, i:int, r:int = flectrum.m_columns; 104 | sourceRect.x = 0; 105 | buffer.fillRect(buffer.rect, flectrum.m_trailAlpha); 106 | bitmapData.copyPixels(bitmapData, bitmapData.rect, destPoint, buffer); 107 | buffer.fillRect(buffer.rect, 0); 108 | 109 | for (i = 0; i < flectrum.m_columns; ++i) { 110 | h = Math.ceil(spectrum[i] * rows) * sectionHeight; 111 | sourceRect.y = m_height - h; 112 | sourceRect.height = h; 113 | h = Math.ceil(spectrum[r] * rows) * sectionHeight; 114 | sourceRect.height += h; 115 | buffer.fillRect(sourceRect, 0xff000000); 116 | sourceRect.x += sectionWidth; 117 | ++r; 118 | } 119 | bitmapData.copyPixels(input, input.rect, destPoint, buffer, null, true); 120 | } 121 | 122 | override protected function clone():void { 123 | var i:int, v:Vector.; 124 | buffer = new BitmapData(m_width - flectrum.m_colSpacing, (m_height - flectrum.m_rowSpacing) << 1, true, 0); 125 | buffer.lock(); 126 | 127 | v = scale(true, true); 128 | destPoint.x = 0; 129 | destPoint.y = 0; 130 | 131 | sourceRect.x = 0; 132 | sourceRect.y = m_height - flectrum.m_rowSpacing; 133 | sourceRect.width = flectrum.meter.width; 134 | sourceRect.height = flectrum.meter.height; 135 | 136 | for (i = 0; i < flectrum.m_columns; ++i) { 137 | buffer.setVector(sourceRect, v); 138 | sourceRect.x += sectionWidth; 139 | buffer.copyPixels(flectrum.meter, flectrum.meter.rect, destPoint); 140 | destPoint.x += sectionWidth; 141 | } 142 | levels = new Vector.(flectrum.m_columns << 1, true); 143 | meters = new Vector.(flectrum.m_columns << 1, true); 144 | m_height <<= 1; 145 | finalizeClone(); 146 | m_height >>= 1; 147 | rows = flectrum.m_rows >> 1; 148 | } 149 | 150 | override protected function draw():void { 151 | var c:int = flectrum.m_columns << 1, h:int, s:Shape = new Shape(), g:Graphics = s.graphics, m:Matrix = new Matrix(); 152 | 153 | if ((flectrum.m_rows & 1) != 0) { 154 | flectrum.m_rows--; 155 | m_height -= sectionHeight; 156 | } 157 | h = m_height >> 1; 158 | rows = flectrum.m_rows >> 1; 159 | 160 | m.createGradientBox(m_width, h, Math.PI * 0.5, 0, 0); 161 | g.beginGradientFill("linear", flectrum.m_colors[0], flectrum.m_alphas[0], flectrum.m_ratios[0], m); 162 | g.drawRect(0, 0, m_width, h); 163 | 164 | m.createGradientBox(m_width, h, Math.PI * 1.5, 0, h); 165 | g.beginGradientFill("linear", flectrum.m_colors[1], flectrum.m_alphas[1], flectrum.m_ratios[1], m); 166 | g.drawRect(0, h, m_width, h); 167 | 168 | levels = new Vector.(c, true); 169 | meters = new Vector.(c, true); 170 | finalizeDraw(s); 171 | m_height = h; 172 | } 173 | } 174 | } -------------------------------------------------------------------------------- /neoart/flod/core/Soundblaster.as: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.core { 13 | import flash.events.*; 14 | import flash.utils.*; 15 | 16 | public final class Soundblaster { 17 | public static const 18 | BUFFER_SIZE : int = 8192; 19 | public var 20 | player : SBPlayer, 21 | channels : Vector., 22 | record : int, 23 | samplesTick : int; 24 | private var 25 | buffer : Vector., 26 | completed : int, 27 | remains : int, 28 | samplesLeft : int, 29 | wave : ByteArray; 30 | 31 | public function Soundblaster() { 32 | var i:int, len:int; 33 | wave = new ByteArray(); 34 | wave.endian = "littleEndian"; 35 | 36 | len = BUFFER_SIZE; 37 | buffer = new Vector.(len, true); 38 | buffer[0] = new Sample(); 39 | 40 | for (i = 1; i < len; ++i) 41 | buffer[i] = buffer[int(i - 1)].next = new Sample(); 42 | } 43 | 44 | public function set complete(value:int):void { 45 | completed = value ^ player.loopSong; 46 | } 47 | 48 | public function get waveform():ByteArray { 49 | var snd:ByteArray = new ByteArray(); 50 | snd.endian = "littleEndian"; 51 | 52 | snd.writeUTFBytes("RIFF"); 53 | snd.writeInt(wave.length + 44); 54 | snd.writeUTFBytes("WAVEfmt "); 55 | snd.writeInt(16); 56 | snd.writeShort(1); 57 | snd.writeShort(2); 58 | snd.writeInt(44100); 59 | snd.writeInt(44100 << 2); 60 | snd.writeShort(4); 61 | snd.writeShort(16); 62 | snd.writeUTFBytes("data"); 63 | snd.writeInt(wave.length); 64 | snd.writeBytes(wave); 65 | 66 | snd.position = 0; 67 | return snd; 68 | } 69 | 70 | internal function setup(len:int):void { 71 | var i:int; 72 | channels = new Vector.(len, true); 73 | channels[0] = new SBChannel(0); 74 | 75 | for (i = 1; i < len; ++i) 76 | channels[i] = channels[int(i - 1)].next = new SBChannel(i); 77 | } 78 | 79 | internal function initialize():void { 80 | var chan:SBChannel = channels[0], sample:Sample = buffer[0]; 81 | wave.clear(); 82 | completed = 0; 83 | remains = 0; 84 | samplesLeft = 0; 85 | 86 | while (chan) { 87 | chan.initialize(); 88 | chan = chan.next; 89 | } 90 | 91 | while (sample) { 92 | sample.l = sample.r = 0.0; 93 | sample = sample.next; 94 | } 95 | } 96 | 97 | internal function mix(e:SampleDataEvent):void { 98 | var chan:SBChannel, d:Vector., data:ByteArray = e.data, i:int, j:int, len:int, mixed:int, mixLen:int, mixPos:int, s:SBSample, sample:Sample, size:int = BUFFER_SIZE, toMix:int, value:Number = 0.0; 99 | 100 | if (completed) { 101 | if (!remains) return; 102 | size = remains; 103 | } 104 | 105 | len = channels.length; 106 | 107 | while (mixed < size) { 108 | if (!samplesLeft) { 109 | player.process(); 110 | samplesLeft = samplesTick; 111 | if (completed) { 112 | size = mixed + samplesTick; 113 | if (size > BUFFER_SIZE) { 114 | remains = size - BUFFER_SIZE; 115 | size = BUFFER_SIZE; 116 | } 117 | } 118 | } 119 | 120 | toMix = samplesLeft; 121 | if ((mixed + toMix) >= size) toMix = size - mixed; 122 | mixLen = mixPos + toMix; 123 | chan = channels[0]; 124 | 125 | for (i = 0; i < len; ++i) { 126 | if (!chan.sample || !chan.sample.data) { 127 | chan = chan.next; 128 | continue; 129 | } 130 | s = chan.sample; 131 | d = s.data; 132 | sample = buffer[mixPos]; 133 | 134 | for (j = mixPos; j < mixLen; ++j) { 135 | if (!chan.mute) value = d[int(chan.pointer)]; 136 | chan.pointer += chan.speed; 137 | 138 | sample.l += value * chan.lvol; 139 | sample.r += value * chan.rvol; 140 | sample = sample.next; 141 | value = 0.0; 142 | 143 | if (chan.speed < 0) { 144 | if (chan.pointer <= chan.counter) { 145 | chan.pointer = s.loopStart + (chan.counter - chan.pointer); 146 | chan.counter = s.length; 147 | chan.speed = -chan.speed; 148 | } 149 | } else { 150 | if (chan.pointer >= chan.counter) { 151 | if (s.loopMode == 1) { 152 | chan.pointer = s.loopStart + (chan.pointer - chan.counter); 153 | chan.counter = s.length; 154 | } else if (s.loopMode == 2) { 155 | chan.pointer = s.length - (chan.pointer - chan.counter); 156 | if (chan.pointer == s.length) chan.pointer -= 0.00000000001; 157 | chan.counter = s.loopStart; 158 | chan.speed = -chan.speed; 159 | } else { 160 | chan.sample = null; 161 | break; 162 | } 163 | } 164 | } 165 | } 166 | chan = chan.next; 167 | } 168 | 169 | mixPos = mixLen; 170 | mixed += toMix; 171 | samplesLeft -= toMix; 172 | } 173 | 174 | sample = buffer[0]; 175 | 176 | if (record) { 177 | for (i = 0; i < size; ++i) { 178 | if (sample.l > 1.0) sample.l = 1.0; 179 | else if (sample.l < -1.0) sample.l = -1.0; 180 | if (sample.r > 1.0) sample.r = 1.0; 181 | else if (sample.r < -1.0) sample.r = -1.0; 182 | 183 | wave.writeShort(65536 + int(sample.l * 65536)); 184 | wave.writeShort(65536 + int(sample.r * 65536)); 185 | 186 | data.writeFloat(sample.l); 187 | data.writeFloat(sample.r); 188 | sample.l = sample.r = 0.0; 189 | sample = sample.next; 190 | } 191 | } else { 192 | for (i = 0; i < size; ++i) { 193 | if (sample.l > 1.0) sample.l = 1.0; 194 | else if (sample.l < -1.0) sample.l = -1.0; 195 | if (sample.r > 1.0) sample.r = 1.0; 196 | else if (sample.r < -1.0) sample.r = -1.0; 197 | 198 | data.writeFloat(sample.l); 199 | data.writeFloat(sample.r); 200 | sample.l = sample.r = 0.0; 201 | sample = sample.next; 202 | } 203 | } 204 | } 205 | } 206 | } -------------------------------------------------------------------------------- /haXe Version/neoart/flod/xm/XMVoice.hx: -------------------------------------------------------------------------------- 1 | /* FlodXM Alpha 3 2 | 2011/09/17 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flod.xm; 13 | 14 | import neoart.flod.core.SBChannel; 15 | 16 | @final class XMVoice 17 | { 18 | public var index : Int; 19 | public var next : XMVoice; 20 | public var channel : SBChannel; 21 | public var flags : Int; 22 | public var note : Int; 23 | public var target : Int; 24 | public var period : Int; 25 | public var frequency : Int; 26 | public var frqDelta : Int; 27 | public var delay : Int; 28 | public var keyoff : Int; 29 | public var instrument : XMInstrument; 30 | public var autoVibratoPos : Int; 31 | public var autoSweepPos : Int; 32 | public var sample : XMSample; 33 | public var finetune : Int; 34 | public var sampleOffset : Int; 35 | public var patternLoopRow : Int; 36 | public var patternLoopCnt : Int; 37 | public var fadeout : Int; 38 | public var isFading : Int; 39 | public var volume : Int; 40 | public var volSlide : Int; 41 | public var volSlideMaster : Int; 42 | public var fineVolSlideUp : Int; 43 | public var fineVolSlideDown : Int; 44 | public var volEnvelope : XMEnvelope; 45 | public var panning : Int; 46 | public var panSlide : Int; 47 | public var panEnvelope : XMEnvelope; 48 | public var arpeggioOn : Int; 49 | public var portaDown : Int; 50 | public var portaUp : Int; 51 | public var finePortaUp : Int; 52 | public var finePortaDown : Int; 53 | public var xtraPortaUp : Int; 54 | public var xtraPortaDown : Int; 55 | public var portaPeriod : Int; 56 | public var portaSpeed : Int; 57 | public var vibratoOn : Int; 58 | public var vibratoPos : Int; 59 | public var vibratoSpeed : Int; 60 | public var vibratoDepth : Int; 61 | public var tremoloPos : Int; 62 | public var tremoloSpeed : Int; 63 | public var tremoloDepth : Int; 64 | public var waveControl : Int; 65 | public var tremorPos : Int; 66 | public var tremorOn : Int; 67 | public var tremorOff : Int; 68 | public var tremorVol : Int; 69 | public var retrigX : Int; 70 | public var retrigY : Int; 71 | public var volTemp : Int; 72 | 73 | public function new(index: Int) 74 | { 75 | this.index = index; 76 | volEnvelope = new XMEnvelope(); 77 | panEnvelope = new XMEnvelope(); 78 | 79 | flags = 0; 80 | 81 | //reset(); 82 | } 83 | 84 | public function reset() : Void 85 | { 86 | volume = sample.volume; 87 | volTemp = volume; 88 | panning = sample.panning; 89 | finetune = sample.finetune; 90 | keyoff = 0; 91 | fadeout = 65536; 92 | isFading = 0; 93 | 94 | volEnvelope.reset(64); 95 | panEnvelope.reset(32); 96 | 97 | autoVibratoPos = 0; 98 | autoSweepPos = 0; 99 | tremorPos = 0; 100 | 101 | if ((waveControl & 15) < 4) vibratoPos = 0; 102 | if ((waveControl >> 4) < 4) tremoloPos = 0; 103 | 104 | flags |= (XM.FLAG_VOLUME | XM.FLAG_PANNING); 105 | } 106 | 107 | public function autoVibrato() : Void 108 | { 109 | var delta: Int = 0; 110 | 111 | if (++autoSweepPos > instrument.vibratoSweep) 112 | autoSweepPos = instrument.vibratoSweep; 113 | 114 | autoVibratoPos = (autoVibratoPos + instrument.vibratoSpeed) & 255; 115 | 116 | switch (instrument.vibratoType) 117 | { 118 | case 0: 119 | { 120 | delta = XM.FT2_SINE[autoVibratoPos]; 121 | } 122 | case 1: 123 | { 124 | if (autoVibratoPos < 128) delta = -64; 125 | else delta = 64; 126 | } 127 | case 2: 128 | { 129 | delta = ((64 + (autoVibratoPos >> 1)) & 127) - 64; 130 | } 131 | case 3: 132 | { 133 | delta = ((64 - (autoVibratoPos >> 1)) & 127) - 64; 134 | } 135 | } 136 | 137 | delta *= instrument.vibratoDepth; 138 | if (instrument.vibratoSweep != 0) 139 | delta = Std.int(delta * (autoSweepPos / instrument.vibratoSweep)); 140 | 141 | frqDelta = (delta >> 6); 142 | flags |= XM.FLAG_PERIOD; 143 | } 144 | 145 | public function tonePortamento() : Void 146 | { 147 | if (period < portaPeriod) 148 | { 149 | period += portaSpeed << 2; 150 | if (period > portaPeriod) period = portaPeriod; 151 | } 152 | else if (period > portaPeriod) 153 | { 154 | period -= portaSpeed << 2; 155 | if (period < portaPeriod) period = portaPeriod; 156 | } 157 | 158 | frequency = period; 159 | flags |= XM.FLAG_PERIOD; 160 | } 161 | 162 | public function tremolo() : Void 163 | { 164 | var delta: Int = 0; 165 | var position: Int = tremoloPos & 31; 166 | var value: Int; 167 | 168 | switch ((waveControl >> 4) & 3) 169 | { 170 | case 0: 171 | { 172 | delta = XM.MOD_SINE[position]; 173 | } 174 | case 1: 175 | { 176 | delta = position << 3; 177 | } 178 | case 2: 179 | { 180 | delta = 255; 181 | } 182 | } 183 | 184 | value = (delta * tremoloDepth) >> 6; 185 | 186 | if (tremoloPos > 31) volume = volTemp - value; 187 | else volume = volTemp + value; 188 | 189 | tremoloPos = (tremoloPos + tremoloSpeed) & 63; 190 | flags |= XM.FLAG_VOLUME; 191 | } 192 | 193 | public function vibrato() : Void 194 | { 195 | var delta: Int; 196 | var position: Int = vibratoPos & 31; 197 | var value: Int; 198 | 199 | switch (waveControl & 3) 200 | { 201 | case 0: 202 | { 203 | delta = XM.MOD_SINE[position]; 204 | } 205 | case 1: 206 | { 207 | delta = position << 3; 208 | if (vibratoPos > 31) delta = 255 - delta; 209 | } 210 | default: 211 | { 212 | delta = 255; 213 | } 214 | } 215 | 216 | value = (delta * vibratoDepth) >> 7; 217 | 218 | if (vibratoPos > 31) frequency = period - value; 219 | else frequency = period + value; 220 | 221 | vibratoPos = (vibratoPos + vibratoSpeed) & 63; 222 | flags |= XM.FLAG_PERIOD; 223 | } 224 | 225 | public function tremor() : Void 226 | { 227 | if (tremorPos >= tremorOn) 228 | { 229 | tremorVol = volume; 230 | volume = 0; 231 | flags |= XM.FLAG_VOLUME; 232 | } 233 | 234 | if (++tremorPos >= tremorOff) 235 | { 236 | tremorPos = 0; 237 | volume = tremorVol; 238 | flags |= XM.FLAG_VOLUME; 239 | } 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /neoart/flectrum/Stripe.as: -------------------------------------------------------------------------------- 1 | /* Flectrum version 1.1 2 | 2009/08/31 3 | Christian Corti 4 | Neoart Costa Rica 5 | 6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 7 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 8 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 9 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | */ 11 | 12 | package neoart.flectrum { 13 | import flash.display.*; 14 | import flash.geom.*; 15 | 16 | public class Stripe extends Visualizer { 17 | private var columns:int; 18 | 19 | public function Stripe() { 20 | super(); 21 | } 22 | 23 | override internal function override():void { 24 | flectrum.m_spectrum = SoundEx.SPECTRUM_BOTH; 25 | flectrum.stereo = false; 26 | } 27 | 28 | override internal function meterUpdate(spectrum:Vector.):void { 29 | var h:int, i:int, r:int = columns, s:Number; 30 | sourceRect.x = 0; 31 | buffer.fillRect(buffer.rect, 0); 32 | 33 | for (i = 0; i < columns; ++i) { 34 | s = spectrum[i]; 35 | if (s > levels[i]) levels[i] = s; 36 | h = Math.ceil(levels[i] * flectrum.m_rows) * sectionHeight; 37 | sourceRect.y = m_height - h; 38 | sourceRect.height = h; 39 | buffer.fillRect(sourceRect, 0xff000000); 40 | sourceRect.x += sectionWidth; 41 | 42 | s = spectrum[r]; 43 | if (s > levels[r]) levels[r] = s; 44 | h = Math.ceil(levels[r] * flectrum.m_rows) * sectionHeight; 45 | sourceRect.y = 0; 46 | sourceRect.height = h; 47 | buffer.fillRect(sourceRect, 0xff000000); 48 | sourceRect.x += sectionWidth; 49 | 50 | levels[i] -= flectrum.m_decay; 51 | levels[r] -= flectrum.m_decay; 52 | ++r; 53 | } 54 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 55 | } 56 | 57 | override internal function peaksUpdate(spectrum:Vector.):void { 58 | var h:int, i:int, r:int = columns, s:Number 59 | sourceRect.x = 0; 60 | buffer.fillRect(buffer.rect, 0); 61 | 62 | for (i = 0; i < columns; ++i) { 63 | s = spectrum[i]; 64 | if (s > meters[i]) meters[i] = s; 65 | h = Math.ceil(meters[i] * flectrum.m_rows) * sectionHeight; 66 | sourceRect.y = m_height - h; 67 | sourceRect.height = h; 68 | buffer.fillRect(sourceRect, 0xff000000); 69 | 70 | if (s > levels[i]) { 71 | levels[i] = s; 72 | } else { 73 | h = Math.ceil(levels[i] * flectrum.m_rows) * sectionHeight; 74 | sourceRect.y = m_height - h; 75 | } 76 | sourceRect.height = flectrum.m_rowSize; 77 | buffer.fillRect(sourceRect, 0xff000000); 78 | sourceRect.x += sectionWidth; 79 | 80 | s = spectrum[r]; 81 | if (s > meters[r]) meters[r] = s; 82 | h = Math.ceil(meters[r] * flectrum.m_rows) * sectionHeight; 83 | sourceRect.y = 0; 84 | sourceRect.height = h; 85 | buffer.fillRect(sourceRect, 0xff000000); 86 | 87 | if (s > levels[r]) { 88 | levels[r] = s; 89 | } else { 90 | h = Math.ceil(levels[r] * flectrum.m_rows) * sectionHeight; 91 | sourceRect.y = h; 92 | } 93 | sourceRect.y -= sectionHeight; 94 | sourceRect.height = flectrum.m_rowSize; 95 | buffer.fillRect(sourceRect, 0xff000000); 96 | sourceRect.x += sectionWidth; 97 | 98 | meters[i] -= flectrum.m_decay; 99 | levels[i] -= flectrum.m_peaksDecay; 100 | meters[r] -= flectrum.m_decay; 101 | levels[r] -= flectrum.m_peaksDecay; 102 | ++r; 103 | } 104 | bitmapData.copyPixels(input, input.rect, destPoint, buffer); 105 | } 106 | 107 | override internal function trailUpdate(spectrum:Vector.):void { 108 | var h:int, i:int, r:int = columns; 109 | sourceRect.x = 0; 110 | buffer.fillRect(buffer.rect, flectrum.m_trailAlpha); 111 | bitmapData.copyPixels(bitmapData, bitmapData.rect, destPoint, buffer); 112 | buffer.fillRect(buffer.rect, 0); 113 | 114 | for (i = 0; i < columns; ++i) { 115 | h = Math.ceil(spectrum[i] * flectrum.m_rows) * sectionHeight; 116 | sourceRect.y = m_height - h; 117 | sourceRect.height = h; 118 | buffer.fillRect(sourceRect, 0xff000000); 119 | sourceRect.x += sectionWidth; 120 | 121 | h = Math.ceil(spectrum[r] * flectrum.m_rows) * sectionHeight; 122 | sourceRect.y = 0; 123 | sourceRect.height = h; 124 | buffer.fillRect(sourceRect, 0xff000000); 125 | sourceRect.x += sectionWidth; 126 | ++r; 127 | } 128 | bitmapData.copyPixels(input, input.rect, destPoint, buffer, null, true); 129 | } 130 | 131 | override protected function clone():void { 132 | var i:int, v:Vector.; 133 | 134 | if ((flectrum.m_columns & 1) != 0) { 135 | flectrum.m_columns--; 136 | m_width -= sectionWidth; 137 | } 138 | buffer = new BitmapData(m_width, flectrum.meter.height, true, 0); 139 | buffer.lock(); 140 | destPoint.x = 0; 141 | columns = flectrum.m_columns >> 1; 142 | v = scale(true, true); 143 | 144 | sourceRect.x = sectionWidth; 145 | sourceRect.y = 0; 146 | sourceRect.width = flectrum.meter.width; 147 | sourceRect.height = flectrum.meter.height; 148 | 149 | for (i = 0; i < columns; ++i) { 150 | buffer.copyPixels(flectrum.meter, flectrum.meter.rect, destPoint); 151 | destPoint.x += (sectionWidth << 1); 152 | buffer.setVector(sourceRect, v); 153 | sourceRect.x += (sectionWidth << 1); 154 | } 155 | levels = new Vector.(flectrum.m_columns, true); 156 | meters = new Vector.(flectrum.m_columns, true); 157 | finalizeClone(); 158 | } 159 | 160 | override protected function draw():void { 161 | var i:int, s:Shape = new Shape(), g:Graphics = s.graphics, m:Matrix = new Matrix(), t:int, w:int; 162 | 163 | if ((flectrum.m_columns & 1) != 0) { 164 | flectrum.m_columns--; 165 | m_width -= sectionWidth; 166 | } 167 | w = m_width >> 1; 168 | columns = flectrum.m_columns >> 1; 169 | 170 | m.createGradientBox(w, m_height, Math.PI * 0.5, 0, 0); 171 | g.beginGradientFill("linear", flectrum.m_colors[0], flectrum.m_alphas[0], flectrum.m_ratios[0], m); 172 | 173 | for (i = 0; i < columns; ++i) { 174 | g.drawRect(t, 0, sectionWidth, m_height); 175 | t += (sectionWidth << 1); 176 | } 177 | t = sectionWidth; 178 | 179 | m.createGradientBox(w, m_height, Math.PI * 1.5, 0, 0); 180 | g.beginGradientFill("linear", flectrum.m_colors[1], flectrum.m_alphas[1], flectrum.m_ratios[1], m); 181 | 182 | for (i = 0; i < columns; ++i) { 183 | g.drawRect(t, 0, sectionWidth, m_height); 184 | t += (sectionWidth << 1); 185 | } 186 | levels = new Vector.(flectrum.m_columns, true); 187 | meters = new Vector.(flectrum.m_columns, true); 188 | finalizeDraw(s); 189 | } 190 | } 191 | } -------------------------------------------------------------------------------- /haXe Version/bin/swfobject.js: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.0 2 | Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis 3 | This software is released under the MIT License 4 | */ 5 | var swfobject=function(){var Z="undefined",P="object",B="Shockwave Flash",h="ShockwaveFlash.ShockwaveFlash",W="application/x-shockwave-flash",K="SWFObjectExprInst",G=window,g=document,N=navigator,f=[],H=[],Q=null,L=null,T=null,S=false,C=false;var a=function(){var l=typeof g.getElementById!=Z&&typeof g.getElementsByTagName!=Z&&typeof g.createElement!=Z&&typeof g.appendChild!=Z&&typeof g.replaceChild!=Z&&typeof g.removeChild!=Z&&typeof g.cloneNode!=Z,t=[0,0,0],n=null;if(typeof N.plugins!=Z&&typeof N.plugins[B]==P){n=N.plugins[B].description;if(n){n=n.replace(/^.*\s+(\S+\s+\S+$)/,"$1");t[0]=parseInt(n.replace(/^(.*)\..*$/,"$1"),10);t[1]=parseInt(n.replace(/^.*\.(.*)\s.*$/,"$1"),10);t[2]=/r/.test(n)?parseInt(n.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof G.ActiveXObject!=Z){var o=null,s=false;try{o=new ActiveXObject(h+".7")}catch(k){try{o=new ActiveXObject(h+".6");t=[6,0,21];o.AllowScriptAccess="always"}catch(k){if(t[0]==6){s=true}}if(!s){try{o=new ActiveXObject(h)}catch(k){}}}if(!s&&o){try{n=o.GetVariable("$version");if(n){n=n.split(" ")[1].split(",");t=[parseInt(n[0],10),parseInt(n[1],10),parseInt(n[2],10)]}}catch(k){}}}}var v=N.userAgent.toLowerCase(),j=N.platform.toLowerCase(),r=/webkit/.test(v)?parseFloat(v.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,i=false,q=j?/win/.test(j):/win/.test(v),m=j?/mac/.test(j):/mac/.test(v);/*@cc_on i=true;@if(@_win32)q=true;@elif(@_mac)m=true;@end@*/return{w3cdom:l,pv:t,webkit:r,ie:i,win:q,mac:m}}();var e=function(){if(!a.w3cdom){return }J(I);if(a.ie&&a.win){try{g.write("