flash on 2013-8-1
♥0 |
Line 82 |
Modified 2013-08-01 17:40:25 |
MIT License
archived:2017-03-30 02:45:28
ActionScript3 source code
/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/b6M3
*/
package {
import flash.ui.Keyboard;
import flash.display.Sprite;
import flash.events.*;
import flash.utils.*;
import flash.net.*;
import flash.media.*;
import flash.text.*;
public class FlashTest extends Sprite {
// パラメータ
private var sampling:int = 2048; // 1 度に転送するサンプリング数
// サウンドオブジェクト
private var snd:Sound = new Sound();
private var sw1:Boolean = false;
private var tf1:TextField = new TextField();
private var url : URLRequest = new URLRequest("http://192.168.11.7/sound/a.mp3");
private var srcSnd:Sound;
public function FlashTest() {
// write as3 code here..
addChild(tf1);
tf1.x = 100;
var s:Sprite =new Sprite();
s.graphics.beginFill(0);
s.graphics.drawRect(0,0,100,100);
s.graphics.endFill();
addChild(s);
stage.addEventListener(MouseEvent.CLICK,onClick);
// サンプルデータイベント登録
snd.addEventListener(SampleDataEvent.SAMPLE_DATA, SampleDataFunc);
srcSnd = new Sound(url);
srcSnd.addEventListener(Event.COMPLETE,onComplete);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onkey);
// 再生開始
snd.play();
}
private function onkey(e:KeyboardEvent):void{
load1();
}
private var len:Number=0;
private var loadedPos:Number=0;
private function onComplete(e:Event):void{
srcBytes = new ByteArray();
len = srcSnd.extract(srcBytes,sampling*2,len);
}
private function load1():void{
srcBytes = new ByteArray();
len = srcSnd.extract(srcBytes,sampling*2,loadedPos);
if(len<sampling*2)loadedPos=0;
else loadedPos += len;
srcBytes.position = 0;
for(var i:int=0;i<sampling*2;i++){
var d:Number = srcBytes[i].readFloat();
// 左チャンネル
buf.writeFloat(d);
// 右チャンネル
//buf.writeFloat(d);
}
}
private function onClick(e:MouseEvent):void{
sw1 = !sw1;
}
private var srcPos:int=0;
private var srcBytes:ByteArray;
private var buf:ByteArray;
// サウンドデータ要求時に呼び出されるイベント
private function SampleDataFunc(e:SampleDataEvent):void{
var i:int;
// サウンドバッファ
buf = e.data;
var str:String = new String();
str = e.position.toString();
str += "\n"+srcSnd.bytesTotal.toString();
str += "\n"+srcPos.toString();
str += "\nlen:"+len.toString();
tf1.text = str;
// 開始直後のノイズ対策
if(e.position == 0){
for(i=0;i < sampling*2;i++){
// 左チャンネル
buf.writeFloat(0.0);
// 右チャンネル
buf.writeFloat(0.0);
}
return;
}
for(i=0;i < sampling;i++){
// ランダム
var d:Number;
if(sw1==true)d = Math.random() * 2 - 1;
else d=0.0;
// 左チャンネル
buf.writeFloat(d);
// 右チャンネル
buf.writeFloat(d);
}
}
}
}