otomad

音MADに関して適当に。

openlist

適当な動画の公開マイリストを取得して各マイリストに登録されてる動画を集計したら、同じような傾向の未見の動画を発掘出来るんじゃないかと思って試しにやってみた。以下は野菜サラダの公開マイリストを人気が高い順から100個分集計したもの。

34
 
34
 
30
 
30
 
26
 
24
 
24
 
24
 
23
 
23
 
22
 
21
 
21
 
21
 
21
 
20
 
20
 
20
 
20
 
19
 
19
 
19
 
19
 
19
 
19
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
18
 
17
 
17
 
17
 
17
 
17
 
17
 
17
 
17
 
16
 
16
 
16
 
16
 
16
 
16
 
16
 
16
 
16
 
16
 
16

線形勾配 その2

http://chas.hatenablog.com/entry/2012/06/18/031837
chasさんの記事を受けて。

 ちょっと自分自身ミスリードしてしまった部分があるし自分もそれに囚われてた部分もあるので色々と補足。

 まずはシードに関してなんですが、ここに「初期設定では、レイヤーの識別子、レイヤー内のプロパティ、および現在の時刻の関数としてシード値が計算され、オフセット値は 0 です。」とあるとおりseedRandomの第一引数はあくまでオフセットの値を決めるだけで、別にこの値のみでシードの値が決まるわけじゃないんですね。なのでここに0を入れて複製してもランダム値は変わります。じゃあ何でindexを僕は入れてるのかなんですがそこは癖です。非常にミスリードしやすい記述だったと思うのでそこらへんは今後気をつけたい。では値がばらつくならseedRandomは要らないだろという話になると思うんですが重要なのは第二引数で初期値のfalseだとフレームごとにシード値が変わってしまうんですね。なのでtrueにして時間変化させずに固定しているわけです。

 ここらへんを踏まえて楽にする方法を考えると、

1.パーティクルの原型を作る。

2.それを複製してプリコンポーズ。

3.そのコンポを複製してシーケンスレイヤーで並べる。(ここが自分自身ミスリードされてしまったところで、今回はこれを使えないと思っていた)

ということになります。

とりあえずエクスプレッションを書いて行きましょう。chasさんのやり方のほうが分かりやすいのでこちらを採用します。まずソーステキストに

seedRandom(0,true);
p=random();
if(p>0.75) "○";
else if(p>0.5) "△";
else if(p>0.25) "□";
else "☆";

エクスプレッションは最後に出力された値が代入されるのでこういう書き方で問題無いです。

アンカーポイントは

seedRandom(0,true);
t=time-inPoint;
a=random(100,150);
y0=random(100);
y =y0+a*Math.log (25*t+1);
[0,y,0];

chasさんは位置の方でばらつきを出していたんですが僕はここにy0を導入してばらつきを出しています。

X,Y,Z回転に

seedRandom(0,true);
random(360);

chasさんはX,Y,Z回転に同じ値を代入したために偏りが出てしまっていた(これに関しては後ほど考察)ので、各々でランダムの値を変えてやります。

不透明度は同じく二次関数で

100 - 400*time * time;

今回はtime-inPointのようにinPointで引く必要性はないんですが一応書いておきました。

塗りエフェクトで色を変えてみます。カラーのところに

seedRandom(0,true);
hslToRgb([random(1),1,0.8,1])

hslToRgbはAEP Projectの方でも紹介しましたが色を直感的に変えられるので非常に便利です。与えてるやる値は[hue,saturation,lightness,alpha]でalphaは参照しません。色相をランダムで変えてます。

あとはテキストレイヤーを複製してやって、さらにコンポジションも複製して、あるコンポに全部突っ込んでやってシーケンスレイヤーで並べるだけです。シーケンスレイヤーで並べると当然BPMからずれてくるのでタイムリマップあたりを使うといいかもしれません。

AEPファイル(CS4-)

 

それで、偏りの原因ですがx,y,z軸に対して各々同じ角度θで回転させた後、どこにマッピングされるかというのは簡単に手計算できるので計算しまして、xy平面に投影した軌跡が以下の動画になります(今回z方向はあまり考える必要がないので)。

白が角度を0°から360°まで変化させた時の軌跡で、赤緑が各々x,yの値、青が角度になります。動画の上から1/4あたりに青の横線が引いてありますが、これは90°のラインで上方向を意味します。角度が0°から180°の時に90°付近に留まっているのが見て取れますね。角度はランダムで与えられるので半分程度がこの方向付近に飛んでいくというのが予測できます。以下の画像は角度を0°から350°まで10°刻みに変えて飛ばしたものですが90°(上)方向に集まってるのが見てとれます。上の軌跡の動画に関しても先程のプロジェクトファイルの中に入れてあるのでご参考ください。

f:id:kareobana:20120618213834j:plain

線形勾配

線形勾配流行ってますね。拍に合わせて散るパーティクルの作り方ですが以下に自分がやった方法を。

 とりあえず、どういう動きかを観察すると、ある中心があってその付近から四方八方に飛び散る感じですね。ってことは直交座標より球座標の方が扱いやすそうです。球座標は(x,y,z)=r*(sinθcosφ,sinθsinφ,cosθ)ですね。今回はθ、φにはランダムで定数を与えてやってrだけを動かせば行けそうです。rの初期値ですが0だと当然全てのパーティクルが最初に中心に存在してしまうことになってしまうので適当にランダムで定数を与えてやります(ここではr0)。あとはrをどう変化させるかですが、見れば分かる通り最初に急に動いて段々遅くなるといった動きで非常にlog的です。なのでここではlogを採用して、r=r0+a*log(b*(t+1))(a,b=constant,tは時間)とすればよさそうです(tではなくt+1なのは当然logの性質から)。まとめると、
r=r0+a*log(b*(t+1)),θ=constant,φ=constant
となります。後はexpressionで実装していくだけですね。適当に角度制御(今回は別にスライダ制御でも構わないんですが)をtheta,phi等にリネームして、エクスプレッションで以下のようにランダムな定数を出力させます。

seedRandom(index,true);
random(0,180);

randomの範囲をどうするかは0°<θ<180°、0°<φ<360°であることとどの方向に飛ばしたいかというのを考慮して決めればよいです。r0も同様ですね。a*log(b*(t+1))の部分ですが(プロジェクトではRとなっている部分)、bに関しては適当に定数を与えてやればいいですね(ここを各々ランダムで変えると飛び方に統一感が出ないので)。aは飛距離に相当するので、ここは適当にランダムで与えてやります。

ここまで決めてやれば後は簡単で位置をエクスプレッションで弄ってやるだけですね(プロジェクトファイルでは中心位置をnullの位置にしています)。お疲れ様でした。後は適当に4johan.pngをctrl+Dで増殖させて遊んでください。

AEPファイル(CS4-)

ohm studio雑感

http://www.ohmstudio.com/

複数人で同期しながら音楽が作れるdaw、Ohm Studioのオープンβ版が公開された。某氏と色々弄ったので音MAD的観点からの感想を。

mp3は無理だがwavは読み込めるし、当然dawなのでBPMも設定できる。ピッチシフト機能はまだ実装されてないらしく使用できず、タイムストレッチもwav読み込み時に設定できるだけで途中で弄れず。wavはCtrl+Eでカットできるのでこの辺は楽だが、midi機能は非常に扱いづらい。

ピッチシフトもタイムストレッチも碌に出来無いので現時点で音MADを作る目的で使用するのは難しいだろう。

シンメトリ

http://otomad.atarabi.com/image/symmetry/

シンメトリサムネを抽出してみました。さすがに人力だと面倒なのでプログラムで大体を選別してそこから人力で。

当然シンメトリなわけだから左右反転しても基本は同じなので、左右反転させたのと元のとの差をとれば真っ黒になる。それは理想で実際のを見るとずれてるのが結構あるのでエッジが残ったりする。それを多少軽減するためにミディアンをかける。

f:id:kareobana:20120601223433j:plain

後は、どの範囲までを黒とするか、画面のどのくらいの面積を黒が占めていればシンメトリの可能性ありと判定するかを決めれば終わり。単純だけど大体の奴は引っかかってると思う。シンメトリじゃなくても黒地に文字とかそういうのも当然引っかかってくるのでそこは手動で排除。

2012年5月雑感

動画数は今回から晒しイベントタグの動画も集計するようにしたので単純には比較できないですが、大体2月の水準に戻った感じ。

タグに関しては、実写系の必須アモト酸、真夏の夜の淫夢、松岡修造、ここらへんは常連ですね。アニメは這いよれ!ニャル子さんが多いですがこれはここを見れば分かる通り、大半が太陽曰く燃えよカオスに紐ついてて、ニャル子さんを素材にしたものというのはそこまで多くない。他は咲あたりが多くて、日常も根強い印象。

投稿者数ですが(ここらへんは副垢という話がついてまわりますが)投稿した459のIDの内、複数上げたのが136。10以上が8ID。上位25IDで全投稿の1/4を占める感じです。

ピッチシフトか台詞合わせか

 実写系音MADとアニメ系音MADの違いはみたいな話があって、結局その分け方自体が無理あって素材次第だという結論に落ち着いたんですが、その際に不始末さんがアンビエンスという観点を提示されておっなるほどと思いまして、そこから更に考えを進めましてある程度まとまったので以下に。

 アンビエンスというのは空気感や臨場感といった意味なのですが、表現しにくいのでここではアンビエンスが大きいほど指向性が弱く非指向性的でガヤもある、そして小さいほど指向性が強くてガヤも少ないといった感じとします。NHKのアナウンサーがニュースを読むというのは、指向性も強いしガヤもないのでアンビエンスが非常に小さいと言える。

 最初、アンビエンスと素材のピッチの高さでもってまとめようとしたんですが、なかなかうまくいかない。そこで、何がいけないのかと考えまして、結局ピッチシフトと台詞合わせとを対立させるのが間違いだという結論に至りまして、両者のどちらが選ばれるかはどちらの方がまだやりやすいかという消極的選択によるものだと考えると上手くいくと思い、"阻害"という観点でまとめたのが以下。

 基本となるのは以下の3点。
・アンビエンス、非指向性が大きくなるほど"台詞合わせ"を阻害する。
・素材量が少ないほど"台詞合わせ"を阻害する。
・素材のピッチが高いほど"ピッチシフト"を阻害する。(この仮定はきちんと検証する必要性があるかも)

 阻害するというのは文字通りしにくくさせるといった意味で、「"台詞合わせ"を阻害する」とは台詞合わせがしにくくなるので結果としてピッチシフトが選ばれる可能性が大きくなるといった意味です。図にすると以下のような感じ。

f:id:kareobana:20120311072943j:plain

 アンビエンスと素材量は縦軸が一緒なので、アンビエンスを縦軸、素材量を横軸にとってみる。

f:id:kareobana:20120311082806j:plain

 アニメ素材はアンビエンスが小さく、素材量も多いので左上の第二象限に位置し、女性キャラの場合は声が高いのでピッチシフトが阻害されるので台詞合わせを選ぶ傾向が大きくなる。コマンドーのような吹き替えも第二象限に位置するといってよく、声が高いというわけでもないのでピッチシフトが阻害されるわけではなく台詞合わせ、ピッチシフトが両立する。
 松岡修造等々の実写系は、指向性は強くなく素材量も多いのでは右上の第一象限に位置する。アンビエンスが大きいので台詞合わせが阻害されピッチシフトが選ばれる可能性が大きくなる。(レスリングシリーズは空耳に頼っているという点も阻害される要因かも)
 バトルドームといったCM素材はアンビエンスは小さいが(ただCMはBGMがうるさい場合が多いので一考する必要性はあるかも)素材が少ないので第三象限に位置する。この領域では素材量が少ないため台詞合わせしにくいのでピッチシフトが選ばれる可能性が高くなる。
 右下の第四象限にあたる素材はぱっと思いつかなかったんだけど、そもそも素材として選ばれてないのかも。

 まぁ今のところこんなところ。