「ZgeViz: effect development documentation(original Postby VilleK » Fri Jul 02, 2010 11:22 am)」
の翻訳。まだいろいろ間違いとか最新版の状況と合ってない部分もあるかと思います。
ZgeViz用のエフェクトを開発する第一歩は最新版の「ZGameEditor開発環境」をダウンロードすることです。
「ZGameEditor」開発環境にまだ慣れていないなら、「Kjellsのビデオチュートリアル」と「ドキュメント」に目を通しておくことを強くお勧めします。
(訳注:ビデオはImage-lineのZgeVizのマニュアルにあるビデオリストと同じもののようです。ドキュメントの方はReferenceまで入れるとボリュームがとんでもないので「目を通しておく」レベルの段階では「General Info」と「Getting started」の最初のチュートリアルあたりまでで良いと思います)
(訳注:この手順のやり方の検証はしていませんが、「最新版のZGameEditor開発環境」であるZGameEditor4.0betaには「File > New Project > Visualizer FgBg Effect」とかいうコマンドがあるので、それを使えばこの手順は必要なさそうです)
ZGameEditorで新規プロジェクトを作成したら、プロジェクトツリーに以下のコードをコピー&ペーストしてください。
ZZDC<?xml version="1.0" encoding="iso-8859-1" ?>
<Group>
<Children>
<DefineArray Name="SpecBandArray" SizeDim1="32"/>
<DefineArray Name="AudioArray" SizeDim1="32"/>
<DefineVariable Name="SongPositionInBeats"/>
<DefineArray Name="Parameters" SizeDim1="32"/>
<DefineConstant Name="ParamHelpConst" Type="2"/>
</Children>
</Group>
これらの要素が定義されていると、FL Studio上のZgeVizが、FL Studioから流れてくるデータを受け取ることができるようになります。
変数の意味は以下のとおりです。
| コンポーネントの型 | 変数名 | 説明 |
| Array<float> | SpecBandArray | この配列には「周波数帯毎の音量のデータ」が入ります。 このデータは-1から+1の範囲の値を取ります。 配列のサイズは、デフォルトでは32となっています。 配列のサイズの値は、エフェクトがロードされたあとに、ZgeViz側の設定(ZgeVizの「settings」画面で設定されます)で上書きされる場合があります。エフェクト開発者は、このことを意識しておくべきでしょう。 |
| Array | AudioArray | この配列には「演奏中の音声のPCMデータ」が入ります。 このデータは-1から+1の範囲の値を取ります。 配列のサイズは「不定」であり、実行時に決定されます。 |
| Variable<float> | SongPositionInBeats | この変数は「演奏位置」をビート単位で表します。 音楽のテンポと同期するために利用できるので、「ビートの小数部を利用してカメラのZ座標を動かすことで画面全体が拍動する」といった使い方が考えられます。 |
| Array<float> | Parameters | この配列には「ZgeVizの画面に並ぶコントロール(スライダ等)の現在の値」が入ります。 このデータは0から1の値を取ります。 「コントロール」を、いくつ、どのような目的で使うのか、あるいは全く使わないのか、については、開発者が好きなように決めることができます。 |
| Constant<string> | ParamHelpConst | この文字列変数は「このエフェクトが持つコントロール(スライダ等)類の名前」の定義に使用します。 たとえば、「形(shape)」と「色(color)」を調整するスライダを使うエフェクトを開発している場合、この文字列変数は「Shape」、「Color」(改行記号Carrige returnで分かち書き)と定義すれば良いでしょう。各行がZgeVizの画面上ではスライダのラベルとして利用されます。 |
(訳注:ここに並んでいるのは「FL Studioとやりとりされるデータ」、言い換えれば「FL Studio(ZGEViz)側が特別扱いする特殊な変数名」と思われます。ParametersとParamHelpConstの2つは「エフェクト画面上のスライダの有無」に直結するので「ほぼ」必須と考えてよさそうですが、FL Studio添付の.zgeprojファイルを見てもほかの変数はあったりなかったりするようです)
(訳注:「File > New Project > Visualizer FgBg Effect」で生成したプロジェクトにはほかにも「いろいろ定義されていたり」、「使い方のヒントが書かれていたり」、「フォーラムに情報があったり」したような気もしますが、まだ読んでないので知りません)
(訳注:これらの変数は、慣習的に「App.Content以下に作られたどれかのGroup」、図で書けば…
App:ZApplication +OnLoaded +Status +OnUpdate +OnBeginRenderPass +OnRender +OnClose +Lights +Content +Group <--このへん!
に置かれる(あるいはユーザが自分で置く)ようです。Group名はまちまちで「FL_Studio_Varialbes」だったり「values and such(ZGE4.0bのテンプレートの場合)」だったりするようです。この記事中の上に挙げたコード例ではGroupは「無名」です。Groupの下に置くことも必須ではなく、Content直下に置かれている場合もあります。ちなみに「言語的にGroup名が識別子として使われることはない(参考: http://www.zgameeditor.org/index.php/ComponentRef/Group )」ようで、上記の変数はいわゆるメンバ変数とか何とかスコープの変数とかじゃなくグローバル変数扱いと考えてよさそうです)
実際の開発の部分についてはこのドキュメントでは扱っていません。
ZGameEditorのチュートリアルで実際に「一通り手を動かしてみた」あとであれば、
というあたりまでは多分(考えれば)できるようになってるはずなので、そこから手を付けるのが良いと思います。
余談1)ZGEVizの画面でエフェクト名ドロップリストのところを右クリックすると「Edit Effect in ZGameEditor」というコマンドがあっていきなり開発環境が開けたりします。標準状態だとたぶんエラーが出るので、その場合はエラーメッセージの(大雑把な)指示に従って、
する必要があります。ただ、この方法は「FL Studioのプラグインのプリセットを直接書き換える(のに近い)」ことをやってるので、結構危険です。いじりたいzgeprojの「バックアップを取っておく」とか「コピーしてコピーの方をいじる」とか、何がしかの対策をした方がよいです(操作と集中力に絶対の自信がないなら、そもそも「Edit Effect in ZGameEditor」コマンドは使わない方が安全、とか個人的には思います)。
余談2)ちなみにScenesカテゴリあたりの「超かっこいいエフェクト群」は往々にして「GLSL」の技術を使っているんですが、それは一朝一夕に手を付けられるものでもないです。Web上で「WebGLのチュートリアル」とか「Shadertoyで遊ぶチュートリアル」とかを探せば手を付けられる(あるいは時間がかかりそうと理解できる)ようになるんじゃないかと思います。
エフェクトの定義が完了して.zgeprojファイルが完成したら、FL Studioのプラグインディレクトリにある「ZgeViz\Foreground\」ディレクトリにコピーします。便宜上Foreground、Backgroundという2つのフォルダがありますが、ZgeVizは両方のフォルダのエフェクトを対等に扱って両方からロードします。.zgeprojファイルを更新した場合、ZgeVizの「Reload」ボタンを押せばエフェクトがリロードされます。
「Clear」というフォルダに配置されたエフェクトは、他の2つのフォルダのエフェクトよりも先にロードされます。「フィードバック」型のエフェクトを開発する場合にはこれを選ぶと良いでしょう。
(訳注:フォルダがFgAndBgにまとめられていたりその下にカテゴリが作られてたり、ロード順が単純に画面上で「左から右へ」になっていたりと、細かい仕様はZgeViz2で変わってるようですが、このへんは「見ればわかる」、「やってみればわかる」と思います)
MIDIについては「MIDI-input」スレッドを参照。
(訳注:この話題は基本的に「演奏データ」の話なので、それとは「全然関係ない」のですが、「Fruity DanceのMIDIデータをFruityDanceLineエフェクトの制御に使いたい」とか、「TextTrueTypeエフェクトの行指定で、C4を押したら一行目が表示されるようにしたい」とかいった要件では、「Fruity Keyboard Controller」プラグインをロードしておいて、ZGEVizのスライダからオートメーションクリップを作るときにそこへリンクする、という使い方が現実的かなと思います。要はFL Studioの既存機能を使えば「MIDIでZGEVizを制御することはできる」ので、この説で話題にしている機能を使ってわざわざエフェクトを作り直さなくてもいい、場合が多い、はず、という話です)
エフェクトで「VideoTextureBitmap」という名前の「bitmapコンポーネント」を定義してある場合、そこには「選択中のビデオ、またはWebCamの入力」が入ります。ZgeVizとともに配布されているエフェクトの中で「Video...」で始まる名前のものはこれを利用しているので、参考にしてください。
(訳注:この辺のは上の表に統合したらわかりやすそうな気もしています。ZgeViz1でVideo...だったエフェクトはZgeViz2で軒並みImage...と名称変更されてたような気もします。未確認ですが)
エフェクトで「UserTextArray」という名前の「DefineArrayコンポーネント」が定義してある場合、ZgeVizの「custom content」画面(多分ZgeViz2では「Add Content > Text」画面に相当する)でユーザーが入力したテキストを利用することができます。
(訳注:この辺のは上の表に統合したらわかりやすそうな気もしています)
エフェクトで「ZApplicationコンポーネント」の「commentプロパティ」に書かれたテキストは、ZgeVizでエフェクトのヘルプ画面として表示されます。ZgeVizでヘルプを表示するには、ZgeViz画面上で右クリックメニューから「Show help for this effect」コマンドを実行します(訳注:ZgeViz2の場合、ヘルプが定義されているエフェクトではエフェクト画面上部に「?」ボタンが現れるのでこれも使用できます。FL12.4時点では「ヘルプが未定義」のエフェクトが多かったりもします)。
【ZGameEditorビジュアライザの資料】