rotate text

/*
* text rotate
*/

import ddf.minim.*;
import ddf.minim.effects.*;
import ddf.minim.ugens.*;
import ddf.minim.analysis.*;
import codeanticode.syphon.*;// [lib]Syphon

Minim minim; // Minim型変数のminimの宣言
AudioInput input;  //音入力用のオブジェクト変数
SyphonServer server; // [lib]Syphon

/* option */
String textObject = "pmemo"; // 表示テキスト
int textSize = 60; // テキストサイズ
int timerBreak = 300; // 定期停止時間


PFont font; // フォント使用準備
float soundLevel; // 音量
float textScale; // 音量を元にテキストの拡大値
int speed = 10; // 回転速度
float difference; // 音量からの変化を滑らかに
float easing = 0.1; // イージング係数。滑らか具合。大きい数値は大きく変化。
boolean flag = true;
int backgroundColor = 0;
int textColor = 100;
int angle; // 回転用角度値
int timer; // 定期停止用タイマー

void settings(){
  size(600, 600, P3D);
  PJOGL.profile=1;
}

void setup(){
  background(0);
  colorMode(HSB, 360, 100, 100);
  noStroke();
  frameRate(30); // 少し負担を減らそうとデフォルトの半分に
  
  minim = new Minim(this); // Minim生成
  server = new SyphonServer(this, "Processing Syphon"); // [lib]Syphon
  input = minim.getLineIn(Minim.MONO, 512);// オーディオインプット設定
  
  font = loadFont("CourierNewPSMT-100.vlw");
  textFont(font, 100);
}

void draw(){
  server.sendScreen(); // [lib]Syphon
  background(0, 0, backgroundColor);
  fill(0, 0, textColor);
    
  translate(width/2, height/2); // 原点を中央に移動
  
  soundLevel = map(input.mix.level(), 0, 0.5, 1, 2); // level()メソッドが返す値は小さく(0から0.5)。mapで値の範囲を(1から2)に変換 
  //println("soundLevel: " + soundLevel);
  difference = soundLevel - textScale; // inputのレベルと現在の拡大値の差
  textScale = textScale + difference * easing; // 拡大値をeasing値ずつ変化させる  
  
  scale(textScale); // inputのlevelで得られた(1〜2の範囲に変換した)音量をイージングを加えて描画要素の拡大値に使用
  drawText(); // 回転停止時テキスト描画関数(スケッチ後半で設定)
  //println("timer: " + timer);
  //println("angle: " + angle);
  
  if(timer > timerBreak){
    background(0, 0, backgroundColor);
    angle = angle + speed; // angle度をspeedずつ増やす
    if(angle > 360){ // angle度が360度に達したら
      angle = 0; // angle度を0にリセット
      timer = 0; // タイマーを0にリセット
    }
    rotateY(radians(angle)); // Y軸を中心にangle度ずつ回転
    drawText();
    drawBorder();
  }
  timer += 1;
}

void drawText(){
  textSize(textSize);
  textAlign(CENTER, CENTER);
  text(textObject, 0, 0);
}

void drawBorder() {
  rect(-width/2, -height*2, 2, height*4);
  rect(width/2, -height*2, 2, height*4);
}

void mousePressed(){
  if(flag == true){
    backgroundColor = 100;
    textColor = 0;
    flag = false;
  } else {
    backgroundColor = 0;
    textColor = 100;
    flag = true;
  }
}

void stop(){
  input.close();
  minim.stop();
  super.stop();
}

単純な文字の回転。minimの応答を確認するためのスケッチ。
VJ時パーティー開始前に映しておくのに便利だった。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください