今まで使った技術で↓のカウントダウンが作れます。
やってることとしては、その時間の時刻を表示し、文字の透明度をsinで変えているだけです。多分もっとスマートな方法があります。
↓にこれのコードを貼っておくのでこれをコピペして、コピペした先の.pdeと同じ階層にフォントの.ttfファイルを入れれば動きます。また、OBSに入れることを前提として制作していたのでFHDになってますが、小さくしたいときはsize(,)の中身で調節してください。その時多少文字がずれてしまう時は、121行目のrect(,,,)の係数を少しずつ変えてください。
ちさと@chisao_62
Processingで作るカウントダウン https://t.co/FNk4NilWYv
2021/01/05 21:27:24
やってることとしては、その時間の時刻を表示し、文字の透明度をsinで変えているだけです。多分もっとスマートな方法があります。
↓にこれのコードを貼っておくのでこれをコピペして、コピペした先の.pdeと同じ階層にフォントの.ttfファイルを入れれば動きます。また、OBSに入れることを前提として制作していたのでFHDになってますが、小さくしたいときはsize(,)の中身で調節してください。その時多少文字がずれてしまう時は、121行目のrect(,,,)の係数を少しずつ変えてください。
- import ddf.minim.*;
- import ddf.minim.analysis.*;
- import ddf.minim.effects.*;
- import ddf.minim.signals.*;
- import ddf.minim.spi.*;
- import ddf.minim.ugens.*;
- PFont D14;
- int[] now = new int[5];
- char[] mode = new char[2];
- int target;
- String s;
- Minim minim;
- AudioOutput out;
- Oscil oscil;
- void setup() {
- size(1920, 1080);
- D14 = createFont("DSEG14Modern-Regular.ttf", 60);
- colorMode(HSB, 360, 255, 255, 255);
- textAlign(CENTER, CENTER);
- strokeWeight(5);
- minim = new Minim(this);
- out = minim.getLineOut(Minim.STEREO);
- oscil = new Oscil(440, 0.5, Waves.SQUARE);
- }
- void draw() {
- background(0);
- if (mode[1] != mode[0]) {
- update();
- mode[1] = mode[0];
- }
- switch(mode[0]) {
- case 'c':
- count();
- break;
- default:
- break;
- }
- }
- void count() {
- now[0] = target - millis();
- now[1] = int( map( sin( map( now[0] / 2 % 1000, 0, 1000, 0, 2*PI) + PI / 4), -1, 1, 0, 255));
- now[2] = now[0] % 1000;
- now[4] = now[0];
- if (now[0]<10) {
- mode[0] = 'b';
- return;
- }
- if (now[0] % 1000 <10) {
- s = "00" + str(now[0] % 1000);
- } else {
- if (now[0] % 1000 < 100) {
- s = "0" + str(now[0] % 1000);
- } else {
- s = str(now[0] % 1000);
- }
- }
- now[0] = now[0] / 1000;
- if (now[0] % 60 <10) {
- s = "0" + str(now[0] % 60) + ":" + s;
- } else {
- s = str(now[0] % 60) + ":" + s;
- }
- now[0] = now[0] / 60;
- if (now[0] % 60 <10) {
- s = "0" + str(now[0] % 60) + ":" + s;
- } else {
- s = str(now[0] % 60) + ":" + s;
- }
- now[0] = now[0] / 60;
- if (now[0] % 60 <10) {
- s = "0" + str(now[0] % 60) + ":" + s;
- } else {
- s = str(now[0] % 60) + ":" + s;
- }
- if (now[4] >10000) {
- if (now[2] < 100) {
- if (now[3] != 1) {
- oscil.patch(out);
- now[3] = 1;
- }
- } else {
- oscil.unpatch(out);
- now[3] = 0;
- }
- } else {
- if (now[4] > 5000) {
- if (now[2] < 100 || (now[2] > 500 && now[2] < 600)) {
- if (now[3] != 1) {
- oscil.patch(out);
- now[3] = 1;
- }
- } else {
- oscil.unpatch(out);
- now[3] = 0;
- }
- } else {
- if (now[4] > 1000) {
- if (now[2] < 100 || (now[2] > 500 && now[2] < 600) || (now[2] > 250 && now[2] < 350) || (now[2] > 750 && now[2] < 850)) {
- if (now[3] != 1) {
- oscil.patch(out);
- now[3] = 1;
- }
- } else {
- oscil.unpatch(out);
- now[3] = 0;
- }
- }
- }
- }
- stroke(0, 0, 255, map( now[1], 0, 255, 100, 255));
- fill(0, 0, 0, 0);
- rect(width / 2 - textWidth(s) / 2, height / 2 - (textAscent() + textDescent()) / 2 - 5, textWidth(s), textAscent() + textDescent() + 10);
- textFont(D14);
- fill(0, 0, 255, now[1]);
- text(s, width / 2, height / 2);
- }
- void update() {
- switch(mode[1]) {
- case 'c':
- stroke(0, 0, 0, 255);
- oscil.unpatch(out);
- break;
- default:
- break;
- }
- switch(mode[0]) {
- case 'c':
- if (mode[1] != mode[0]) {
- target = millis() + (((((0 * 60) + 1) * 60) + 0) * 1000);
- }
- break;
- default:
- break;
- }
- }
- void keyPressed() {
- mode[0] = key;
- }