ActionScript

2009年11月 6日 (金)

Pixel3Dの座標⇒普通のxy座標


Pixel3Dの持つ3D座標を、通常の2次元座標に変換しています。

参考にしたのは、Papervision3Dのソースコードの1つである、「RenderPixels.as」というファイル。

このファイルで、Pixel3DをBitmapDataにプロットしていたので、その部分の計算を拝借。

割と簡単に出来ました。

マウスでクリックした座標とPixel3Dの座標を照らし合わせてPixel3Dにクリックイベントをつけたりすると面白いかもしれないですね。



| | コメント (0) | トラックバック (0)

2009年10月18日 (日)

BetweenAS3使ってみる。 フィルタ系の話。

P




















BetweenAS3にやっと手を出してみました。

Tweenerと勝手が違って最初は微妙な感じでしたが、最近やっと慣れてきました。

で、使ってみて驚いたのはConvolutionFilterとかのTweenもできるってこと。

とりあえずやってみました。

エッジ検出→セピア→エンボスの流れでフィルターをやってみました。




たとえば、ConvolutionFIlter使ってエッジ検出する場合とかは以下みたいに書く。

// bmpはBitmap型

// convolutionFilterを使う場合は最初にこれをセットしておく

bmp.filters = [new ConvolutionFilter(3,3,[0,0,0,0,1,0,0,0,0])];

// tween
BetweenAS3.tween(bmp,
           {_convolutionFilter:{
                matrixX:3,
                matrixY:3,
                matrix:[-1, -1, -1, -1, 8, -1, -1, -1, -1]}
            },
            null,
            2.0,
            Cubic.easeOut).play();

気づいたのは、colorMatrixFIlterとかは何も考えずにトゥイーン出来たんだけど、convolutionFilterのときは「bmp.filters = [new ConvolutionFilter(3,3,[0,0,0,0,1,0,0,0,0])];」みたいに最初にフィルターをセットしてあげないと動かなかった。

ここんとこはそういうものなのかな。

もう少し慣れるまで遊んでみます。

| | コメント (0) | トラックバック (0)

2009年10月 2日 (金)

キラキラPixel3D!

きらきら~。

超久々にAS3でプログラミングしました。

やっぱ楽しい。

PV3Dはこれからどうなっていくのかなー。

| | コメント (2) | トラックバック (0)

2009年8月23日 (日)

SiONを使ってみる。 その6(音にエフェクトをかける)

Q




















大絶賛SiONで遊ばせてもらってます。

今回は、エフェクトを使ってみます。

SiONには、「SiEffect○○○」みたいな名前でたくさんの音用のエフェクトが用意されています。

今回は、前回のやつに「SiEffectStereoReverb」というエフェクトをかけてみました。

とりあえず、サンプル(注:音出ます! ソースは右クリック)。

前回までかけてたフェードインアウトは外してあります。

響いたような感じでカッコよくなったと思います。





エフェクトの簡単な使い方。

// エフェクトの用意
var effect:SiEffectStereoReverb=new SiEffectStereoReverb();

// エフェクトの初期化
effect.initialize();

// ドライバのエフェクタの初期化
driver.effector.initialize();

// エフェクトを追加
driver.effector.connect(0, effect);

// 再生開始
driver.play(mainMelody, false);

これだけ。

手探りで作ってみたけど、エフェクトの使い方これであってんのかな。

| | コメント (0) | トラックバック (0)

SiONを使ってみる。 その5(カスタムフェードを使ってみる)

P_4




















絶賛SiONで遊ばせてもらってます。

前回、フェードインフェードアウトをやってみたんですが、SiONにはフェードインなどの効果を自分で作れるfaderってのが入っています。

同梱されているサンプルソースにカスタムフェードのサンプルがあったので、参考にしながらやってみました。

とりあえず、サンプル(注:音出ます! ソースは右クリック)。

前回とちょっと音も変えてあります。

基本はサンプルのをほぼ流用させてもらったわけですが・・。




今回は、ローパスフィルターを使ったフェードインアウトをやってます。

ローパスフィルターってのは要は低周波(低音)を通すフィルタです。

これを使って低音から徐々に音を通すようにすると、普通のフェードよりかっこいいのが出来ると。

カスタムフェードの使い方は、

// ローパスフィルターの用意
var lpf:SiCtrlFilterLowPass=new SiCtrlFilterLowPass();
// 初期化
lpf.initialize();

って、使いたいフィルタを初期化して(今回はサンプルと同じローパスフィルタを使ってます)、

// ドライバのエフェクタの初期化
driver.effector.initialize();
// 0番目のスロットに、フィルタを追加
driver.effector.connect(0, lpf);

ドライバにセットして、

// フェードの実行
// フェーダー中に実行する関数、フェードする範囲と、時間を設定。
// 「n * 44100 / 2048 」でn秒らしい(サンプルより)
fader.setFade(fadeLPF, 0, 1, 8 * 44100 / 2048);


// フェーダーから呼ばれる関数
private function fadeLPF(v:Number):void
{
   // フィルタの範囲を設定
   lpf.control(v, 0.5);
}

みたいにfaderを実行して終わり。

注意点としては、再生するときは「driver.play(mainMelody, false);」みたいに第2引数を設定してあげないといけない。

なんという簡単仕様。すごいなSiON。

ローパスフィルタのフェードアウトがすごくかっこよくてお気に入りです。

| | コメント (0) | トラックバック (0)

SiONを使ってみる。 その4(フェードインとフェードアウト)

P_4





















絶賛SiONで遊ばせてもらってます。

今回は、音のフェードインとフェードアウトを行います。

前回のを改造。

とりあえず、サンプル(注:音出ます! ソースは右クリック)。




方法は非常に簡単。

フェードインをしたい場合は、

// 7秒かけて、フェードイン
driver.fadeIn(7);

みたいに書くだけ。



フェードアウトは、フェードアウトしたいタイミングで、

// フェードアウトを実行する関数(7秒かけてフェードアウト)
private function onFadeOut():void
{
   if (!driver.fader.isActive) driver.fadeOut(7);
}

みたいな関数を実行すればいいだけ。

非常に簡単に出来てしまいます。

ただ、フェードアウトの時にちょっと注意。

フェードアウト終了時に音の再生を終了したい場合は、

// フェードアウトにあわせて音を止める
driver.autoStop=true;

として、autoStopプロパティを設定しておかないといけない。

これをしないとフェードアウト終了時にもとの音量に戻ってしまう。

これだけ気をつけないといけないかな。




ちなみに、今回は使ってないですが、「SiONEvent.FADE_PROGRESS」、「SiONEvent.FADE_IN_COMPLETE」、「SiONEvent.FADE_OUT_COMPLETE」のようにフェードインフェードアウトに合わせたイベントも用意されてました。

どんだけ至れり尽くせりなライブラリなんですか、SiONさん。


| | コメント (0) | トラックバック (0)

2009年8月22日 (土)

SiONを使ってみる。 その3(音色を変えてみる別バージョン)

P_2_2




















絶賛SiONで遊ばせてもらってます。

前回、音色の変更をやってみたんですが、別な方法を見つけました。

というか、多分こっちの方が正規な方法の気がする。




方法としては、

// 音色を変更
var presetVoice:SiONPresetVoice=new SiONPresetVoice();
var voice:SiONVoice=presetVoice["valsound.piano3"];
driver.setVoice(0, voice);

みたいに、setVoiceで音色をセットする。

そのあとMMLのコマンドで、

var str:String="";
str+="%t0,1,1 t100 %6@0cdefedcr %6@0efgagfer %6@0crcrcrcr l8 %6@0ccddeeff l4 %6@0edc;";

みたいに、音を変更したい部分に「%6@0」を追加する。

@0の0が、setVoiceで指定した番号。だから、番号変えて色々な音をセットできる。

%6ってのはモジュール番号らしい。この部分だけよく分かっていない。後で調べる。

あとは、普通にplay()してあげれば音色の変わった音が出る。

sequenceOnメソッド使わなくても音色変更出来た。




一応サンプル(注:音出ます! ソースは右クリック)。

前回のより何かテンポが遅くなった。

やっぱMMLをある程度理解しないといけないっぽいなぁ。



---------------------------------------------------------------------
(追記)

setVoiceの場所ですが、driverに対して行うのではなく、driver.compileメソッドから受け取ったSiONData型の変数に対して行った方がいいみたいです。

今回のサンプルでいうと、

「driver.setVoice(0, voice);」  →     「mainMelody.setVoice(0, voice);」

にした方がいいかもってこと。

このほうが各SiONData型の変数に対して音色の設定ができるのかな。

| | コメント (0) | トラックバック (0)

SiONを使ってみる。 その2(音色を変えてみる)

P_2




















絶賛SiONで遊ばせてもらってます。

今回は音色を変更してみました。

前回作ったやつの音をピアノに変更してみました。

こんな感じ(注:音出ます! ソースは右クリック)。





SiONには、プリセットで色々な音色が入ってます。

音色の変更方法としては、

// compile() メソッドであらかじめ SiONData を作っておく
mainMelody=driver.compile(str);

// 音色を変更
var presetVoice:SiONPresetVoice = new SiONPresetVoice();
var voice:SiONVoice = presetVoice["valsound.piano3"];

// 再生開始
driver.play();
driver.sequenceOn(mainMelody, voice, 0,0,0);

みたいにプリセットの音を指定して、再生。

本来sequenceOnメソッドは、別に再生してあるMMLと連携しながら再生するためのものなんで、使いどころ間違ってるかもしれないけど。

とりあえず、ちゃんと音は変わってくれた。

プリセットはいろいろあって、この辺は検索すれば色々出てきそう。

| | コメント (0) | トラックバック (0)

SiONを使ってみる。

P




















先日知った、SiONというライブラリを使ってみることにしました。

いわゆる、音を扱うライブラリで、MMLを利用した音楽再生などが出来ます。

ちなみに、自分はMMLというのも初めて知りました。

MMLとは、「Music Macro Language」の略で、コマンドの様に書いていってそれで音を作成します。

今回はとりあえず、MMLで「かえるの歌」でもやってみました。

こんな感じ(注:音出ます! ソースは右クリック)。




基本的には、

var str:String="";
str+="%t0,1,1 t100 cdefedcr efgagfer crcrcrcr l8 ccddeeff l4 edc;";
str+="%t0,1,1 t100 rrrrrrrr cdefedcr efgagfer crcrcrcr l8 ccddeeff l4 edc;";
str+="%t0,1,1 t100 rrrrrrrr rrrrrrrr cdefedcr efgagfer crcrcrcr l8 ccddeeff l4 edc;";

みたいな感じでMMLのコマンドを文字列で書いていって、

// ドライバ
var driver:SiONDriver=new SiONDriver();

// MMLデータを保持
var mainMelody:SiONData;

// データをコンパイル
mainMelody=driver.compile(str);

// 再生
driver.play(mainMelody);

みたいな感じで再生する。

あっさり。

苦手だった音のプログラミングがあっさり出来てしまった。

しかも音との連携もあっさり出来る(noteOnが音のなり始め、noteOffが音のなり終わり。多分だけど。)。

SiON・・・恐るべし!



まだMMLのこととがよく分からないし、もうちょっと遊んでみよう。



------------------------------------------

(追記)

noteOnなどのイベントに関して、詳しい記事を見つけたので。

こちらの方がすごく詳しくかいてあって参考になります。

SiONをやってみよう・・・基本編2:イベント・トリガー - logicalyzeblog

| | コメント (0) | トラックバック (0)

2009年8月21日 (金)

外部のswfを読み込んでうんらた 2

P3























外部swfローディングをまた。

ちょっくら基本の復習です。

とりあえず、こんな感じ(右クリックでソース)。



前作ったやつとの違いは、swfのローディング方法。

ProgressEventで指定した関数の中でローディングバーを書くんじゃなくて、ローディングバーでロード状況、フレームイベントでローディングバー描写みたいに分けてます。

前回のやつだと軽いファイルをロードする場合ローディングバーがほとんど見えなんですが、今回のだと軽いのでもちゃんとローディングバーを見せてくれます。




軽いファイルをロードするときに、ローディングバーが一瞬で消えちゃうのがなんかいやだったんで、ちょっと作り直してみました。

もっとスマートな方法を知りたい。

| | コメント (0) | トラックバック (0)

より以前の記事一覧