ASoundのプロパティについて
ディスプレイオブジェクトライクなAPIを目指してるASoundですが、今回は実際にどの部分が"ディスプレイオブジェクトライク"なのか、具体例を挙げて説明していきます。
var ins:Instrument = new Instrument(); ins.listen = true; ins.volume = 1; ins.signals.push(new SinOSC(220)); ins.play();
var mc:MovieClip = new MovieClip(); mc.visible = true; mc.alpha = 1; mc.graphics.beginFill(0xFF0000); mc.graphics.drawRect(0,0,10,10); mc.graphics.endFill() mc.play();
いきなりコードを書いてしまいましたが、これは"Instrumentクラス"が"MovieClipクラス"をモデルとしている事を示しています。Flashをスクリプトベースで制作するようになるとMvieClipより圧倒的にSpriteを使うようになり、なんとなくMovieClipを生成する事自体躊躇する事があります。が、あくまでもここはMovieClipです。
これは両者ともplay()メソッドを実装するという共通点とともに、さらに本質的な共通項、"時間軸を持つオブジェクト"である事を示唆しています。
ま、そんな改まって言及するほどの事ではないですが、続いて上から順にプロパティを見てゆきます。
ins.listen
mc.visible
これは直感的に分かると思いますが、listen = falseで消音します。まったく聞こえません。visible = falseで見えないのと一緒。若干異なるのは表示オブジェクトの場合、visible = falseをしただけではremoveChild()は実行されず、多少なりともリソースを食います。しかしInstumentの場合、内部的にremoveChild()の様な処理が施され、リソースの回収が(ある程度)可能です。
ins.volume
mc.alpha
これも直感的に分かると思いますが、alpha = 0で完全透明になるようにvolume = 0で消音します。ここでも若干差異があり、volumeの値を1以上にした場合、そのまま波形が増幅され、場合によって音が割れます。(ディストーションとか?)
ins.signals
mc.graphics
ちょっとここら辺になってくるとこじつけっぽいですが、MovieClipが実際に線や面を描画するにはgraphicsに委譲させるように、Instrumentクラスも波形の生成はsignalsを用います。
しかし、signalsが特定のクラスではなく配列であったり、複数の波形を持つ事ができたりで、やっている事が、なんとなくaddChild()みたいだったりします。
いっそ、この部分は表示ツリーの様にツリー構造にすべきかとも考えましたが、音響におけるツリー構造は不自然だと考えてやめました。
ins.play()
mc.play()
そして、プレイ。いまのところstop()はありません。あまりstop()を使用する場面を思い浮かばなかったので忘れていたペンディングしたのですが、そのうち実装します。
と言うところで今日は以上です。
次回は
filters,effects,generateEnvelop, そして目玉であるmasterについて話したいと思います。
Comment (1)
liuhuan : 2009 .08 .20
really cool one~