• 【After Effects】テキストエディタスクリプト「Project Notes」

    2014-03-12 21:00
    以前公開していた、After Effectsでドッキング可能なUIを備えたテキストエディタスクリプト、Project Notesを3.0.0に機能やUIを大幅に追加修正してaescriptsでリリースしました。



     

    Project Notesでは外部ファイルのインポート・エクスポートはもちろん、他バージョンのAEで共通したノートをローカルに保存して、バージョンの隔たりをなく呼び出せる機能を備えています。
    対応バージョンはCS5~CCです。

    図にするとこんな感じでしょうか



    共通のノートを保存しているXMLファイルは保存場所を変更できるので、例えばOneDriveやDropboxなど、デスクトップクラウドストレージソフトウェアで指定したフォルダーに変更すれば、他のPCでも同様に使用できます。

    またProject Notesではノートの内容を、便利な3つの機能として呼び出すことができます。
    1. スクリプトの実行
    2. 選択したプロパティにエクスプレッションの追加
    3. システムの呼び出し(コマンド)
    Align3Dとは違い、Project Notesは19.99ドルでの販売という形になります。
    また、1週間使える試用版も用意しています

    米時間2014年3月25日までの限定で、半額の9.99ドルでリリース記念セールを行っていますので、ぜひよろしくお願いします。

    英語ですが、デモ動画も貼っておきます。


    3D整列スクリプト「Align3D」もaescriptsで公開しているので、こちらもよろしくお願いします。




  • 広告
  • プログラミングがわからない人のためのAfter Effectsスクリプト入門。その6

    2014-03-12 20:004
    ④のコードを読み解いていきます。
    // ④変数には配列としてアイテムが入っている
    var itemNum = 2;
    var selItems = app.project.items;
    alert(selItems[itemNum]);
    2行目のitemNumには、2という数値が入っています。
    3行目は、プロジェクトに属しているすべてのアイテムを取得するコードです。
    つまり、アイテムパネルのすべてのものがこのコードで取得できます。

    そして④のコードの要、[]の出番です。
    [](ブラケット、と読みます)は、その内側にオブジェクト名を入れることで、そのオブジェクトにドットをつけた時と同じようにアクセスすることが可能になります。
    オブジェクトA名[オブジェクトAに属しているオブジェクト名]
    ツリー状に書くと以下の様になっていることが条件です。
    • オブジェクトA
    • オブジェクトAに属しているオブジェクト
    もし、 オブジェクトAに属しているオブジェクトが存在しなければそのコードはエラーになります。
    アイテムが2つ以上あれば上のコードはエラーにはなりません。

    ところで、2という数字はオブジェクトA、つまりここでいうselItemsと名付けたオブジェクトに属しているのでしょうか?
    2という突然謎の数字が出てきても意味がわかりませんよね。

    その理由は、app.project.itemsが、同一の種類のオブジェクトが複数固まった状態で返ってくるためです
    同一の種類のオブジェクトが複数固まった状態のものを、配列といいます。


    ここでのポイントは、同一の種類ということです。

    例えば、コンポジションAとコンポジションBは、名前が違えどコンポジションという括りでは同じものです。
    AEのスクリプトの場合、基本的にアクセスする名前が複数形なら、配列が返ってくるとみて間違いないでしょう。
    そしてプログラムを組む側も、変数名などでそのようにわかるようにするべきです。
    なので、④の変数名ではselItemsという複数形にしているわけです。

    そして、配列にするとブラケットを用いて、何番目数字でアクセスすることができます。
    つまり、selItems[itemNum]はselItemsのitemNum番目のものという意味です。
    ④の場合だと、selItems[itemNum]はselItems[2]とも書くことができます。


    この場合、selItems[itemNum]、selItems[2]は「平面」という名前のフォルダーになります。
    この時、コンポジション・フォルダー・平面は違う種類のように思えます。しかし、これらはまずitemという同じオブジェクトの括りに属しているため、itemsというもので取得できるわけです。
    (厳密に言えば、すべてはオブジェクトという括りのため、どんなものでも列挙できるのですがここでは同一の種類のもので説明します。)

    配列にして嬉しいこと
    さて、他に配列にすると一体なにが嬉しいのでしょうか?
    それは、繰り返しの処理を簡単に行うことができる、という点です。

    例えば、プロジェクトのすべてのアイテムの名前をアラートで一つずつ表示したい、としましょう。
    ここで、コードを組む時にどんな問題があるか考えていきます。
    1. すべてのアイテムの取得方法
    2. アラートで一つずつ表示する方法
    1については大丈夫ですね。④のコードの3行目の、app.project.itemsは、プロジェクトに属しているすべてのアイテムを取得するコードでした。

    問題は2のアラートで一つずつ表示する方法です。
    ④のコードの4行目、これはitemNum目のアイテムをアラートで表示します。

    しかし、いくつか問題があります。
    まずはじめに、スクリプト実行時にいくつのアイテムが存在するかわからない点です。
    すべてのアイテムをひとつずつ表示、ということはこのままでは、4行目を改造して何行も書かなければいけなくなります。
    // ⑤変数には配列としてアイテムが入っている
    var itemNum = 2;
    var selItems = app.project.items;
    alert(selItems[itemNum]); // 1回目
    itemNum = 1;
    alert(selItems[itemNum]); // 2回目
    itemNum = 3;
    alert(selItems[itemNum]); // 3回目
    これは面倒です。長ったらしい上にアイテムが実際にいくつあるかわかりません。

    そこで、この問題を解決するために、配列と切っても切れない関係のforループというものを使用します。
    // ⑥forループを使用して⑤を修正
    var selItems = app.project.items;
    for(var i=1; i <= selItems.length; i++){
    alert(selItems[i]);
    }
    新しい要素がたくさんありますが、順番に解説していきます。
    2行目は同じですのでいいでしょう。問題は3~5行目です。

    ⑥のコードの3行目、forの次の丸括弧の内部をまず見ていきましょう。
    内部のコードを分解します。その3で書いたことを覚えているでしょうか?

    セミコロン(;)は、命令がここで一区切りするという意味でした。そのルールに従って分解すると、以下のコードになることがわかります。
    var i=1;
    i <= selItems.length;
    i++
    まず始めにiを宣言して、1を代入しています。
    iはindexの略称としてここでは使用しています。が、著者には本当にその意味で他の人が使っているかは知りません。慣習的に、プログラマの間では伝わる簡略的な記法として、アルファベット小文字のiが好まれていることは確かでしょう。

    次に、selItems.lengthというものに注目してください。selItemsはすべてのアイテムが入っています。これはそこにドットとlengthをつけて、とある値を取得するコードです。

    lengthとは、長さという意味です。しかし、プログラミングの世界では大抵の場合、配列の個数の意味になります。
    つまり、selItems.lengthとはselItemsの個数を表すコードなのです。
    // 配列の全体数を取得する
    配列.length

    そして、すべてのアイテムの個数とiを比較しています。
    <=は小なりイコール(≦)のことです。iがselItemsの個数(すべてのアイテムの個数)より小さいかどうかを確認しています。

    最後に、i++です。これは、i=i+1と同じ意味です。
    // 以下のコードは同じ意味
    i++;
    i=i+1;
    すなわち、iの値を一つ増やしているわけです。このことをインクリメントといいます。
    ++はコードを短くわかりやすく、簡単にインクリメント(値を一つ増やす)のコードを書くための方法です。
    ちなみに、iの値を一つ減らすことはデクリメントといい、デクリメントでは-を二つ重ねて--として表記します。
    // 以下のコードは同じ意味
    i--;
    i=i-1;

    さて、3つのコードがそろいました。forループではこの3つを駆使して実行されます。
    次回はこれらのコードを駆使し、forループについて解説します。


    ar123408←前 今ここ 次→ar******



  • 【VOCALOID】複数のvsq(vsqx)データを一つに統合する

    2013-05-19 07:55
    複数のvsqデータを一つに統合することがあったので、備忘録がてら書いておきます。

    今回は複数のvsqのトラックを一つのvsqにする方法を書きます。vsqxに関しては途中の手順のみで基本的に同じ内容です。
    ここではkaeru1.vsq, kaeru2.vsqというデータでしました。
    • kaeru1.vsq
    • -トラック1
    • kaeru2.vsq
    • -トラック2
    上記の構成のファイルを以下のようにする。
    • Re kaeru.vsq
    • -トラック1
    • -トラック2

    必要なもの

    まず、以下のものを用意します。
    1. 対象のvsq, vsqxファイル
    2. テキストエディタ (メモ帳などでもOK)
    3. VOCALOID3 Editor (vsqから操作する場合のみ)
    4. VOCALOID2 (vsqにしたい場合のみ)
    5. はちゅねのないしょ本体 (vsqにしたい場合のみ)
    6. はちゅねのないしょプラグイン「ImportV3(vsqにしたい場合のみ)
    vsq→vsqでは1-5全て、vsq→vsqxでは1-2、vsqx→vsqでは1,3,4,5、vsqx→vsqxでは1だけでOKです。(確認にはエディタが必要です)

    手順1

    まずvsqデータをvsqxに変換します。vsqxからの人は飛ばしてください。
    基本的に、VOCALOID3 Editorでvsqデータを開いてCtrl+Sするだけでvsqx保存ダイアログが出るので、適当な名前をつけて保存してください。


    (kaeru1.vsqとkaeru2.vsqを変換した後)
    必要なファイル分すべてvsqxにしたら手順2に進みます。

    手順2

    次にvsqxデータの中身をコピペしていきます。
    vsqデータはテキストエディタでは通常読むことは難しいです。そこで、編集しやすいvsqxにしたのです。
    編集にはメモ帳などでもOKですが、vsqxの中身はXMLというルールに基づいて書かれています。ですので、XMLを編集しやすいエディタを使うと楽に編集できます。
    ここではSublime Textというエディタを使用します。Sublime Textは要素をハイライトで見やすくしてくれます。

    (Sublime Textでkaeru1.vsqxを開いた様子)

    XMLはタグと呼ばれる<test>~</test>に囲まれたものの中に値を入れて保存しています。
    今回重要になる場所は2つあります。
    1. <mixer>~</mixer>の中にある<vsUnit>~</vsUnit>要素
    2. <vsTrack>~</vsTrack>要素
    この2つの要素を、1つのvsqxからもう1つのvsqxにコピー&ペーストして、すこし編集します。

    ここではまずkaeru1.vsqxのものをkaeru2.vsqxにコピペしていきます。
    まず<vsUnit>~</vsUnit>要素からコピペします。

    vsUnitとはトラックのミキサー情報です。見ればなんとなくわかるかもしれませんが、音量や使用しているVSTプラグインの情報をここに保存しています。

    kaeru1.vsqxのものをkaeru2.vsqxにコピペします。
    この時、2つ目の<vsTrackNo>~</vsTrackNo>の値を編集します。
    ここのタグには何番目のトラックかという情報が保存されています。

    先頭のトラックは0です。複数編集するときは0,1,2...と増やしていきます。

    (vsUnit要素をコピペして編集した後の様子)

    この時に注意しなければならない点は、トラックは16つまでしか保存できないということです。
    17個以上書くと、VOCALOID3で読み込めなくなります。
    ですので、実質<vsTrackNo>~</vsTrackNo>の値は0から15の間になります。

    次に<vsTrack>~</vsTrack>要素をコピペしていきます。

    (vsTrack要素をコピペした後の様子)

    このように<vsTrack>~</vsTrack>要素が並ぶようにコピペします。
    また、先ほどと同じようにここでも<vsTrackNo>~</vsTrackNo>を編集します。

    (vsTrackNoの2つ目を編集した後の様子)

    先ほどと同じように先頭のトラックは0です。複数編集するときは0,1,2...と増やします。
    この時、先ほど編集した番号と同じトラックをちゃんと指定するようにしてください。また、トラックは16つまでしか保存できないという点は同じです。

    これで必要なvsqxデータは完成です。vsqにする必要がある人は手順3に進んでください。

    手順3

    最後に完成したvsqxデータをvsqに保存します。

    Jobプラグインには「ExportVSQ」というvsq出力プラグインがあります。
    しかし、これは編集中のトラックしか出力できません。
    これはExportVSQが劣っているというわけではなく、JobプラグインのAPIが対応していない為です。
    そこで、VOCALOID2側からvsqxデータを読み込む為にImportV3を使用します。

    はちゅねのないしょ・はちゅねのないしょのプラグイン「ImportV3」をVOCALOID2にインストールし、vsqxデータを開きます。

    そして保存すれば合成後のvsqデータの完成です。

    (ImportV3をインストールしているとファイルを開くダイアログにvsqxの項目が追加される)

    応用編

    今回はトラックの合成をしましたが、中身をよく読めば異なったvsqxデータのノートの一部をコピペということも可能です。
    VOCALOID3のインストールされているフォルダに、vsq3.xsdというXMLのルールが書かれたファイルがあるので、見てみるのも面白いと思います。