開発環境 |
Apache Flex SDK 4.12.1 |
|
FlashDevelop 4.6.2.5 |
実行環境 |
Microsoft Windows 8.1 (64bit) |
プロジェクトの種類 |
ActionScript 3/AS3 Project |
プロジェクト名 |
WaveForm2 |
Output/General
Main.as
package
{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.text.*;
public class Main extends Sprite
{
private var wflist:Vector.<Vector.<Number>> = new Vector.<Vector.<Number>>;
private var targetwf:Vector.<Number>;
private var reverse:Number = 1;
private var tfReverse:TextField;
private var sound:Sound = new Sound;
private var soundChannel:SoundChannel = null;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var name:Vector.<String> = new Vector.<String>;
var wf:Vector.<Number>;
var i:int;
var t:Number;
name.push("サイン波");
wf = new Vector.<Number>(100);
for (i = 0; i < 100; i++)
{
t = i / 100;
wf[i] = Math.sin(2 * Math.PI * t);
}
wflist.push(wf);
name.push("矩形波");
wf = new Vector.<Number>(100);
for (i = 0; i < 100; i++)
{
t = i / 100;
wf[i] = (t < 0.5) ? 1 : -1;
}
wflist.push(wf);
var dtf:TextFormat = new TextFormat;
dtf.align = TextFormatAlign.CENTER;
dtf.size = 16;
for (var r:int = 0; r < wflist.length; r++)
{
var tf:TextField = new TextField;
tf.x = 10;
tf.y = 10 + 60 * r;
tf.width = 100;
tf.height = 50;
tf.background = true;
tf.backgroundColor = 0x7fff7f;
tf.border = true;
tf.defaultTextFormat = dtf;
tf.name = r.toString();
tf.selectable = false;
tf.text = name[r];
tf.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
tf.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
addChild(tf);
var sp:Sprite = new Sprite;
sp.x = 120;
sp.y = tf.y;
addChild(sp);
var g:Graphics = sp.graphics;
g.beginFill(0xffffbf);
g.drawRect(0, 0, 100, 50);
g.endFill();
g.lineStyle(1);
g.moveTo(100, 25);
g.lineTo(0, 25);
g.lineStyle(1, 0xff0000);
wf = wflist[r];
for (i = 0; i < 100; i++)
{
g.lineTo(i, 25 - 25 * wf[i]);
}
}
tf = new TextField;
tf.x = 10;
tf.y = 10 + 60 * r;
tf.width = 100;
tf.height = 25;
tf.background = true;
tf.border = true;
tf.defaultTextFormat = dtf;
tf.selectable = false;
tf.text = "Reverse(Shift)";
addChild(tf);
tfReverse = tf;
dispReverse();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
stage.addEventListener(KeyboardEvent.KEY_UP, onKey);
}
private function dispReverse():void
{
tfReverse.backgroundColor = (reverse < 0) ? 0xff7f00 : 0xbfbfbf;
}
private function onSampleData(e:SampleDataEvent):void
{
// 2048~8192
for (var i:int = 0; i < 8100; i++)
{
var t:int = i % 100;
var value:Number = targetwf[t];
e.data.writeFloat(value);
e.data.writeFloat(value * reverse);
}
}
private function onKey(e:KeyboardEvent):void
{
reverse = e.shiftKey ? -1 : 1;
dispReverse();
}
private function onMouseDown(e:MouseEvent):void
{
var i:int = parseInt(e.target.name);
targetwf = wflist[i];
reverse = e.shiftKey ? -1 : 1;
dispReverse();
var st:SoundTransform = new SoundTransform;
st.volume = 0.2;
soundChannel = sound.play(0, 0, st);
}
private function onMouseUp(e:MouseEvent):void
{
if (soundChannel != null)
{
soundChannel.stop();
soundChannel = null;
}
}
}
}
最終更新:2014年09月11日 18:04