[flash astro]Dynamic Sound Generation 2.

LINEで送る
Pocket

またまたですが、Flash Player10 astroのDynamic Sound Generationです。

ボタンを押すと、音が流れます。

パルス波の長さを時間で変えています。

注意:音を止める方法がないので、音を消したい場合はリロードして下さい。

 

これがasだけでできるってのが素晴らしい!!

今、個人的にはこの辺の機能が楽しいなあ。

 

コードはこんなです。

main.as

<code>

package
{
import flash.net.*;
import flash.display.*;
import flash.media.*;
import flash.events.*;
[SWF(backgroundColor=”0xeeeeee”, frameRate=”50″, stageHeight=”200″)]
public class main extends Sprite
{
private var snd:Sound;
private var square:Sprite;
private var sh:Number = 200;
private var btn1:Sprite;
private var btn2:Sprite;
private var btn3:Sprite;
private var btn4:Sprite;
private var btn5:Sprite;
private var btn6:Sprite;
public function main()
{
initBtn();
}
private function initBtn():void
{
btn = new Sprite();
drawBtn(btn);
btn.buttonMode = true;
addChild(btn);
btn.width = btn.height = 20;
btn.x = 0;
btn.y = 0;
btn.addEventListener(MouseEvent.CLICK, click1);
}
private function drawBtn(sp:Sprite):void
{
sp.graphics.beginFill(0xff0000,1);
sp.graphics.drawRect(0, 0, 20, 20);
sp.graphics.endFill();
}
private function click1(e:MouseEvent):void
{
init();
doSamplesCallbackHandler(1);
}
private function init():void
{
snd = new Sound();
if( snd.hasEventListener(“samplesCallback”)) snd.removeEventListener(“samplesCallback”, samplesCallbackHandler);
snd.addEventListener(“samplesCallback”, samplesCallbackHandler);
snd.play();
}
private function samplesCallbackHandler(e:SamplesCallbackEvent):void
{
doSamplesCallbackHandler(1);
}
private var rate:Number = 44100;
private var freq:Number = 440;
private var phase:Number = 0;
private var count:Number = 1;
/**
* generate wave data.
*/
private function doSamplesCallbackHandler(type:int):void
{
//Voice.beep1();
var freq:Number = 220;
for( var i:uint=0; i < 512; i++ )
{
phase += freq/(rate);
var arrange:Number = 1;
var a:Number = 1;
if( i%2==0 ) a = 1;
arrange = a*count;
var phaseAngle:Number = phase * arrange;
var sample:Number = Math.sin(phaseAngle);
//ここで波形をつくってます。
sample = beep1(i);
//左右チャンネルともに同じ波形。
snd.samplesCallbackData.writeFloat(sample);
snd.samplesCallbackData.writeFloat(sample);
}
delim++;
if( delim > 256 ) delim = 0;
}
private var delim:Number = 0;
/**
* generate beep1
* @param i:uint wave counter.
* @return Number
*/
private function beep1(i:uint):Number
{
var res:Number =0;
//delim++;
//if( delim > 256 ) delim = 0;
//if( i < 256 ) res = 50;
//else res = 0;
if( i < delim ) res = 50;
else res = 0;
return res;
}
}
}

</code>

[astro] dynamic sound generationやってみたよ。

LINEで送る
Pocket

えっと、ほんとは今日はパラグライダーで空を飛ぶ予定でしたが、天候により中止。

で、代わりにastroのdynamic sound generationやってました。
参考サイトはこちら:
http://www.kaourantin.net/2008/05/adobe-is-making-some-noise-part-3.html
http://memo.kappa-lab.com/2008/06/astroflash10_singing_do-re-mi–.html

取りあえずソースは後ほどということで、サンプルだけ。

http://www.hi-farm.net/astro/dynamicsound1.swf

つまらないやつですが、マウスを押している間、音が高くなっていきます。
マウスを放すと、音が低くなります。

これをasのみでできるのは楽しいですね。
デジタルシンセとか作れそう。

もうちょっとソース整理したら改めて書きます!

あー、デジタルシンセってか、サイン波の音とか、色々勉強したい事がふえるなあ。

2008年6月9日00:53

astro練習

LINEで送る
Pocket

取りあえず、flash player10 astroの練習をしてみました。
標準で3Dの機能がついたので、ひとまずちょっとしたサンプルを作成しました.

http://www.hi-farm.net/astro/main.swf

処理がかるくなるのかな?と思ってたのですが、Macのアクティビティモニタで見てみると、
今までの様にPapervision3Dを作った時と、重さがあまりかわらない気がしたんですけど、どうなんでしょう?

ソースはこれ。

main.as—————————————-

package
{

import flash.events.*;
import flash.display.*;
import flash.ui.*;

[SWF(backgroundColor=”0x000000″, frameRate=”50″)]
public class main extends MovieClip
{

private var container:Sprite;
private var rect_vc:Vector.<Rect>;
private var len:uint = 6;
private var radius:Number = 100;
private var container_vc:Vector.<Sprite>;
private var innerLen:uint=15;

public function main ()
{
init();
}

private function init():void
{
container_vc = new Vector.<Sprite>();

container = new Sprite();
container.x = 150;
container.y = 10;

addChild(container);
rect_vc = new Vector.<Rect>();
for( var i:uint=0; i < innerLen; i++ )
{
container_vc[i] = genCircle(0, 30*i+10,15*i);
container_vc[i].rotationY = 30 * i;
}
addEventListener(Event.ENTER_FRAME, enterframeHandler);
}

private function genCircle(cX:Number, cY:Number, ra:Number):Sprite
{
var innerContainer:Sprite = new Sprite();

for( var i:uint=0; i < len; i++ )
{
var rect:Rect = new Rect(0xffffff, 10, 10);
innerContainer.addChild(rect);

var rad:Number = (Math.PI/180) * ( (360/len)*i);
rect.x = (Math.cos(rad) – Math.sin(rad)) * ra;
rect.y = 0;
rect.z = (Math.sin(rad) + Math.cos(rad)) * ra;
rect_vc[i] = rect;
}

innerContainer.x = 0;
innerContainer.y = 0;

innerContainer.x = cX;
innerContainer.y = cY;

container.addChild(innerContainer);

return innerContainer;
}

private function enterframeHandler(e:Event):void
{
for( var i:uint=0; i < innerLen; i++ )
{
container_vc[i].rotationY++;
}
}
}
}

Rect.as—————————————-

package
{
import flash.display.*;
import flash.events.*;

public class Rect extends Sprite
{
function Rect(col:uint, w:Number, h:Number)
{
this.graphics.beginFill( 0xffffff, 1);
this.graphics.drawRect( 0, 0, w, h);
this.graphics.endFill();
}
}
}

2008年6月1日02:36