Happy FizzBuzz!!
今年はこのあいさつを流行らせていきたいと思います。
残り少ないですがよろしくお願いします。
この記事はリブセンスアドベントカレンダー2016 18日目 C面です。
A面 無限FizzBuzzリストでHappy FizzBuzzライフ
B面 Amazon PollyでHappy FizzBuzzオーディオライフ
もあわせてご覧ください。
ビジュアライザ
みなさんの私生活は
- FizzBuzz映像をずっと眺めていたい
- 一日に一回はFizzBuzzを見ないとつらい
- FizzBuzzの映画化を楽しみにしている
という病に蝕まれていますか?
そう、そんなときに役立つのがoF製ビジュアライザです。
FizzBuzzオーディオの準備
まずはFizzBuzzオーディオを用意します。
今回は英語版(Joanna)を利用しました。
ビジュアライザ
本当は「1」「2」「Fizz」とか文字が飛び出すのを作りたかったのですが、
来年もアドベントカレンダーがあるようなので、
今年はシンプルなものにしておきます。
openFrameworksでガチャガチャやります。
特に特別なことはやってないので解説は飛ばします。
ofxPostProcessing postだけアドオン使って定義してます。
//--------------------------------------------------------------
void ofApp::setup(){
ofBackground(0,0,0);
ofSetVerticalSync(true);
ofSetCircleResolution(64);
ofEnableAlphaBlending();
// Setup post-processing chain
post.init(ofGetWidth(), ofGetHeight());
post.createPass<PixelatePass>()->setEnabled(true);
post.createPass<EdgePass>()->setEnabled(true);
// Setup box positions
for (unsigned i = 0; i < NUM_BOXES; ++i) {
posns.push_back(ofVec3f(0, 0, 0));
}
boxMesh = ofMesh::box(20, 20, 20);
sound.load("fizzbuzz.mp3");
sound.setLoop(true);
sound.play();
vol = 0.0;
}
//--------------------------------------------------------------
void ofApp::update(){
float *volume = ofSoundGetSpectrum(1);
vol = volume[0]*800.0;
}
//--------------------------------------------------------------
void ofApp::draw(){
glPushAttrib(GL_ENABLE_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
post.begin(cam);
for (unsigned i = 0; i < posns.size(); ++i) {
ofPushMatrix();
ofRotate(i * 10, 0, 5, 0);
ofTranslate(posns[i] + ofVec3f(vol * i, 0, 0));
boxMesh.draw();
ofPopMatrix();
}
post.end();
glPopAttrib();
}
完成品
こんな感じになりました。
作ってから思いましたが単調にしゃべり続けるので、
全然ビジュアライザに向いてないですね。
みなさまも、openFrameworksを使って、
HappyなFizzBuzzビジュアライズライフをお送りください。