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

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

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


forked from : TheCoolMuseum's mp3 可変速再生 [diff(88)]

FORKED
  1. // forked from kazu_E09's mp3 可変速再生
  2. // forked from TheCoolMuseum's mp3 可変速再生
  3. package
  4. {
  5.     import flash.display.*;
  6.     import flash.events.*;
  7.     import flash.geom.Matrix;
  8.     import flash.media.*;
  9.     import flash.net.*;
  10.     import flash.utils.*;
  11.     
  12.     import funnel.*;
  13.     [SWF(frameRate="24", backgroundColor="#000000")]
  14.     public class SoundSample extends Sprite
  15.     {
  16.                 
  17.         private var loadData:String = "http://www.iamas.ac.jp/wxp/files/sounds/G_sound.mp3";
  18.         private var source:Sound = new Sound();
  19.         private var sound:Sound = new Sound();
  20.         
  21.         private var sampleTable:ByteArray = new ByteArray();
  22.         private var delayBuffer:ByteArray = new ByteArray();
  23.         
  24.         private var bufferLength:int = 2048;
  25.         private var delayTime:int = 100;
  26.         private var gio:Gainer;
  27.         
  28.                 private var shp:Shape;
  29.                 private var m:Matrix;
  30.                 private var vx:Number = stage.stageWidth/2;
  31.                 private var vy:Number = stage.stageHeight/2;
  32.                 private var spring:Number = 0.0075;
  33.                 private var friction:Number = 0.95;
  34.             
  35.         public function SoundSample() 
  36.         {
  37.             gio = new Gainer(); //ゲイナー
  38.             var smoother:Convolution = new Convolution(Convolution.MOVING_AVERAGE); //スムース
  39.             var scaler:Scaler = new Scaler(0.10.650, stage.stageWidth/1.5, Scaler.LINEAR, true); //スケール
  40.             
  41.             var smoother2:Convolution = new Convolution(Convolution.MOVING_AVERAGE); //スムース
  42.             
  43.             var scaler2:Scaler = new Scaler(0.10.650, stage.stageWidth/3.5, Scaler.LINEAR, true); //スケール
  44.              
  45.             gio.analogInput(0).filters = [smoother, scaler];
  46.             gio.analogInput(1).filters = [smoother2, scaler2];
  47.             
  48.             source.addEventListener(Event.COMPLETE, loadComplete);
  49.             source.load(new URLRequest(loadData));
  50.             
  51.             shp = new Shape();
  52.             draw(shp);
  53.             addChild(shp);
  54.             
  55.             m = new Matrix();
  56.             m.tx = stage.stageWidth / 2;
  57.             m.ty = stage.stageHeight / 2;
  58.             
  59.             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  60.         }
  61.         private function player(event:SampleDataEvent):void {
  62.             var speed:Number = (gio.analogInput(1).value*5 - stage.stageWidth/2) / stage.stageWidth*4;
  63.             var level:Number = (gio.analogInput(0).value*2 - stage.stageHeight/2) / stage.stageHeight;
  64.             var pos:Number = sampleTable.position / 8;
  65.             var length:Number = sampleTable.length / 8;
  66.             
  67.             for (var i:int = 0; i < bufferLength; i++ ) {
  68.                 pos += speed;
  69.                 if (pos > length-1 && speed>0)
  70.                 {
  71.                     pos += 2;
  72.                     pos %= length;
  73.                 }
  74.                 if (pos <= 0 && speed<0)
  75.                 {
  76.                     pos %= length;
  77.                     pos += length - 1;
  78.                 }
  79.                 
  80.                 sampleTable.position = Math.round(pos) * 8;
  81.                 var left:Number = sampleTable.readFloat() + delayBuffer.readFloat() * level;
  82.                 var right:Number = sampleTable.readFloat() + delayBuffer.readFloat() * level;
  83.                 delayBuffer.position -= 8;
  84.                 delayBuffer.writeFloat(left);
  85.                 delayBuffer.writeFloat(right);
  86.                 if (delayBuffer.position >= delayBuffer.length - 8)
  87.                 {
  88.                     delayBuffer.position = 0;
  89.                 }
  90.                 event.data.writeFloat(left*0.25);
  91.                 event.data.writeFloat(right * 0.25);
  92.             }
  93.         }
  94.         
  95.         
  96.         
  97.         private function draw(target:Shape):void {
  98.             var size:uint = 60;
  99.             target.graphics.beginFill(Math.random()*0xffffff);
  100.             target.graphics.drawRect(-size/2, -size/2, size, size);
  101.             target.graphics.endFill();
  102.         }
  103.         
  104.         private function enterFrameHandler(e:Event):void {
  105.             vx += (gio.analogInput(1).value*5 - shp.x) * spring;
  106.             vx *= friction;
  107.             vy += (gio.analogInput(0).value - shp.y) * spring;
  108.             vy *= friction;
  109.             m.tx += vx;
  110.             m.ty += vy;
  111.             m.c = -vx * 0.1;
  112.             m.b = -vy * 0.1;
  113.             shp.transform.matrix = m;
  114.         }
  115.         
  116.         
  117.         
  118.         
  119.         
  120.         
  121.         
  122.         
  123.         
  124.         
  125.         private function loadComplete(event:Event):void
  126.         {
  127.             graphics.lineStyle(1, 0xFFFFFF);
  128.             graphics.moveTo(0, stage.stageHeight / 2);
  129.             graphics.lineTo(stage.stageWidth, stage.stageHeight / 2);
  130.             graphics.moveTo(stage.stageWidth/20);
  131.             graphics.lineTo(stage.stageWidth/2, stage.stageHeight);
  132.             graphics.drawRect(stage.stageWidth/4,stage.stageHeight/4,stage.stageWidth/2,stage.stageHeight/2)
  133.         
  134.             for (var i:int = 0; i < delayTime / 1000 * 44100; i++ ){
  135.                 delayBuffer.writeFloat(0);
  136.                 delayBuffer.writeFloat(0);
  137.             }
  138.             delayBuffer.position = 0;
  139.             
  140.             sampleTable.position = 0;
  141.             source.extract(sampleTable, source.length / 1000 * 441000);
  142.             sampleTable.position = 0;
  143.                 sound.addEventListener("sampleData", player);
  144.             trace("play");
  145.             sound.play();
  146.         }
  147.     }
  148.     
  149. }
noswf
Get Adobe Flash Player