とどこおるFFT

頓挫中。僕の調べ方が悪いのかもしれませんが、FFTとは無関係なところで悩み中。今日は文字だらけですんません。

プレイバックの問題
ライブラリ「minim」はFFTが簡単に出来るものの、問題はプレイバック部分、特に再生終了イベントを受け取れない(→[Minim] Tell if an AudioPlayer finishes playing?)。minimの作者さん本人が返事をしてますが先の10月にリリースされたバージョンでも改善が無いようです。

再生は勝手に止まるのでいいんです、でもその後、各GUIを初期状態に戻したり、もろもろの後処理が出来ないとすごく気分の悪いツールができあがるのがイヤ。

同じ機能を持つライブラリで「Ess」がありますが、こちらはFFTの結果をリニアで出してきます。例えばベースを22Hzとして220Hz、2,200Hz、、、22×10nの結果を得ることが出来ません。聞き取れない高周波成分の結果をたくさん出されたところで、ねぇ。
再生終了時の処理はメソッドaudioChannelDone(AudioChannel)を上書きすれば可能です。

解決するにはEssをプレイバック用、再生中のサウンドバッファをminim.FFTへ、って合わせ技かな?。

GUIのライブラリのこと
GUIに使用しているライブラリ「controlP5」も不足があるせいかマウスの各状態を得ることが出来ないでいます。レポジトリ上の開発途上な0.40のソース(Controller.java)を見ると、isMousePressed()でマウスの状態を取得できたり、mousePressed() 、mouseReleased()等のオーバーライド可能なメソッドが用意されているようです。でもコンパイルってどうするんだ?

って事で
Prosessing以外でも実現できるものが無いか調べ中。
ActionScript3にも「SoundMixer.computeSpectrum () 」ってのがありますね。
あとは、PureDataとか、vvvvとか、、、
MacOSXのQuartzComposerでもできるんですが、データの書き出し部分をObjective-Cで書かなきゃいけないのはちょっと、、、

続きは頓挫中の「見ちゃいやんバージョン」のソースです。以上の経緯があってまだ一番肝心なデータ書き出し等は実装されていません。すごく中途半端なので役には立たないですよ。

Minimは標準で入っていますが、ほかにcontrolP5が必要です。
mp3,AIFF,wavを開いて再生とスペクトルの表示ができます。

作るのが最終目的じゃなくって、これ使って映像を作りたいんですけどぉ!
続きを読む “とどこおるFFT”


まだまだだだ

台風18号が来てますね、大阪市内にも警報出てます。
「出社時、電車が運休なら休業です!」を今、全員に伝えたのでまずはひと安心。
電車が動き出したら?出社?、ってずぅ〜っと気にして待つのも時間の無駄ですしねぇ。

さて、「マスク出しときゃ、後でAfterEffectsでなんとかなるやろ」的なCGデザイナー脳が抜けず、適当なコードを書いては作り直してます。めんどくさ。

fftAnalize

minimってプレイバック&解析ライブラリを使ってますが、再生終了イベントをどうやって取得するのか分からんかったり、FFTで得られた縦軸(レベル)の単位ってなんだ?だったりで全然進みません!


faceBBox.ms

アイデアのスケッチです。何に使うんだって感じですが、

faceBBox1
メッシュ面毎にバウンディングボックスを生成するとどんな感じになるかと思い、ざっくりスクリプトを組んで見ました。さらにLatticeモディファイヤを適用。

スキャッタ(でしたっけ?)とか、PFlow使っても似たようなことは出来ますね。ボックス自体は姿勢を保つのでアニメーションするオブジェクトに適用すればなんか面白くなるかな。

使い方はオブジェクトを一つ選択して「スクリプトを起動」です。多くても3,000ポリゴン(三角でカウント)くらいのオブジェクトへの適用にとどめておいた方がいいです。max9上でしか試してませんのでお気をつけて。
続きを読む “faceBBox.ms”


Bounding Box

オブジェクトのバウンディングボックスを取得したいと思い、ノード共通プロパティのmax/minで取得してみたのですがどうも結果がよろしくない。あ、ちなみに3dsmax9(まだ使ってます)の話。

target = selection[1]
BBoxMax = target.max
BBoxMin = target.min
myBox = box width:(BBoxMax.x - BBoxMin.x) \
		length:(BBoxMax.y - BBoxMin.y) \
		height:(BBoxMax.z - BBoxMin.z)
myBox.center = target.center

オブジェクトに回転が入っていない場合は正確なものが得られるのですが、回転が入っているとバウンディングボックスのバウンディングボックスを取得してしまっている模様。2Dであらわすと次の通り。

BBox Problem in maxscript

そんな値が欲しいと思いますか?とAutodeskに電話入れたい気分。
「in coordsys local」で取得するとさらにわけ分からん値が戻ってきました。

全ての頂点を精査してmax/min出せばなんとかなるんですが、頂点数の多いオブジェクトになるとすごく重くなりますねぇ。

以下のスレッドを探し当てましたが、僕が考えたのと同じく、全頂点の位置をソートしてみればってことでした。
Align min/max correctly with maxscript?[cgsociety.org]

あれ?ところで点線で描いたワールド座標じゃないバウンディングボックスはどうやって取得するんだろ?


PaperVision3D

まったくどこから手をつければよいやら、、、

デモ用につくってもらった犬をXSIで書き出してもらいBasicViewで表示してみました、アニメーションは持ってこれてますが、どうやらマテリアルがコンスタントで割り当ててないのが原因でワイヤ表示になってます。

pv3d-with-collada

あとは読み込んだシーンの各アトリビュートにアクセスする方法さえ覚えれば何とかなりそうですが、どっから手をつければいいんだか、、、