GitHubにPerfume降臨
GitHubにperfumeが登場して話題となったのは、確か3月。Perfumeの世界戦略用のWebサイトで公開されたコンピュータグラフィックスによるダンス動画に使用されたモーション・ピクチャー・データと中田ヤスタカの音楽データをGitHubで提供されたのだ。サンプル・プログラムと共に。忙しくてダウンロードしたままだった。やっと遊んでみることにした。
Perfume Global site
http://www.perfume-global.com/
GitHub perfume-dev
https://github.com/perfume-dev/
ダウンロードしたデータ
ダンスのMotion Picture Data (BVH形式)- あーちゃん用 aachan.bvh
- かしゆか用 kashiyuka.bvh
- ノッチ用 nocchi.bvh
- perfume_globalsite_sound.wav
プログラムソースファイル構成
- p5f_sample.pde -- メインルーチン
- PBvh.pde -- pvhデータを扱うモデル
- PvhParser.pde -- PBvhで利用。bvhデータを解析。
- BvhBone.pde -- PBvhで利用。フレームの位置情報を扱っている?
サンプルプログラムを修正
プログラムソースをみると、dataフォルダに A_test.bvh, B_test.bvh, C_test.bvhのデータがあり、これを読み込んで動かしているようなので早速、ダウンロードしたbvhファイルに入れ替えて再度実行。おお!動きました。でも音がない。
- 入手したbvhファイル、wavファイルをプログラムソース直下のdataフォルダにコピー
- p5f_sample.pdeの中のファイル読み込み部分のファイル名を変更
以下の方のブログを参考に minimライブラリを利用してみました。
http://r-dimension.xsrv.jp/classes_j/minim/
サンプルのままでも、面白いのですが、せっかくサンプルソースが公開されているのですから、ちょっとだけ手を入れてみます。
- 三人のフレームは色を変えてみる
- フレームの形状をsphere (球)からbox(立方体)に変更
- フレームの末端、つまり頭、足首、手首を大きくした
// p5f_sample 修正
import ddf.minim.*; // サウンドライブラリ minimをインポート
Minim minim; // 音源クラス用の変数を宣言
AudioPlayer player; // 演奏クラス用の変数を宣言
BvhParser parserA = new BvhParser();
PBvh bvh1, bvh2, bvh3;
public void setup()
{
size( 1280, 720, P3D );
background( 0 );
noStroke();
frameRate( 30 );
// dataフォルダからダンスデータを読み込む
bvh1 = new PBvh( loadStrings( "aachan.bvh" ) );
bvh2 = new PBvh( loadStrings( "kashiyuka.bvh" ) );
bvh3 = new PBvh( loadStrings( "nocchi.bvh" ) );
// sound add この当たりがサウンド操作
// 一回鳴らしたきりになっているがどうしたら良いか不明
minim = new Minim(this);
player = minim.loadFile("Perfume_globalsite_sound.wav");
player.play();
loop();
}
public void draw()
{
background( 0 );
camera((float) mouseX, (float) mouseY, 100.f, (float) (width/2.f), (float) (height/2.f), 0.f, 0.f, 1.f, 0.f);
pushMatrix();
translate( width/2, height/2 + 100, 0);
scale(-1, -1, -1);
bvh1.draw( millis() , 1); //aachan 識別子として Integer値を渡すことにした
bvh2.draw( millis() , 2); //kashiyuka
bvh3.draw( millis() , 3); //nochi
popMatrix();
}
void stop()
{
player.close();
minim.stop();
super.stop();
}
PBvh.pde ソースだけ、手を入れてみました。
// PBvh.pde の一部
public void draw( int ms , int co) // 識別子用のパラメータ co を追加
{
parser.moveMsTo( ms, 3000 );
BvhBone root = parser.getBones().get(0);
update(root);
draw(co); // protected な drawに間接的に識別子を渡す
}
//
// 途中 省略
//
protected void draw(int co)
{
//fill(color(100));
// 識別子 co によって、塗りつぶし色を変更している。
if(co == 1){
fill(127,0,0);
}else if(co == 2){
fill(0,127,0);
}else if(co == 3){
fill(0,0,127);
}else{
fill(color(100));
}
for( BvhBone b : parser.getBones())
{
pushMatrix();
translate( b.absPos.x, b.absPos.y, b.absPos.z);
//sphere(2);
box(5); // 立方体に変更
popMatrix();
if (!b.hasChildren()) // 子を持たない。終端のことか。
{
pushMatrix();
translate( b.absEndPos.x, b.absEndPos.y, b.absEndPos.z);
//sphere(2);
box(25); // でかい立方体に変更
popMatrix();
}
}
}
![]() |
| 実際はもっと格好良いのだが! |
Perfume Dance sample applet
気になること
- 音がループしないし、動きと同期していない。
- もっと、大胆にカスタマイズしたい。youTubeでは既に多くの人が楽しんで凄いことになっている
右手首をくるくると回しながら、三人が立ち位置を入れ替えているところは、何度観てもかわいいなあ


0 件のコメント:
コメントを投稿