※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : kappaLab's ドラムンベース(っぽいもの) [diff(74)]

FORKED

ディレイ/ローファイ/シンプルFM forked from: ドラムンベース(っぽいもの) forked from: ディレイ/ローファイ/シンプルFM forked from: ドラムンベース(っぽいもの) [diff(1)]

  1. // forked from TheCoolMuseum's ディレイ/ローファイ/シンプルFM forked from: ドラムンベース(っぽいもの)
  2. // forked from kappaLab's ドラムンベース(っぽいもの)
  3. package  
  4. {
  5.     
  6.     import flash.display.Sprite
  7.     import flash.display.Shape
  8.     import flash.events.Event;
  9.     import flash.events.SampleDataEvent;
  10.     import flash.filters.BlurFilter;
  11.     import flash.media.Sound;
  12.     
  13.     [SWF(backgroundColor=0x000000, frameRate=60)]
  14.     public class Drumnbass_3 extends Sprite 
  15.     {
  16.         private const PI2:Number = Math.PI * 2;
  17.         private const SAMPLE_RATE:Number = 44100;    
  18.         private const LATENCY:int = 4410 //2048~8192
  19.         private var sound:Sound;
  20.         private var delay:Delay = new Delay(LATENCY*6.05,1,-0.6,-0.2);
  21.        
  22.         private var voices:Vector.<Voice> = new Vector.<Voice>()
  23.         private var particles:Vector.<Shape> = new Vector.<Shape>()
  24.         private var count:int = 0
  25.         
  26.         public function Drumnbass_3() 
  27.         {
  28.             init()
  29.         }
  30.         
  31.         public function init():void 
  32.         {
  33.             voices[0] = new Voice(60,.4,50,8000,10000,2.15,1,1200,4)
  34.             voices[1] = new Voice(320,.2,100,500,600,4,1,500)
  35.             voices[2] = new Voice(120,.5,50,500,600,7,6,100,8)
  36.             voices[3] = new Voice(880,.5,50,700,1200,3,6,400)
  37.             voices[4] = new Voice(640,.5,100,1000,1200,9,4,100,9)
  38.             voices[5] = new Voice(440,.5,50,1000,1200,3,9,800)
  39.             
  40.             var stageWidth:Number = stage.stageWidth
  41.             var stageHeight:Number = stage.stageHeight
  42.             
  43.             
  44.             var n:int = voices.length;
  45.             for (var i:int = 0; i < n; i++) 
  46.             {
  47.                 var s:Shape = new Shape()
  48.                 var x:Number = stageHeight * Math.random() * .5 - stageHeight * .25;
  49.                 var y:Number = stageHeight * Math.random() * .5 - stageHeight * .25;
  50.                 s.graphics.beginFill(0xFFFFFF * Math.random());
  51.                 s.graphics.drawCircle(x, y, Math.random() * 20 + 20);
  52.                 s.alpha = .5
  53.                 s.x = stage.stageWidth / 2;
  54.                 s.y = stage.stageHeight / 2;
  55.                 
  56.                 particles[i] = s
  57.                 addChild(s)
  58.             }
  59.             addEventListener(Event.ENTER_FRAME,
  60.             function(e:Event):void {
  61.                 
  62.                 var n:int = particles.length
  63.                 for (var i:int = 0; i < n; i++) 
  64.                 {
  65.                     var p:Shape = particles[i]
  66.                     p.rotation += i % 2 * 2 - 1;
  67.                     p.scaleX += (1 - p.scaleX) * .4;
  68.                     p.scaleY += (1 - p.scaleY) * .4;
  69.                 }
  70.             })            
  71.             filters = [new BlurFilter(55)]
  72.             sound = new Sound()
  73.             sound.addEventListener(SampleDataEvent.SAMPLE_DATA, updateVoice)
  74.             sound.play()
  75.         }
  76.         
  77.         private function updateVoice(e:SampleDataEvent):void
  78.         {
  79.             var n:Number = LATENCY
  80.             
  81.             count++
  82.             var c8:int = count %8
  83.             var c16:int = count %16
  84.             var c32:int = count %32
  85.             var c64:int = count % 64
  86.             
  87.             if (c8 == 0 ||
  88.                 c8 == 1 ||
  89.                 c8 == 2 ||
  90.                 c8 == 3 ) {
  91.                 if (Math.random() > .3) {
  92.                     voices[2].play();
  93.                     particles[2].scaleX = particles[2].scaleY = 2
  94.                 }else {
  95.                     voices[3].play()
  96.                     particles[3].scaleX = particles[3].scaleY = 2
  97.                 }
  98.             }
  99.             if (c8 == 6 ||
  100.                 c8 == 7 ) {
  101.                 voices[1].play()
  102.                 particles[1].scaleX = particles[1].scaleY = 2.5
  103.             }
  104.             if (count % 16 == 11) {
  105.                 particles[0].scaleX = particles[0].scaleY = 3
  106.                 voices[0].play()
  107.             }
  108.             
  109.             if (count % 32 == 8) {
  110.                 particles[4].scaleX = particles[4].scaleY = 3
  111.                 voices[4].play()
  112.             }
  113.             
  114.             if (count % 32 == 10 && Math.random()>.3){
  115.                 particles[5].scaleX = particles[5].scaleY = 4
  116.                 voices[5].play()
  117.             }
  118.             for (var i:int = 0; i < n; i++) 
  119.             {
  120.                 var sample:Number = 0
  121.                 
  122.                 for each (var v:Voice in voices) 
  123.                     sample += v.pulse;
  124.                 //ディレイ
  125.                  sample = delay.process(sample)
  126.                 sample = Math.max(-1,sample)
  127.                 sample = Math.min(1,sample)
  128.                 //ロービット
  129.                  sample = int(sample*64)/64
  130.                 e.data.writeFloat(sample)
  131.                 e.data.writeFloat(sample)
  132.             }
  133.         }
  134.  
  135.     }
  136.     
  137. }
  138. class Delay {
  139.     public var time:int
  140.     public var dry:Number
  141.     public var wet:Number
  142.     public var feedback:Number
  143.     private var buf:Array=[]
  144.     private var position:Number
  145.     public function Delay(time:int, dry:Number=1, wet:Number=0.5, feedback:Number=0.3){
  146.         this.time = time
  147.         this.dry = dry
  148.         this.wet = wet
  149.         this.feedback = feedback
  150.         position = 0
  151.     }
  152.     public function process(sample:Number):Number{
  153.         var dSample:Number = 0
  154.         if(buf[position]!=undefined)
  155.             dSample = buf[position];
  156.         buf[(position+time)%time]=sample*wet+dSample*feedback
  157.         position++
  158.         position%=time
  159.         return sample*dry + dSample
  160.     }
  161. }
  162. class Voice {
  163.     
  164.     private const PI2:Number = Math.PI * 2;
  165.     private const SAMPLE_RATE:Number = 44100
  166.     
  167.     private var phase:Number = 0
  168.     public var frequency:Number     
  169.     public var volume:Number;
  170.     public var gain:Number;
  171.     public var attack:int;
  172.     public var decay:int;
  173.     public var sustain:int;
  174.     public var modFrequency:Number;
  175.     public var fmIndex:Number;
  176.     public var fmDecay:Number;
  177.     private var position:int     = 0
  178.     private var amplifier:Number = 0
  179.     private var fmAmplifier:Number = 0
  180.     
  181.     public function Voice(
  182.     frequency:Number = 440,
  183.     volume:Number    = .2,
  184.     attack:int       = 1000,
  185.     decay:int        = 1000,
  186.     sustain:int      = 5000,
  187.     modFrequency:Number = 1,
  188.     fmIndex:Number      = 1,
  189.     fmDecay:int = 4000,
  190.     gain:Number = 1 )
  191.     {
  192.         this.frequency = frequency
  193.         this.volume = volume
  194.         this.attack = attack
  195.         this.decay = decay
  196.         this.sustain = sustain
  197.         this.modFrequency = modFrequency
  198.         this.fmIndex = fmIndex
  199.         this.fmDecay = fmDecay
  200.         this.gain = gain
  201.     }
  202.     public function get pulse():Number
  203.     {
  204.         updatePhase()
  205.         updateAmplifier() 
  206.         var sample:Number
  207.         sample = Math.sin(phase+Math.sin(phase*modFrequency)*fmIndex*fmAmplifier) * amplifier;
  208.         if(gain!=1){
  209.             sample *= gain;
  210.             sample = Math.max(-1,sample)
  211.             sample = Math.min(1,sample)
  212.         }
  213.         return sample * volume
  214.     }
  215.     public function play():void 
  216.     {
  217.         position = 0
  218.         amplifier = 0
  219.         fmAmplifier = 1
  220.    }
  221.     public function updatePhase():Number
  222.     {
  223.         phase += PI2 * frequency / SAMPLE_RATE
  224.         phase %= PI2;
  225.         return phase
  226.     }    
  227.     public function updateAmplifier():Number
  228.     {
  229.         var position:int = (this.position++ )
  230.         if (position >= sustain) {
  231.             amplifier = 0
  232.             fmAmplifier = 1
  233.         }else if (position < attack) {
  234.             amplifier += 1/attack
  235.         }else if (position > (sustain-decay)) {
  236.             amplifier -= 1/decay
  237.         }
  238.         fmAmplifier -= 1/fmDecay
  239.         fmAmplifier = Math.max(fmAmplifier,0)
  240.         return amplifier;
  241.     }
  242. }
noswf
Get Adobe Flash Player