STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228089
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2561 · P5121

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/91256127?noj=FRM91256127-3DC" width="1" height="1"></div>

supermario.mod.swf

This is the info page for
Flash #4512

(Click the ID number above for more basic data on this flash file.)


ActionScript [AS3]
Section 1
//ADSR (de.popforge.audio.envelope.ADSR) package de.popforge.audio.envelope { public final class ADSR { private var a:Number; private var d:Number; private var e:int;// = 0 private var f:int;// = 0 private var r:Number; private var s:Number; private static const ENV_RELEASE:int = 3; private static const ENV_DECAY:int = 2; private static const ENV_ATTACK:int = 1; private static const ENV_SILENCE:int = 0; public function ADSR(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number){ e = ENV_SILENCE; f = 0; super(); a = _arg1; d = _arg2; s = _arg3; r = _arg4; } public function set sustain(_arg1:Number):void{ this.s = _arg1; } public function get attack():Number{ return (a); } public function getNextFrameValue():Number{ var _local1:Number; var _local2:Number; _local1 = 0; f++; switch (e){ case ENV_ATTACK: _local2 = ((a - f) - 1); _local1 = (1 - ((_local2 * _local2) / (a * a))); if (f >= a){ e = ENV_DECAY; f = 0; }; break; case ENV_DECAY: _local2 = ((d - f) - 1); _local1 = (s + (((1 - s) * (_local2 * _local2)) / (d * d))); if (f >= d){ e = ENV_RELEASE; f = 0; }; break; case ENV_RELEASE: _local2 = ((r - f) - 1); _local1 = ((s * (_local2 * _local2)) / (r * r)); if (f >= r){ e = ENV_SILENCE; f = 0; }; break; }; return (_local1); } public function set release(_arg1:Number):void{ this.r = _arg1; } public function set attack(_arg1:Number):void{ this.a = _arg1; } public function restart():void{ e = ENV_ATTACK; f = 0; } public function get release():Number{ return (r); } public function get sustain():Number{ return (s); } public function set decay(_arg1:Number):void{ this.d = _arg1; } public function get decay():Number{ return (d); } } }//package de.popforge.audio.envelope
Section 2
//Delay (de.popforge.audio.filters.Delay) package de.popforge.audio.filters { import de.popforge.audio.utils.*; public final class Delay implements IFilter { private const bufferLength:int = 176400; public var feedback:Number; private var stepL:int;// = 0 private var bufferR:Array; private var bufferL:Array; private var stepR:int;// = 0 public var offsetL:Number; private var step:int;// = 0 public var mix:Number; private var bpm:Number; private var rate:uint; public var offsetR:Number; public function Delay(_arg1:uint):void{ step = 0; stepL = 0; stepR = 0; super(); this.rate = _arg1; bufferL = new Array(); bufferR = new Array(); mix = 0.5; feedback = 1; offsetL = 64; offsetR = 32; } public function setBPM(_arg1:Number):void{ this.bpm = _arg1; } public function renderSample(_arg1:Sample):void{ var _local2:Number; _local2 = ((rate * 45) / bpm); if (step >= bufferLength){ step = 0; }; stepL = ((step - _local2) + offsetL); if (stepL < 0){ stepL = (stepL + bufferLength); }; stepR = ((step - _local2) + offsetR); if (stepR < 0){ stepR = (stepR + bufferLength); }; if (bufferL[stepL] != undefined){ _arg1.l = (bufferL[step] = (_arg1.l + ((feedback * bufferL[stepL]) * mix))); } else { bufferL[step] = _arg1.l; }; if (bufferR[stepR] != undefined){ _arg1.r = (bufferR[step] = (_arg1.r + ((feedback * bufferR[stepR]) * mix))); } else { bufferR[step] = _arg1.r; }; step++; } } }//package de.popforge.audio.filters
Section 3
//IFilter (de.popforge.audio.filters.IFilter) package de.popforge.audio.filters { import de.popforge.audio.utils.*; public interface IFilter { function renderSample(_arg1:Sample):void; } }//package de.popforge.audio.filters
Section 4
//Host (de.popforge.audio.output.Host) package de.popforge.audio.output { import flash.events.*; import flash.utils.*; import flash.media.*; import de.popforge.audio.utils.*; public final class Host extends EventDispatcher { private var multiple:uint; private var channels:uint; private var buffer:Sound; private var sync:Sound; private var bits:uint; private var bufferChannel:SoundChannel; private var syncChannel:SoundChannel; private var rate:Number; private var autoStart:Boolean; public static const EVENT_BUFFER_COMPLETE:String = "onBufferComplete"; public static const UNIT_SAMPLES_NUM:uint = 0x0800; public function Host(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:Number, _arg5:Boolean=true){ this.multiple = _arg1; this.channels = _arg2; this.bits = _arg3; this.rate = _arg4; this.autoStart = _arg5; init(); } public function stop():void{ syncChannel.stop(); syncChannel.removeEventListener(Event.SOUND_COMPLETE, play); } public function play(_arg1:Event=null):void{ if (syncChannel != null){ stop(); }; dispatchEvent(new Event(EVENT_BUFFER_COMPLETE)); if (buffer != null){ bufferChannel = buffer.play(); }; syncChannel = sync.play(); syncChannel.addEventListener(Event.SOUND_COMPLETE, play); } public function getSamplesNum():uint{ return ((UNIT_SAMPLES_NUM * multiple)); } private function onSyncInit(_arg1:SoundFactory):void{ sync = _arg1.getSound(); if (autoStart){ play(); }; } public function updateBuffer(_arg1:ByteArray):void{ SoundFactory.generate(_arg1, channels, bits, rate, onUpdateBuffer); } public function getBufferChannel():SoundChannel{ return (bufferChannel); } private function init():void{ var _local1:ByteArray; _local1 = new ByteArray(); _local1.length = (((UNIT_SAMPLES_NUM * multiple) << 1) - 1); SoundFactory.generate(_local1, Waveform.MONO, Waveform.BIT_16, Waveform.KHZ_44100, onSyncInit); } private function onUpdateBuffer(_arg1:SoundFactory):void{ buffer = _arg1.getSound(); } } }//package de.popforge.audio.output
Section 5
//RenderSplitter (de.popforge.audio.output.RenderSplitter) package de.popforge.audio.output { import flash.events.*; import flash.utils.*; import de.popforge.audio.source.*; public final class RenderSplitter extends EventDispatcher { private var renderTime:uint; private var renderTimer:Timer; private var samplesEachTick:uint; private var host:Host; private var remainingSamples:uint; private var sources:Array; public static const EVENT_RENDER_ERROR:String = "onRenderError"; public static const EVENT_RENDER_COMPLETE:String = "onRenderComplete"; public function RenderSplitter(_arg1:Host){ this.host = _arg1; init(); } private function init():void{ sources = new Array(); renderTimer = new Timer(1, 0); renderTimer.addEventListener(TimerEvent.TIMER, render); setRenderSteps(); } public function addSource(_arg1:ISource):void{ sources.push(_arg1); } public function onHostSync(_arg1:Event):void{ var _local2:int; if (remainingSamples > 0){ dispatchEvent(new Event(EVENT_RENDER_ERROR)); return; }; _local2 = sources.length; while (--_local2 > -1) { ISource(sources[_local2]).clearBuffer(); }; remainingSamples = host.getSamplesNum(); renderTime = 0; renderTimer.start(); } private function render(_arg1:TimerEvent):void{ var _local2:int; var _local3:int; var _local4:int; _local2 = getTimer(); if (remainingSamples < samplesEachTick){ _local3 = remainingSamples; } else { _local3 = samplesEachTick; }; _local4 = sources.length; while (--_local4 > -1) { ISource(sources[_local4]).renderBuffer(_local3); }; remainingSamples = (remainingSamples - _local3); renderTime = (renderTime + (getTimer() - _local2)); if (remainingSamples == 0){ renderTimer.stop(); dispatchEvent(new Event(EVENT_RENDER_COMPLETE)); }; } public function setRenderSteps(_arg1:uint=16):void{ samplesEachTick = int((host.getSamplesNum() / _arg1)); } public function getLastRenderTime():uint{ return (renderTime); } } }//package de.popforge.audio.output
Section 6
//Mixer (de.popforge.audio.source.mixer.Mixer) package de.popforge.audio.source.mixer { import flash.utils.*; import de.popforge.audio.utils.*; import de.popforge.audio.source.*; import de.popforge.audio.filters.*; public final class Mixer implements ISource { private var position:uint; private var channels:Array; private var buffer:ByteArray; public function Mixer(){ init(); } public function addChannel(_arg1:MixerChannel):void{ channels.push(_arg1); } public function getBuffer():ByteArray{ return (buffer); } public function clearBuffer():void{ position = 0; buffer.length = 0; } public function renderBuffer(_arg1:int):void{ var _local2:int; var _local3:int; var _local4:Sample; var _local5:MixerChannel; var _local6:IFilter; var _local7:ByteArray; var _local8:int; var _local9:int; var _local10:int; _local4 = new Sample(); _local8 = channels.length; _local10 = 0; while (_local10 < _arg1) { _local3 = 0; _local2 = _local3; _local9 = _local8; while (--_local9 > -1) { _local5 = MixerChannel(channels[_local9]); _local7 = _local5.source.getBuffer(); _local7.position = position; _local4.l = _local7.readShort(); _local4.r = _local7.readShort(); for each (_local6 in _local5.filters) { _local6.renderSample(_local4); }; _local3 = (_local3 + (_local4.l * _local5.volume)); _local2 = (_local2 + (_local4.r * _local5.volume)); }; if (_local3 > 32767){ _local3 = 32767; } else { if (_local3 < -32767){ _local3 = -32767; }; }; if (_local2 > 32767){ _local2 = 32767; } else { if (_local2 < -32767){ _local2 = -32767; }; }; position = (position + 4); buffer.writeShort(_local3); buffer.writeShort(_local2); _local10++; }; } private function init():void{ buffer = new ByteArray(); buffer.endian = Endian.LITTLE_ENDIAN; channels = new Array(); } } }//package de.popforge.audio.source.mixer
Section 7
//MixerChannel (de.popforge.audio.source.mixer.MixerChannel) package de.popforge.audio.source.mixer { import de.popforge.audio.source.*; public final class MixerChannel { public var filters:Array; public var volume:Number;// = 1 public var source:ISource; public function MixerChannel(_arg1:ISource){ volume = 1; super(); this.source = _arg1; filters = new Array(); } } }//package de.popforge.audio.source.mixer
Section 8
//ModPlayer (de.popforge.audio.source.modplayer.ModPlayer) package de.popforge.audio.source.modplayer { import flash.utils.*; import de.popforge.format.mod.*; import de.popforge.audio.source.*; import de.popforge.format.mod.tags.*; public final class ModPlayer implements ISource { private var buffer:ByteArray; private var channels:Array; private var pattern:int;// = 0 private var modFormat:ModFormat; private var row:int;// = 0 private var apeggio:int;// = 0 private var si:int;// = 0 private var bpm:Number; private var rate:Number; private var amigatick:Number;// = 0 public function ModPlayer(_arg1:Number){ si = 0; apeggio = 0; amigatick = 0; row = 0; pattern = 0; super(); this.rate = _arg1; buffer = new ByteArray(); buffer.endian = Endian.LITTLE_ENDIAN; channels = [new ModPlayerTrigger(), new ModPlayerTrigger(), new ModPlayerTrigger(), new ModPlayerTrigger()]; } public function getBuffer():ByteArray{ return (buffer); } public function setBPM(_arg1:Number):void{ this.bpm = _arg1; } public function clearBuffer():void{ buffer.length = 0; } public function renderBuffer(_arg1:int):void{ var _local2:ModPlayerTrigger; var _local3:ModTrigger; var _local4:int; var _local5:Number; var _local6:int; var _local7:Number; var _local8:int; var _local9:Boolean; var _local10:int; var _local11:int; var _local12:int; var _local13:ByteArray; _local5 = 0; _local6 = -1; _local7 = 4; _local8 = 0; while (_local8 < _arg1) { if (--si < 0){ si = (si + ((rate * ((15 * _local7) / 6)) / bpm)); amigatick = 0; apeggio = 0; _local4 = 0; while (_local4 < 4) { _local3 = modFormat.patterns[modFormat.sequence[pattern]][row][_local4]; if (_local3 != null){ _local2 = channels[_local4]; _local2.draw(_local3); if (_local2){ if (_local3.effect == ModPlayerTrigger.EXTENDED_EFFECTS){ if (_local3.effectParam == 192){ _local2.waveform = null; }; } else { if (_local3.effect == ModPlayerTrigger.VOLUME_SLIDE){ _local2.volumeSlide = (_local3.effectParam >> 4); _local2.volumeSlide = (_local2.volumeSlide - (_local3.effectParam & 15)); } else { if (_local3.effect == ModPlayerTrigger.SET_VOLUME){ _local2.volume = _local3.effectParam; }; }; }; }; if (_local3.effect == ModPlayerTrigger.PATTERN_BREAK){ _local6 = _local3.effectParam; }; }; _local4++; }; if (_local6 > -1){ row = _local6; if (++pattern >= modFormat.sequence.length){ pattern = 0; }; } else { row++; }; if (row > 63){ row = 0; if (++pattern >= modFormat.sequence.length){ pattern = 0; }; }; }; _local9 = false; if (--amigatick < 0){ amigatick = (amigatick + ((rate * 2.5) / bpm)); _local9 = true; }; _local5 = 0; _local4 = 0; while (_local4 < 4) { _local2 = channels[_local4]; if (_local9){ _local2.volume = (_local2.volume + _local2.volumeSlide); if (_local2.volume < 0){ _local2.volume = 0; } else { if (_local2.volume > 64){ _local2.volume = 64; }; }; }; if (_local2.effectParam > 0){ _local10 = _local2.effect; if (_local9){ if (_local10 == ModPlayerTrigger.ARPEGGIO){ _local11 = (++apeggio % 3); if (_local11 == 2){ _local2.period = _local2.recomputePeriodFromToneOffset((_local2.effectParam & 15)); } else { if (_local11 == 1){ _local2.period = _local2.recomputePeriodFromToneOffset((_local2.effectParam >> 4)); } else { if (_local11 == 0){ _local2.period = _local2.recomputePeriodFromToneOffset(0); }; }; }; } else { if (_local10 == ModPlayerTrigger.SLIDE_UP){ _local2.period = (_local2.period - _local2.effectParam); } else { if (_local10 == ModPlayerTrigger.SLIDE_DN){ _local2.period = (_local2.period + _local2.effectParam); }; }; }; }; }; if (_local2.waveform){ _local12 = ((_local2.position * 80) / _local2.period); if (_local12 >= _local2.waveform.length){ if (_local2.repeatEnd == 0){ trace("STOP"); _local2.waveform = null; break; } else { if (_local2.repeatEnd > 0){ _local13 = new ByteArray(); _local13.writeBytes(_local2.waveform, _local2.repeatStart, _local2.repeatEnd); _local2.waveform = _local13; _local2.repeatEnd = -1; _local2.waveform.position = (_local12 % _local2.waveform.length); } else { if (_local2.repeatEnd == -1){ _local2.waveform.position = (_local12 % _local2.waveform.length); }; }; }; } else { _local2.waveform.position = _local12; }; _local5 = (_local5 + ((_local2.waveform.readByte() / 0xFF) * (_local2.volume / 64))); _local2.position++; }; _local4++; }; if (_local5 > 1){ _local5 = 1; } else { if (_local5 < -1){ _local5 = -1; }; }; buffer.writeShort((_local5 * 32767)); buffer.writeShort((_local5 * 32767)); _local8++; }; } public function loadMod(_arg1:ModFormat):void{ this.modFormat = _arg1; } } }//package de.popforge.audio.source.modplayer
Section 9
//ModPlayerTrigger (de.popforge.audio.source.modplayer.ModPlayerTrigger) package de.popforge.audio.source.modplayer { import flash.utils.*; import de.popforge.format.mod.tags.*; public final class ModPlayerTrigger { public var repeatEnd:int; public var period:Number; public var effect:int; private var modTrigger:ModTrigger; public var volume:int; public var repeatStart:int; public var position:int; private var tone:Number; public var volumeSlide:int; public var effectParam:int; public var waveform:ByteArray; public static const POSITION_JUMP:int = 11; public static const SLIDE_UP:int = 1; public static const TONE_PORTAMENTO_VOLUME_SLIDE:int = 5; private static const table:Array = [856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453, 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113]; public static const SAMPLE_OFFSET:int = 9; public static const VIBRATO_VOLUME_SLIDE:int = 6; public static const PATTERN_BREAK:int = 13; public static const VIBRATO:int = 4; public static const EXTENDED_EFFECTS:int = 14; public static const SET_SPEED:int = 15; public static const ARPEGGIO:int = 0; public static const TREMOLO:int = 7; public static const SET_PANNING:int = 8; public static const SET_VOLUME:int = 12; public static const SLIDE_DN:int = 2; public static const VOLUME_SLIDE:int = 10; public static const TONE_PORTAMENTO:int = 3; public function draw(_arg1:ModTrigger):void{ if (_arg1.modSample){ waveform = _arg1.modSample.waveform; repeatStart = _arg1.modSample.repeatStart; repeatEnd = _arg1.modSample.repeatEnd; volume = _arg1.modSample.volume; position = 0; }; if (_arg1.period > 0){ period = _arg1.period; computeTone(); }; effect = _arg1.effect; effectParam = _arg1.effectParam; volumeSlide = 0; } public function computeTone():void{ var _local1:int; _local1 = 36; while (--_local1 > -1) { if (table[_local1] == period){ tone = _local1; return; }; }; } public function recomputePeriodFromToneOffset(_arg1:int):Number{ return (table[(tone + _arg1)]); } } }//package de.popforge.audio.source.modplayer
Section 10
//MonoSys (de.popforge.audio.source.monosys.MonoSys) package de.popforge.audio.source.monosys { import flash.utils.*; import de.popforge.audio.envelope.*; import de.popforge.audio.*; import de.popforge.audio.source.*; public final class MonoSys implements ISource { private var buffer:ByteArray; private var adsr:ADSR; private var patternStep:int;// = 0 private var pattern:Array; private var si:int;// = 0 private var ftl:FilterTransform; private var bpm:Number; private var rate:Number; private var waveStep:Number;// = 0 private var slide:Number; private var freq:Number; private var waveform:int;// = 0 public static const WAVEFORM_SAWTOOTH:int = 0; public static const WAVEFORM_SINUS:int = 2; public static const WAVEFORM_SQUARE:int = 1; public function MonoSys(_arg1:int){ waveform = WAVEFORM_SAWTOOTH; waveStep = 0; si = 0; pattern = [new MonoSysTrigger(4, 0, false)]; patternStep = 0; super(); this.rate = _arg1; buffer = new ByteArray(); buffer.endian = Endian.LITTLE_ENDIAN; adsr = new ADSR(32, 0x2000, 0.5, 0x4000); ftl = new FilterTransform(0.2, 0.9); } public function getFilterTransform():FilterTransform{ return (ftl); } public function getADSR():ADSR{ return (adsr); } public function shufflePattern():void{ var _local1:MonoSysTrigger; var _local2:Boolean; var _local3:int; _local2 = false; pattern = new Array(); _local3 = 0; while (_local3 < 8) { if (Math.random() < 0.8){ _local1 = new MonoSysTrigger((2 + Math.floor((Math.random() * 4))), (1 + Math.floor((Math.random() * 12))), (Math.random() < 0.1)); if (_local1.portamento){ _local2 = true; }; } else { _local1 = null; }; pattern.push(_local1); _local3++; }; if (!_local2){ shufflePattern(); }; } public function setBPM(_arg1:Number):void{ this.bpm = _arg1; } public function getBuffer():ByteArray{ return (buffer); } public function clearBuffer():void{ buffer.length = 0; } public function renderBuffer(_arg1:int):void{ var _local2:Number; var _local3:int; var _local4:Number; var _local5:MonoSysTrigger; var _local6:int; var _local7:Number; _local3 = 0; while (_local3 < _arg1) { if (--si < 0){ si = (si + ((rate * 15) / bpm)); _local5 = pattern[patternStep]; if (_local5 != null){ freq = (440 * Math.pow(2, ((_local5.octave - 3) + ((_local5.tone - 9) / 12)))); adsr.restart(); ftl.envelope.restart(); waveStep = 0; slide = 0; if (_local5.portamento){ _local6 = 0; while (pattern[(++_local6 + patternStep)] == null) { if (_local6 > 7){ break; }; }; if (_local6 < 8){ _local5 = pattern[(_local6 + patternStep)]; _local7 = (440 * Math.pow(2, ((_local5.octave - 4) + ((_local5.tone - 10) / 12)))); slide = (((_local7 - freq) / ((rate * 15) / bpm)) / _local6); }; }; }; patternStep++; patternStep = (patternStep % 8); }; waveStep++; freq = (freq + slide); _local4 = (waveStep / ((rate * 2) / freq)); switch (waveform){ case WAVEFORM_SAWTOOTH: _local2 = (int((_local4 + 0.5)) - _local4); break; case WAVEFORM_SQUARE: _local2 = (_local4 - int(_local4)); if (_local2 < 0.5){ _local2 = -0.5; } else { if (_local2 > 0.5){ _local2 = 0.5; }; }; break; case WAVEFORM_SINUS: _local2 = (Math.sin((_local4 * (Math.PI * 2))) / 2); break; }; _local2 = (ftl.lowPass(_local2) * adsr.getNextFrameValue()); if (_local2 > 1){ _local2 = 1; } else { if (_local2 < -1){ _local2 = -1; }; }; buffer.writeShort((_local2 * 32767)); buffer.writeShort((_local2 * 32767)); _local3++; }; } } }//package de.popforge.audio.source.monosys
Section 11
//MonoSysTrigger (de.popforge.audio.source.monosys.MonoSysTrigger) package de.popforge.audio.source.monosys { public final class MonoSysTrigger { public var octave:uint; public var tone:uint; public var portamento:Boolean; public function MonoSysTrigger(_arg1:uint=4, _arg2:uint=0, _arg3:Boolean=false){ this.octave = _arg1; this.tone = _arg2; this.portamento = _arg3; } } }//package de.popforge.audio.source.monosys
Section 12
//Perlin (de.popforge.audio.source.perlin.Perlin) package de.popforge.audio.source.perlin { import flash.utils.*; import de.popforge.audio.envelope.*; import flash.display.*; import de.popforge.audio.source.*; public final class Perlin implements ISource { private var buffer:ByteArray; private var adsr:ADSR; public var perlinBase:Number;// = 0x0200 private var bmp:BitmapData; private var perlinStep:int;// = 0 private var pattern:Array; private var si:int;// = 0 private var bpm:Number; private var rate:Number; public var perlinOctave:uint;// = 4 public var perlinSeed:uint;// = 1 private var slide:Number; private var freq:Number; private var patternStep:int;// = 0 public var perlinFractal:Boolean;// = false public function Perlin(_arg1:Number){ perlinBase = 0x0200; perlinSeed = 1; perlinOctave = 4; perlinFractal = false; perlinStep = 0; si = 0; pattern = [new PerlinTrigger(4, 0, false), null, new PerlinTrigger(5, 7, false), new PerlinTrigger(5, 3, false), new PerlinTrigger(5, 0, false), null, new PerlinTrigger(4, 7, false), null]; patternStep = 0; super(); this.rate = _arg1; buffer = new ByteArray(); buffer.endian = Endian.LITTLE_ENDIAN; adsr = new ADSR(32, 0x2000, 0.5, 0x4000); adsr.attack = 64; adsr.sustain = 1; adsr.release = 0x1000; bmp = new BitmapData(0x0800, 1, false, 0); updatePerlin(); } public function updatePerlin():void{ bmp.perlinNoise(perlinBase, perlinBase, perlinOctave, perlinSeed, true, perlinFractal, BitmapDataChannel.BLUE, false); } public function shufflePattern():void{ var _local1:PerlinTrigger; var _local2:Boolean; var _local3:int; _local2 = false; pattern = new Array(); _local3 = 0; while (_local3 < 8) { if (Math.random() < 0.8){ _local1 = new PerlinTrigger((2 + Math.floor((Math.random() * 4))), (1 + Math.floor((Math.random() * 12))), (Math.random() < 0.1)); if (_local1.portamento){ _local2 = true; }; } else { _local1 = null; }; pattern.push(_local1); _local3++; }; if (!_local2){ shufflePattern(); }; } public function clearBuffer():void{ buffer.length = 0; } public function getBuffer():ByteArray{ return (buffer); } public function setBPM(_arg1:Number):void{ this.bpm = _arg1; } public function renderBuffer(_arg1:int):void{ var _local2:PerlinTrigger; var _local3:Number; var _local4:int; var _local5:Number; var _local6:int; var _local7:Number; _local4 = 0; while (_local4 < _arg1) { if (--si < 0){ si = (si + ((rate * 15) / bpm)); _local2 = pattern[patternStep]; if (_local2 != null){ freq = (440 * Math.pow(2, ((_local2.octave - 3) + ((_local2.tone - 9) / 12)))); adsr.restart(); perlinStep = 0; slide = 0; if (_local2.portamento){ _local6 = 0; while (pattern[(++_local6 + patternStep)] == null) { if (_local6 > 7){ break; }; }; if (_local6 < 8){ _local2 = pattern[(_local6 + patternStep)]; _local7 = (440 * Math.pow(2, ((_local2.octave - 4) + ((_local2.tone - 10) / 12)))); slide = (((_local7 - freq) / ((rate * 15) / bpm)) / _local6); }; }; }; patternStep++; patternStep = (patternStep % 8); }; perlinStep++; freq = (freq + slide); _local5 = (perlinStep / ((rate * 2) / freq)); switch (perlinFractal){ case true: _local3 = ((bmp.getPixel(((_local5 * 0x0400) & 2047), 0) / 64) - 2); break; case false: _local3 = ((bmp.getPixel(((_local5 * 0x0400) & 2047), 0) / 63) - 0.5); break; }; _local3 = (_local3 * adsr.getNextFrameValue()); if (_local3 > 1){ _local3 = 1; } else { if (_local3 < -1){ _local3 = -1; }; }; buffer.writeShort((_local3 * 32767)); buffer.writeShort((_local3 * 32767)); _local4++; }; } } }//package de.popforge.audio.source.perlin
Section 13
//PerlinTrigger (de.popforge.audio.source.perlin.PerlinTrigger) package de.popforge.audio.source.perlin { public final class PerlinTrigger { public var octave:uint; public var tone:uint; public var portamento:Boolean; public function PerlinTrigger(_arg1:uint=4, _arg2:uint=0, _arg3:Boolean=false){ this.octave = _arg1; this.tone = _arg2; this.portamento = _arg3; } } }//package de.popforge.audio.source.perlin
Section 14
//Sampler (de.popforge.audio.source.sampler.Sampler) package de.popforge.audio.source.sampler { import flash.utils.*; import de.popforge.audio.utils.*; import de.popforge.audio.source.*; public final class Sampler implements ISource { private var buffer:ByteArray; private var channelNum:int;// = 0 private var channels:Array; private var waveforms:Array; private var pattern:Array; private var si:int;// = 0 private var bpm:Number; private var rate:int; private var patternStep:int;// = 0 public function Sampler(_arg1:int){ channelNum = 0; si = 0; pattern = [[new SamplerTrigger(0)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0), new SamplerTrigger(4)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0), new SamplerTrigger(4)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0), new SamplerTrigger(4)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0)], [], [new SamplerTrigger(2)], [new SamplerTrigger(1)], [new SamplerTrigger(0), new SamplerTrigger(4)], [], [new SamplerTrigger(0), new SamplerTrigger(2)], [new SamplerTrigger(1)]]; patternStep = 0; super(); this.rate = _arg1; buffer = new ByteArray(); buffer.endian = Endian.LITTLE_ENDIAN; channels = new Array(); waveforms = new Array(); } public function getBuffer():ByteArray{ return (buffer); } public function setBPM(_arg1:Number):void{ this.bpm = _arg1; } public function loadSample(_arg1:Waveform, _arg2:int):void{ waveforms[_arg2] = _arg1; } public function clearBuffer():void{ buffer.length = 0; } public function renderBuffer(_arg1:int):void{ var _local2:SamplerTrigger; var _local3:Array; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:ByteArray; var _local9:SamplerChannel; var _local10:int; _local10 = 0; while (_local10 < _arg1) { if (--si < 0){ si = (si + ((rate * 15) / bpm)); _local3 = pattern[patternStep]; for each (_local2 in _local3) { if (waveforms[_local2.index]){ _local9 = new SamplerChannel(waveforms[_local2.index], Math.pow(2, ((_local2.octave - 4) + (_local2.tone / 12))), _local2.backwards); channels[_local9.id] = _local9; channelNum++; }; }; patternStep++; patternStep = (patternStep & 31); }; _local6 = 0; _local5 = _local6; for each (_local9 in channels) { _local7 = _local9.pitch; _local8 = _local9.waveform.data; if (_local9.position < (_local9.length / _local7)){ if (_local9.backwards){ _local8.position = (((_local9.length << _local9.waveform.channels) - int(((_local9.position * _local7) << _local9.waveform.channels))) - (2 * _local9.waveform.channels)); } else { _local8.position = ((_local9.position * _local7) << _local9.waveform.channels); }; if (_local9.waveform.channels == 1){ _local4 = _local8.readShort(); _local6 = (_local6 + _local4); _local5 = (_local5 + _local4); } else { _local6 = (_local6 + _local8.readShort()); _local5 = (_local5 + _local8.readShort()); }; } else { delete channels[_local9.id]; channelNum--; }; _local9.position++; }; if (_local6 > 32767){ _local6 = 32767; } else { if (_local6 < -32767){ _local6 = -32767; }; }; if (_local5 > 32767){ _local5 = 32767; } else { if (_local5 < -32767){ _local5 = -32767; }; }; buffer.writeShort(_local6); buffer.writeShort(_local5); _local10++; }; } } }//package de.popforge.audio.source.sampler
Section 15
//SamplerChannel (de.popforge.audio.source.sampler.SamplerChannel) package de.popforge.audio.source.sampler { import de.popforge.audio.utils.*; final class SamplerChannel { public var pitch:Number; public var length:int; public var position:int; public var backwards:Boolean; public var id:int; public var waveform:Waveform; private static var uniqueId:int = 0; function SamplerChannel(_arg1:Waveform, _arg2:Number, _arg3:Boolean){ this.waveform = _arg1; this.pitch = _arg2; this.backwards = _arg3; length = (_arg1.data.length >> _arg1.channels); position = 0; id = uniqueId++; } } }//package de.popforge.audio.source.sampler
Section 16
//SamplerTrigger (de.popforge.audio.source.sampler.SamplerTrigger) package de.popforge.audio.source.sampler { public final class SamplerTrigger { public var octave:int; public var index:int; public var backwards:Boolean; public var tone:int; public var volume:Number;// = 1 public var pan:Number;// = 0 public function SamplerTrigger(_arg1:int, _arg2:int=4, _arg3:int=0, _arg4:Boolean=false){ volume = 1; pan = 0; super(); this.index = _arg1; this.octave = _arg2; this.tone = _arg3; this.backwards = _arg4; } } }//package de.popforge.audio.source.sampler
Section 17
//ISource (de.popforge.audio.source.ISource) package de.popforge.audio.source { import flash.utils.*; public interface ISource { function clearBuffer():void; function renderBuffer(_arg1:int):void; function getBuffer():ByteArray; } }//package de.popforge.audio.source
Section 18
//Sample (de.popforge.audio.utils.Sample) package de.popforge.audio.utils { public class Sample { public var r:Number; public var l:Number; public function Sample(_arg1:Number=0, _arg2:Number=0){ this.l = _arg1; this.r = _arg2; } } }//package de.popforge.audio.utils
Section 19
//SoundFactory (de.popforge.audio.utils.SoundFactory) package de.popforge.audio.utils { import flash.events.*; import flash.utils.*; import flash.media.*; import flash.display.*; import de.popforge.format.swf.*; import de.popforge.format.swf.tags.*; public class SoundFactory { private const ModSWF:Class; private var swf:SWFFormat; private var swfDefSnd:DefineSound; private var loader:Loader; private var sound:Sound; private var onComplete:Function; public function SoundFactory(){ ModSWF = SoundFactory_ModSWF; super(); swf = new SWFFormat(ByteArray(new ModSWF())); swfDefSnd = DefineSound(swf.assets[1]); loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSWFLoaded); } private function onSWFLoaded(_arg1:Event):void{ var clazz:Class; var event = _arg1; try { clazz = (loader.contentLoaderInfo.applicationDomain.getDefinition("SoundItem") as Class); } catch(e:Error) { }; if (clazz){ sound = Sound(new (clazz)); } else { sound = null; }; onComplete(this); } public function getSound():Sound{ return (sound); } public static function generate(_arg1:ByteArray, _arg2:uint, _arg3:uint, _arg4:uint, _arg5:Function):void{ var _local6:SoundFactory; _local6 = new (SoundFactory); _local6.swfDefSnd.setChannels(_arg2); _local6.swfDefSnd.setBits(_arg3); _local6.swfDefSnd.setRate(_arg4); _local6.swfDefSnd.overrideSamples(_arg1); _local6.loader.loadBytes(_local6.swf.save()); _local6.onComplete = _arg5; } } }//package de.popforge.audio.utils
Section 20
//SoundFactory_ModSWF (de.popforge.audio.utils.SoundFactory_ModSWF) package de.popforge.audio.utils { import mx.core.*; public class SoundFactory_ModSWF extends ByteArrayAsset { } }//package de.popforge.audio.utils
Section 21
//Waveform (de.popforge.audio.utils.Waveform) package de.popforge.audio.utils { import flash.utils.*; public class Waveform { public var bits:uint; public var data:ByteArray; public var rate:uint; public var channels:uint; public static const MONO:uint = 1; public static const BIT_8:uint = 8; public static const KHZ_22050:uint = 22050; public static const KHZ_5512:uint = 5512; public static const KHZ_44100:uint = 44100; public static const KHZ_11025:uint = 11025; public static const BIT_16:uint = 16; public static const STEREO:uint = 2; public function Waveform(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:ByteArray){ this.channels = _arg1; this.bits = _arg2; this.rate = _arg3; this.data = _arg4; } } }//package de.popforge.audio.utils
Section 22
//FilterTransform (de.popforge.audio.FilterTransform) package de.popforge.audio { import de.popforge.audio.envelope.*; public final class FilterTransform { public var cutoff:Number;// = 0 public var out:Number;// = 0 public var envelope:ADSR; public var resonance:Number;// = 0 private var vel:Number;// = 0 public function FilterTransform(_arg1:Number=1, _arg2:Number=0){ cutoff = 0; resonance = 0; out = 0; vel = 0; super(); this.cutoff = _arg1; this.resonance = _arg2; envelope = new ADSR(32, 0x0800, 0.25, 5096); } public function lowPass(_arg1:Number):Number{ vel = (vel * resonance); vel = (vel + ((_arg1 - out) * (cutoff * envelope.getNextFrameValue()))); out = (out + vel); if (out > 1){ out = 1; } else { if (out < -1){ out = -1; }; }; return (out); } } }//package de.popforge.audio
Section 23
//ModSample (de.popforge.format.mod.tags.ModSample) package de.popforge.format.mod.tags { import flash.utils.*; public final class ModSample { public var repeatEnd:int; public var length:int; public var repeatStart:int; public var tone:int; public var title:String; public var volume:int; public var waveform:ByteArray; public function ModSample(_arg1:ByteArray){ parse(_arg1); } public function loadWaveform(_arg1:ByteArray):void{ if (length == 0){ return; }; waveform = new ByteArray(); _arg1.readBytes(waveform, 0, length); } private function parse(_arg1:ByteArray):void{ var _local2:int; var _local3:uint; _arg1.position = 0; title = ""; _local2 = 0; while (_local2 < 22) { _local3 = uint(_arg1.readByte()); if (_local3 != 0){ title = (title + String.fromCharCode(_local3)); }; _local2++; }; length = _arg1.readUnsignedShort(); tone = _arg1.readUnsignedByte(); volume = _arg1.readUnsignedByte(); repeatStart = _arg1.readUnsignedShort(); repeatEnd = _arg1.readUnsignedShort(); length = (length << 1); repeatStart = (repeatStart << 1); repeatEnd = (repeatEnd << 1); } public function toString():String{ return (((((((((((((("[MOD Sample" + " title: ") + title) + ", length: ") + length) + ", tone: ") + tone) + ", volume: ") + volume) + ", repeatStart: ") + repeatStart) + ", repeatEnd: ") + repeatEnd) + "]")); } } }//package de.popforge.format.mod.tags
Section 24
//ModTrigger (de.popforge.format.mod.tags.ModTrigger) package de.popforge.format.mod.tags { import flash.utils.*; public final class ModTrigger { public var period:uint; public var modSample:ModSample; public var effect:uint; public var effectParam:uint; public function ModTrigger(_arg1:ByteArray, _arg2:Array){ parse(_arg1, _arg2); } private function parse(_arg1:ByteArray, _arg2:Array):void{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; _local3 = _arg1.readUnsignedByte(); _local4 = _arg1.readUnsignedByte(); _local5 = _arg1.readUnsignedByte(); _local6 = _arg1.readUnsignedByte(); modSample = _arg2[Math.abs(((_local3 & 240) | (_local5 >> 4)))]; period = Math.abs((((_local3 & 15) << 8) + _local4)); effect = Math.abs((_local5 & 15)); effectParam = _local6; } public function toString():String{ return (((((((((("[MOD Trigger" + " modSample: ") + modSample) + ", period: ") + period) + ", effect: ") + effect) + ", effectParam: ") + effectParam) + "]")); } } }//package de.popforge.format.mod.tags
Section 25
//ModFormat (de.popforge.format.mod.ModFormat) package de.popforge.format.mod { import flash.utils.*; import de.popforge.format.mod.tags.*; public final class ModFormat { private const P_FORMAT:uint = 1080; private const P_SEQUENCE:uint = 952; private const P_PATTERNS:uint = 1084; private const P_LENGTH:uint = 950; public var sequence:Array; public var title:String; public var patterns:Array; public var modSamples:Array; public var length:uint; public var format:String; public function ModFormat(_arg1:ByteArray=null){ patterns = new Array(); sequence = new Array(); modSamples = new Array(32); format = ""; title = ""; if (_arg1 != null){ load(_arg1); }; } public function load(_arg1:ByteArray):void{ parse(_arg1); } private function parse(_arg1:ByteArray):void{ var _local2:int; var _local3:int; var _local4:ByteArray; var _local5:ModSample; var _local6:uint; var _local7:int; var _local8:int; _arg1.endian = Endian.LITTLE_ENDIAN; _arg1.position = P_FORMAT; _local2 = 0; format = (((String.fromCharCode(_arg1.readByte()) + String.fromCharCode(_arg1.readByte())) + String.fromCharCode(_arg1.readByte())) + String.fromCharCode(_arg1.readByte())); if (format.toLocaleLowerCase() != "m.k."){ throw (new Error("Unsupported MOD format")); }; title = ""; _arg1.position = 0; _local3 = 0; while (_local3 < 20) { _local6 = _arg1.readUnsignedByte(); if (_local6 == 0){ break; }; title = (title + String.fromCharCode(_local6)); _local3++; }; _arg1.position = P_LENGTH; length = _arg1.readUnsignedByte(); _local4 = new ByteArray(); _local3 = 1; while (_local3 <= 31) { _arg1.position = (((_local3 - 1) * 30) + 20); _local4.position = 0; _arg1.readBytes(_local4, 0, 30); modSamples[_local3] = new ModSample(_local4); _local3++; }; _arg1.position = P_SEQUENCE; sequence = new Array(length); _local3 = 0; while (_local3 < length) { sequence[_local3] = _arg1.readUnsignedByte(); if (sequence[_local3] > _local2){ _local2 = sequence[_local3]; }; _local3++; }; _local3 = 0; while (_local3 < (_local2 + 1)) { _arg1.position = (P_PATTERNS + (_local3 * 0x0400)); patterns[_local3] = new Array(64); _local7 = 0; while (_local7 < 64) { patterns[_local3][_local7] = new Array(4); _local8 = 0; while (_local8 < 4) { patterns[_local3][_local7][_local8] = new ModTrigger(_arg1, modSamples); _local8++; }; _local7++; }; _local3++; }; _local3 = 1; while (_local3 <= 31) { _local5 = ModSample(modSamples[_local3]); _local5.loadWaveform(_arg1); _local3++; }; } } }//package de.popforge.format.mod
Section 26
//DefineSound (de.popforge.format.swf.tags.DefineSound) package de.popforge.format.swf.tags { import flash.utils.*; public class DefineSound extends Tag { public var sampleCount:uint; public var samples:ByteArray; public var sampleBits:uint; public var sampleChannels:uint; public var sampleRate:uint; public var assetId:uint; public var formatId:uint; public static const SAMPLERATES:Array = ["5.5 kHz", "11 kHz", "22 kHz", "44 kHz"]; public static const TYPES:Array = ["sndMono", "sndStereo"]; public static const FORMATS:Array = ["uncompressed", "ADPCM", "MP3", "uncompressed little endian", null, null, "Nellymoser"]; public static const SAMPLESIZES:Array = ["snd8Bit", "snd16Bit"]; public function DefineSound(_arg1:uint, _arg2:ByteArray, _arg3:uint, _arg4:uint){ super(_arg1, _arg2, _arg3, _arg4); parse(); } private function parse():void{ var _local1:int; var _local2:uint; var _local3:int; assetId = bytes.readUnsignedShort(); resetBits(); formatId = getBits(bytes, 4); sampleRate = getBits(bytes, 2); sampleBits = getBits(bytes, 1); sampleChannels = getBits(bytes, 1); sampleCount = bytes.readUnsignedInt(); _local1 = sampleCount; if (sampleBits == 16){ _local1 = (_local1 << 1); }; if (sampleChannels == 2){ _local1 = (_local1 << 1); }; samples = new ByteArray(); _local2 = bytes.position; _local3 = 0; while (_local3 < _local1) { samples[_local3] = bytes[(_local2 + _local3)]; _local3++; }; resetBits(); } public function setBits(_arg1:uint):void{ switch (_arg1){ case 8: bytes[2] = (bytes[2] - (bytes[2] & 2)); break; case 16: bytes[2] = (bytes[2] | 2); break; default: trace("[Error] SWF only supports 8BIT and 16BIT."); }; sampleBits = _arg1; } public function setChannels(_arg1:uint):void{ switch (_arg1){ case 1: bytes[2] = (bytes[2] - (bytes[2] & 1)); break; case 2: bytes[2] = (bytes[2] | 1); break; default: trace("[Error] SWF only supports MONO and STEREO."); }; sampleChannels = _arg1; } public function setRate(_arg1:uint):void{ switch (_arg1){ case 44100: bytes[2] = (bytes[2] & 243); bytes[2] = (bytes[2] | 12); break; case 22050: bytes[2] = (bytes[2] & 243); bytes[2] = (bytes[2] | 8); break; case 11025: bytes[2] = (bytes[2] & 243); bytes[2] = (bytes[2] | 4); break; case 5512: bytes[2] = (bytes[2] & 243); break; default: trace("[Error] Samplingrate not supported by SWF."); }; sampleRate = _arg1; } public function overrideSamples(_arg1:ByteArray):void{ _arg1.position = 0; sampleCount = _arg1.length; if (sampleBits == 16){ sampleCount = (sampleCount >> 1); }; if (sampleChannels == 2){ sampleCount = (sampleCount >> 1); }; bytes.position = 3; bytes.writeUnsignedInt(sampleCount); bytes.length = 7; bytes.writeBytes(_arg1); bytes.position = 0; } public function toString():String{ return (((((((((((((("[DefineSound" + " assetId: ") + assetId) + ", format: ") + FORMATS[formatId]) + ", sampleRate: ") + SAMPLERATES[sampleRate]) + ", sampleBits: ") + SAMPLESIZES[sampleBits]) + ", sampleChannels: ") + TYPES[sampleChannels]) + ", sampleCount: ") + sampleCount) + "]")); } } }//package de.popforge.format.swf.tags
Section 27
//ExportAsset (de.popforge.format.swf.tags.ExportAsset) package de.popforge.format.swf.tags { import flash.utils.*; public class ExportAsset extends Tag { public function ExportAsset(_arg1:uint, _arg2:ByteArray, _arg3:uint, _arg4:uint){ super(_arg1, _arg2, _arg3, _arg4); parse(); } private function parse():void{ var _local1:uint; var _local2:uint; var _local3:String; var _local4:uint; var _local5:uint; _local1 = bytes.readUnsignedShort(); _local3 = new String(""); _local5 = 0; while (_local5 < _local1) { _local3 = ""; _local2 = bytes.readUnsignedShort(); while (true) { _local4 = bytes.readByte(); if (_local4){ _local3 = (_local3 + String.fromCharCode(_local4)); } else { break; }; }; _local5++; }; bytes.position = 0; resetBits(); } } }//package de.popforge.format.swf.tags
Section 28
//Header (de.popforge.format.swf.tags.Header) package de.popforge.format.swf.tags { import flash.utils.*; import flash.geom.*; public class Header extends Tag { public var compressed:Boolean; public var fileLength:uint; public var frameRate:Number; public var frameSize:Rectangle; public var frameCount:uint; public var version:uint; public function Header(_arg1:uint, _arg2:ByteArray, _arg3:uint, _arg4:uint){ super(_arg1, _arg2, _arg3, _arg4); parse(); } private function parse():void{ bytes.position = 0; compressed = (bytes.readUTFBytes(1) == "C"); if (compressed){ trace("compressed SWF are not supported yet."); return; }; bytes.position = (bytes.position + 2); version = bytes.readByte(); fileLength = bytes.readUnsignedInt(); frameSize = readRectangle(bytes); frameRate = (bytes.readUnsignedShort() / 0x0100); frameCount = bytes.readUnsignedShort(); } public function toString():String{ return (((((((((((((("[SWF Header" + " compressed: ") + compressed) + ", version: ") + version) + ", fileLength: ") + fileLength) + ", frameSize: ") + frameSize) + ", frameRate: ") + frameRate) + ", frameCount: ") + frameCount) + "]")); } public function changeFileLength(_arg1:uint):void{ bytes.position = 4; bytes.writeUnsignedInt(_arg1); bytes.position = 0; } } }//package de.popforge.format.swf.tags
Section 29
//Tag (de.popforge.format.swf.tags.Tag) package de.popforge.format.swf.tags { import flash.utils.*; import flash.geom.*; public class Tag { public var id:uint; public var bytes:ByteArray; public static const BGCOLOR:int = 9; public static const SOUND:int = 14; public static const EXPORT_ASSETS:int = 56; public static const END:int = 0; public static var bitPos:uint; public static var bitBuffer:uint; public function Tag(_arg1:uint, _arg2:ByteArray, _arg3:uint, _arg4:uint){ this.id = _arg1; bytes = new ByteArray(); bytes.endian = Endian.LITTLE_ENDIAN; _arg2.readBytes(bytes, 0, _arg4); bytes.position = 0; } public function writeBack(_arg1:ByteArray):void{ var _local2:uint; var _local3:uint; bytes.position = 0; if (!(this is Header)){ _local2 = (id << 6); _local3 = bytes.length; if (_local3 < 63){ _local2 = (_local2 | _local3); _arg1.writeShort(_local2); } else { _local2 = (_local2 | 63); _arg1.writeShort(_local2); _arg1.writeUnsignedInt(_local3); }; }; _arg1.writeBytes(bytes, 0, bytes.length); } public static function resetBits():void{ bitPos = 8; } public static function getBits(_arg1:ByteArray, _arg2:int):int{ var _local3:int; var _local4:int; _local3 = 0; while (_arg2 >= 1) { if (bitPos == 8){ bitPos = 0; bitBuffer = _arg1.readByte(); }; _local3 = (_local3 << 1); _local4 = (128 >> bitPos); _local3 = (_local3 | (((bitBuffer & _local4) == _local4)) ? 1 : 0); _arg2--; bitPos = (bitPos + 1); }; return (_local3); } public static function readRectangle(_arg1:ByteArray):Rectangle{ var _local2:int; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; resetBits(); _local2 = getBits(_arg1, 5); _local3 = getBits(_arg1, _local2); _local4 = (getBits(_arg1, _local2) / 20); _local5 = getBits(_arg1, _local2); _local6 = (getBits(_arg1, _local2) / 20); resetBits(); return (new Rectangle(_local3, _local5, (_local4 - _local3), (_local6 - _local5))); } } }//package de.popforge.format.swf.tags
Section 30
//UnknownTag (de.popforge.format.swf.tags.UnknownTag) package de.popforge.format.swf.tags { import flash.utils.*; public class UnknownTag extends Tag { public function UnknownTag(_arg1:uint, _arg2:ByteArray, _arg3:uint, _arg4:uint){ super(_arg1, _arg2, _arg3, _arg4); } } }//package de.popforge.format.swf.tags
Section 31
//SWFFormat (de.popforge.format.swf.SWFFormat) package de.popforge.format.swf { import flash.utils.*; import de.popforge.format.swf.tags.*; public class SWFFormat { public var assets:Array; public var header:Header; public var tags:Array; public var bgColor:uint; public function SWFFormat(_arg1:ByteArray=null){ tags = new Array(); assets = new Array(); if (_arg1 != null){ load(_arg1); }; } private function parse(_arg1:ByteArray):void{ var _local2:uint; var _local3:uint; var _local4:uint; var _local5:uint; var _local6:Boolean; var _local7:Tag; _arg1.endian = Endian.LITTLE_ENDIAN; _arg1.position = 0; header = new Header(0, _arg1, 0, 21); tags.push(header); _local6 = false; while (!(_local6)) { _local2 = _arg1.readUnsignedShort(); _local3 = (_local2 >> 6); _local4 = (_local2 & 63); if (_local4 == 63){ _local4 = _arg1.readUnsignedInt(); }; _local5 = _arg1.position; switch (_local3){ case 9: case 41: case 43: case 56: case 65: break; case Tag.END: _local6 = true; _local7 = new Tag(_local3, _arg1, _local5, _local4); tags.push(_local7); break; case Tag.SOUND: _local7 = new DefineSound(_local3, _arg1, _local5, _local4); tags.push(_local7); assets[DefineSound(_local7).assetId] = DefineSound(_local7); break; case Tag.EXPORT_ASSETS: _local7 = new ExportAsset(_local3, _arg1, _local5, _local4); tags.push(_local7); break; default: _local7 = new UnknownTag(_local3, _arg1, _local5, _local4); tags.push(_local7); break; }; if (_arg1.position == _arg1.length){ trace("EOF", _arg1.position); return; }; _arg1.position = (_local5 + _local4); }; } public function traceTags():void{ var _local1:Tag; trace("<<< SWF >>>"); for each (_local1 in tags) { trace(_local1); }; } public function load(_arg1:ByteArray):void{ parse(_arg1); } private function readRGB(_arg1:ByteArray):uint{ return ((((_arg1.readUnsignedByte() << 16) | (_arg1.readUnsignedByte() << 8)) | _arg1.readUnsignedByte())); } public function save():ByteArray{ var _local1:ByteArray; var _local2:Tag; _local1 = new ByteArray(); _local1.endian = Endian.LITTLE_ENDIAN; for each (_local2 in tags) { _local2.writeBack(_local1); }; _local1.position = 4; _local1.writeUnsignedInt(_local1.length); _local1.position = 0; return (_local1); } } }//package de.popforge.format.swf
Section 32
//ByteArrayAsset (mx.core.ByteArrayAsset) package mx.core { import flash.utils.*; public class ByteArrayAsset extends ByteArray implements IFlexAsset { mx_internal static const VERSION:String = "2.0.0.0"; } }//package mx.core
Section 33
//IFlexAsset (mx.core.IFlexAsset) package mx.core { public interface IFlexAsset { } }//package mx.core
Section 34
//mx_internal (mx.core.mx_internal) package mx.core { public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal"; }//package mx.core
Section 35
//DefaultTextFormat (DefaultTextFormat) package { import flash.text.*; public class DefaultTextFormat extends TextFormat { public function DefaultTextFormat(){ color = 0x666666; size = 10; bold = true; font = "Verdana"; } } }//package
Section 36
//Main (Main) package { import flash.events.*; import flash.utils.*; import de.popforge.audio.source.mixer.*; import de.popforge.audio.utils.*; import de.popforge.format.mod.*; import flash.display.*; import de.popforge.audio.output.*; import de.popforge.audio.source.sampler.*; import de.popforge.audio.source.monosys.*; import de.popforge.audio.source.perlin.*; import flash.text.*; import de.popforge.audio.source.modplayer.*; import de.popforge.audio.filters.*; public class Main extends Sprite { private const mod:Class; private var sampler:Sampler; private var mixer:Mixer; private var monosys:MonoSys; private var perlin:Perlin; private var debug:TextField; private var modPlayer:ModPlayer; private var delay:Delay; private var host:Host; private var splitter:RenderSplitter; private var bpm:Number;// = 125 public function Main(){ bpm = 125; mod = Main_mod; super(); buildAudio(); buildGUI(); } private function onPotiChanged(_arg1:Event):void{ var _local2:Potentiometer; var _local3:Number; _local2 = Potentiometer(_arg1.target); _local3 = _local2.getValue(); switch (_local2.type){ case "BPM": bpm = _local3; monosys.setBPM(bpm); sampler.setBPM(bpm); delay.setBPM(bpm); perlin.setBPM(bpm); modPlayer.setBPM(bpm); break; case "cutoff": monosys.getFilterTransform().cutoff = _local3; break; case "res": monosys.getFilterTransform().resonance = _local3; break; case "fattack": monosys.getFilterTransform().envelope.attack = _local3; break; case "sattack": monosys.getADSR().attack = _local3; break; case "fdecay": monosys.getFilterTransform().envelope.decay = _local3; break; case "sdecay": monosys.getADSR().decay = _local3; break; case "fsustain": monosys.getFilterTransform().envelope.sustain = _local3; break; case "ssustain": monosys.getADSR().sustain = _local3; break; case "frelease": monosys.getFilterTransform().envelope.release = _local3; break; case "srelease": monosys.getADSR().release = _local3; break; }; } private function buildAudio():void{ var _local1:ModFormat; var _local2:MixerChannel; var _local3:MixerChannel; host = new Host(8, Waveform.STEREO, Waveform.BIT_16, Waveform.KHZ_44100); sampler = new Sampler(Waveform.KHZ_44100); sampler.setBPM(bpm); _local1 = new ModFormat(ByteArray(new mod())); modPlayer = new ModPlayer(Waveform.KHZ_44100); modPlayer.setBPM(bpm); modPlayer.loadMod(_local1); monosys = new MonoSys(Waveform.KHZ_44100); monosys.setBPM(bpm); perlin = new Perlin(Waveform.KHZ_44100); perlin.setBPM(bpm); _local2 = new MixerChannel(modPlayer); _local3 = new MixerChannel(sampler); delay = new Delay(Waveform.KHZ_44100); delay.offsetL = 16; delay.offsetR = 8; delay.feedback = 0.25; delay.mix = 0.5; delay.setBPM(bpm); _local2.volume = 0.75; _local2.filters = [delay]; mixer = new Mixer(); mixer.addChannel(_local2); splitter = new RenderSplitter(host); splitter.setRenderSteps(8); splitter.addSource(mixer); splitter.addSource(modPlayer); splitter.addEventListener(RenderSplitter.EVENT_RENDER_COMPLETE, onRenderComplete); host.addEventListener(Host.EVENT_BUFFER_COMPLETE, splitter.onHostSync); } private function onRenderComplete(_arg1:Event):void{ debug.text = ("SuperMario.mod " + splitter.getLastRenderTime()); host.updateBuffer(mixer.getBuffer()); } private function onKeyDown(_arg1:KeyboardEvent):void{ perlin.shufflePattern(); monosys.shufflePattern(); } private function buildGUI():void{ var _local1:int; var _local2:int; var _local3:Potentiometer; stage.scaleMode = StageScaleMode.NO_SCALE; debug = new TextField(); debug.y = 4; debug.defaultTextFormat = new DefaultTextFormat(); debug.selectable = false; debug.autoSize = TextFieldAutoSize.LEFT; addChild(debug); _local1 = 0; _local2 = 64; _local3 = new Potentiometer(60, 300, bpm); _local3.x = 0x0100; _local3.y = 32; _local3.type = "BPM"; _local3.setLabelText("BPM"); _local3.addEventListener(Potentiometer.EVENT_CHANGED, onPotiChanged); addChild(_local3); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } } }//package
Section 37
//Main_mod (Main_mod) package { import mx.core.*; public class Main_mod extends ByteArrayAsset { } }//package
Section 38
//Potentiometer (Potentiometer) package { import flash.events.*; import flash.utils.*; import flash.display.*; import flash.text.*; import flash.filters.*; public class Potentiometer extends Sprite { private var valueCurve:Shape; private var angleRange:Number; public var type:String; private var val:Number; private var timer:Timer; private var min:Number; private var labelField:TextField; private var max:Number; private var angleMin:Number; private var angleMax:Number; private var defaultValue:Number; private var staticShape:Shape; private var dragOffset:Number; private var angleRatio:Number; public static const ANGLE_MIN:Number = 2.35619449019234; public static const ANGLE_MAX:Number = 0.785398163397448; public static const EVENT_CHANGED:String = "onValueChanged"; public function Potentiometer(_arg1:Number=0, _arg2:Number=1, _arg3:Number=0, _arg4:Number=2.35619449019234, _arg5:Number=0.785398163397448){ this.min = _arg1; this.max = _arg2; defaultValue = (this.val = _arg3); this.angleMin = _arg4; this.angleMax = _arg5; angleRange = (_arg5 - _arg4); while (angleRange < 0) { angleRange = (angleRange + (Math.PI * 2)); }; angleRatio = 0; createBody(); setValue(_arg3); addEventListener(Event.ADDED, onAdded); addEventListener(Event.REMOVED, onRemoved); timer = new Timer(5, 0); timer.addEventListener(TimerEvent.TIMER, moveKnob); doubleClickEnabled = true; } public function setLabelText(_arg1:String):void{ labelField.text = _arg1; labelField.x = (-(labelField.textWidth) >> 1); } private function moveKnob(_arg1:Event):void{ angleRatio = (angleRatio + ((dragOffset - mouseY) / 0x2000)); updateValue(); } public function setValue(_arg1:Number):void{ if (_arg1 < min){ _arg1 = min; } else { if (_arg1 > max){ _arg1 = max; }; }; angleRatio = (((val = _arg1) - min) / (max - min)); drawValue(angleRatio); } private function updateValue():void{ if (angleRatio < 0){ angleRatio = 0; } else { if (angleRatio > 1){ angleRatio = 1; }; }; val = (min + ((max - min) * angleRatio)); drawValue(angleRatio); dispatchEvent(new Event(EVENT_CHANGED)); } private function onMouseUp(_arg1:MouseEvent):void{ timer.stop(); } private function drawCircleSegment(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{ var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:int; _local7 = _arg5; _local9 = (_arg6 - _local7); while (_local9 < 0) { _local9 = (_local9 + (Math.PI * 2)); }; _local10 = Math.ceil((_local9 / (Math.PI / 4))); _local11 = (-(_local9) / _local10); _local12 = (-(_local11) / 2); _local13 = Math.cos(_local12); _local14 = (Math.cos(_local7) * _arg4); _local15 = (Math.sin(_local7) * _arg4); _arg1.moveTo((_local14 + _arg2), (_local15 + _arg3)); _local20 = 0; while (_local20 < _local10) { _local7 = (_local7 + (_local12 * 2)); _local8 = (_local7 - _local12); _local16 = (_arg2 + (Math.cos(_local7) * _arg4)); _local17 = (_arg3 + (Math.sin(_local7) * _arg4)); _local18 = (_arg2 + (Math.cos(_local8) * (_arg4 / _local13))); _local19 = (_arg3 + (Math.sin(_local8) * (_arg4 / _local13))); _arg1.curveTo(_local18, _local19, _local16, _local17); _local20++; }; } private function onMouseDoubleClick(_arg1:MouseEvent):void{ if (_arg1.target == this){ setValue(defaultValue); dispatchEvent(new Event(EVENT_CHANGED)); }; } private function onAdded(_arg1:Event):void{ stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); stage.addEventListener(MouseEvent.DOUBLE_CLICK, onMouseDoubleClick); } private function onRemoved(_arg1:Event):void{ stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); stage.removeEventListener(MouseEvent.DOUBLE_CLICK, onMouseDoubleClick); } private function drawValue(_arg1:Number):void{ var _local2:Graphics; _local2 = valueCurve.graphics; _local2.clear(); _local2.lineStyle(2, 0xAAAAAA, 1, false, LineScaleMode.NORMAL, CapsStyle.SQUARE); drawCircleSegment(_local2, 0, 0, 11, angleMin, (angleMin + (angleRange * _arg1))); } public function getValue():Number{ return (val); } private function createBody():void{ var _local1:Graphics; staticShape = new Shape(); staticShape.cacheAsBitmap = true; addChild(staticShape); valueCurve = new Shape(); addChild(valueCurve); valueCurve.filters = [new GlowFilter(0xFFFFFF, 1, 4, 4, 0.5, 3)]; _local1 = staticShape.graphics; _local1.beginFill(0x3A3A3A); _local1.drawCircle(0, 0, 15); _local1.endFill(); _local1.beginFill(0x565656); _local1.lineStyle(1, 0x202020); _local1.drawCircle(0, 0, 6); _local1.endFill(); _local1.lineStyle(4, 1776413, 1, false, LineScaleMode.NORMAL, CapsStyle.SQUARE); drawCircleSegment(_local1, 0, 0, 11, angleMin, (angleMin + angleRange)); labelField = new TextField(); labelField.selectable = false; labelField.autoSize = TextFieldAutoSize.LEFT; labelField.defaultTextFormat = new DefaultTextFormat(); labelField.y = 14; addChild(labelField); } private function onMouseDown(_arg1:MouseEvent):void{ if (_arg1.target == this){ dragOffset = mouseY; timer.start(); }; } } }//package

Library Items

Symbol 1 BinaryData {de.popforge.audio.utils.SoundFactory_ModSWF} [de.popforge.audio.utils.SoundFactory_ModSWF]
Symbol 2 BinaryData {Main_mod}

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata not present, AS3.
ScriptLimits (65)Timeline Frame 1MaxRecursionDepth: 1000, ScriptTimeout: 60 seconds
ExportAssets (56)Timeline Frame 1Symbol 1 as "de.popforge.audio.utils.SoundFactory_ModSWF"
SerialNumber (41)Timeline Frame 1

Labels

"Main"Frame 1




http://swfchan.com/1/4512/info.shtml
Created: 16/6 -2019 23:27:33 Last modified: 16/6 -2019 23:27:33 Server time: 03/05 -2024 16:38:35