※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!
wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)
mp3 可変速再生 forked from: mp3 可変速再生
- // forked from kazu_E09's mp3 可変速再生
- // forked from TheCoolMuseum's mp3 可変速再生
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.geom.Matrix;
- import flash.media.*;
- import flash.net.*;
- import flash.utils.*;
- import funnel.*;
- [SWF(frameRate="24", backgroundColor="#000000")]
- public class SoundSample extends Sprite
- {
- private var loadData:String = "http://www.iamas.ac.jp/wxp/files/sounds/G_sound.mp3";
- private var source:Sound = new Sound();
- private var sound:Sound = new Sound();
- private var sampleTable:ByteArray = new ByteArray();
- private var delayBuffer:ByteArray = new ByteArray();
- private var bufferLength:int = 2048;
- private var delayTime:int = 100;
- private var gio:Gainer;
- private var shp:Shape;
- private var m:Matrix;
- private var vx:Number = stage.stageWidth/2;
- private var vy:Number = stage.stageHeight/2;
- private var spring:Number = 0.0075;
- private var friction:Number = 0.95;
- public function SoundSample()
- {
- gio = new Gainer(); //ゲイナー
- var smoother:Convolution = new Convolution(Convolution.MOVING_AVERAGE); //スムース
- var scaler:Scaler = new Scaler(0.1, 0.65, 0, stage.stageWidth/1.5, Scaler.LINEAR, true); //スケール
- var smoother2:Convolution = new Convolution(Convolution.MOVING_AVERAGE); //スムース
- var scaler2:Scaler = new Scaler(0.1, 0.65, 0, stage.stageWidth/3.5, Scaler.LINEAR, true); //スケール
- gio.analogInput(0).filters = [smoother, scaler];
- gio.analogInput(1).filters = [smoother2, scaler2];
- source.addEventListener(Event.COMPLETE, loadComplete);
- source.load(new URLRequest(loadData));
- shp = new Shape();
- draw(shp);
- addChild(shp);
- m = new Matrix();
- m.tx = stage.stageWidth / 2;
- m.ty = stage.stageHeight / 2;
- addEventListener(Event.ENTER_FRAME, enterFrameHandler);
- }
- private function player(event:SampleDataEvent):void {
- var speed:Number = (gio.analogInput(1).value*5 - stage.stageWidth/2) / stage.stageWidth*4;
- var level:Number = (gio.analogInput(0).value*2 - stage.stageHeight/2) / stage.stageHeight;
- var pos:Number = sampleTable.position / 8;
- var length:Number = sampleTable.length / 8;
- for (var i:int = 0; i < bufferLength; i++ ) {
- pos += speed;
- if (pos > length-1 && speed>0)
- {
- pos += 2;
- pos %= length;
- }
- if (pos <= 0 && speed<0)
- {
- pos %= length;
- pos += length - 1;
- }
- sampleTable.position = Math.round(pos) * 8;
- var left:Number = sampleTable.readFloat() + delayBuffer.readFloat() * level;
- var right:Number = sampleTable.readFloat() + delayBuffer.readFloat() * level;
- delayBuffer.position -= 8;
- delayBuffer.writeFloat(left);
- delayBuffer.writeFloat(right);
- if (delayBuffer.position >= delayBuffer.length - 8)
- {
- delayBuffer.position = 0;
- }
- event.data.writeFloat(left*0.25);
- event.data.writeFloat(right * 0.25);
- }
- }
- private function draw(target:Shape):void {
- var size:uint = 60;
- target.graphics.beginFill(Math.random()*0xffffff);
- target.graphics.drawRect(-size/2, -size/2, size, size);
- target.graphics.endFill();
- }
- private function enterFrameHandler(e:Event):void {
- vx += (gio.analogInput(1).value*5 - shp.x) * spring;
- vx *= friction;
- vy += (gio.analogInput(0).value - shp.y) * spring;
- vy *= friction;
- m.tx += vx;
- m.ty += vy;
- m.c = -vx * 0.1;
- m.b = -vy * 0.1;
- shp.transform.matrix = m;
- }
- private function loadComplete(event:Event):void
- {
- graphics.lineStyle(1, 0xFFFFFF);
- graphics.moveTo(0, stage.stageHeight / 2);
- graphics.lineTo(stage.stageWidth, stage.stageHeight / 2);
- graphics.moveTo(stage.stageWidth/2, 0);
- graphics.lineTo(stage.stageWidth/2, stage.stageHeight);
- graphics.drawRect(stage.stageWidth/4,stage.stageHeight/4,stage.stageWidth/2,stage.stageHeight/2)
- for (var i:int = 0; i < delayTime / 1000 * 44100; i++ ){
- delayBuffer.writeFloat(0);
- delayBuffer.writeFloat(0);
- }
- delayBuffer.position = 0;
- sampleTable.position = 0;
- source.extract(sampleTable, source.length / 1000 * 44100, 0);
- sampleTable.position = 0;
- sound.addEventListener("sampleData", player);
- trace("play");
- sound.play();
- }
- }
- }
notice:


