├── 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 |
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("