「数カ月後、数年後に自分自身で、第一回ジェネラティブアート・アワードに応募した作品作品を見て、上達できているか確認する」という目的で、記事を作成しています。
どんな作品を応募したかと言いますと「オリジナルソングのアコースティックギター弾き語りとProcessing」を組み合わせたジェネラティブアートに挑戦をしました。
作品の内容は「突然、転校することになった大好きな人へ、勇気を出して告白することにした女性の物語。」その物語に初心者なりにジェネラティブアート要素を加えて表現させていただきました。
記事の先に、歌詞、Youtube動画、コードを載せています。
一発撮りの生演奏で、音楽の編集もしていませんし、入賞もしていません。
初心者の作品で参考になるかどうか分かりませんが、僕は自分の作品を気に入っています。
少しでも創作意欲が湧くきっかけに繋がれば嬉しいです。
- Processingの勉強を再開して約5ヶ月くらいのとき
- Processingの基礎の構文を独学で学び、ブログにアウトプットしている段階
- 初心者だし、応募しようかすごい迷っていたが「挑戦した方がいい気がする」と強く感じて勢いで参加
- 2024年8月25日に作品を1つだけ応募しました
- 1つだけにしたのは、基礎の学習が大変で、2つ考える余裕がなかったからです
第一回ジェネラティブアート・アワードに応募した作品
作品について
応募時に入力した文章そのまま載せています。
【作品のタイトル】ラブレター
【作品の解説文】
突然、転校することになった大好きな人へ、勇気を出して告白することにした女性の物語。
自ら作詞作曲、アコースティックギターで弾き語りをしたオリジナルソング「ラブレター」のPVを、Processingを使用して作成しました。
恋と勇気と青春と。
不安と希望で入り乱れる心境を、音に合わせて動くハートで表現。
嬉し涙か、悲し涙か。
大切なのは、気持ちを伝えること。
【歌詞】
転校すると聞いた 大好きなクラスメイト
シャイな私はいつも 遠くから見ているだけ
想いを伝えようと ボールペンを握りしめる
書き出しさえも浮かばない 時間だけが過ぎていく
ラブレター 勇気出して 届ける想いよ 希望を込めて
フラれても いいじゃないか 大切なのは 伝えること
誰よりも早く登校して あの人の机に入れた
授業中に読まれた チャイムが鳴り目が合った
翌日、オシャレな便箋が 私の机の中に
教科書で隠して読んだ こぼれ落ちた涙
ラブレター 勇気出して 届ける想いよ 希望を込めて
フラれても いいじゃないか 大切なのは 伝えること
作品の動画
僕なりのジェネラティブアートの部分は、音楽に合わせてハートが動くというところ。
シンプルなプロモーションビデオでもあります。
上のURLは動画作成で使用したサイトです。
コードと作成時に大変だったところ
import ddf.minim.*;
Minim minim;
AudioPlayer player;
PGraphics pg;
void setup() {
size(1600, 900);
PFont font = createFont("Meiryo", 50);
textFont(font);
minim = new Minim(this);
player = minim.loadFile("loveletter.mp3");
player.play();
//封筒を表現している線
pg = createGraphics(width, height);
pg.beginDraw();
pg.background(255);
pg.stroke(#ea5e75);
pg.strokeWeight(3);
pg.line(0, 0, 800, 450);
pg.line(1600, 0, 800, 450);
pg.endDraw();
}
void draw() {
background(255);
noStroke();
fill(#ea5e75);
image(pg, 0, 0);
float baseSize = 5; // ハートの大きさ
float radiusL = player.left.level() * 100 + baseSize;
float radiusR = player.right.level() * 100 + baseSize;
drawHeart(800, 425, radiusL);
drawHeart(800, 425, radiusR);
// 歌詞の表示
int seconds = millis() / 1000; // 経過秒数を取得
fill(#ea5e75);
textSize(70);
if (seconds >= 0 && seconds <= 5.0) {
text("ラブレター", 50, 870); // 曲のタイトル
}
if (seconds >= 6 && seconds <= 12) {
text("転校すると聞いた", 50, 870); // Aメロ
}
if (seconds >= 13 && seconds <= 19) {
text("大好きなクラスメイト", 50, 870);
}
if (seconds >= 20 && seconds <= 26) {
text("シャイな私はいつも", 50, 870);
}
if (seconds >= 27 && seconds <= 33) {
text("遠くから見ているだけ", 50, 870);
}
if (seconds >= 34 && seconds <= 40) {
text("想いを伝えようと", 50, 870);
}
if (seconds >= 41 && seconds <= 48) {
text("ボールペンを握りしめる", 50, 870);
}
if (seconds >= 49 && seconds <= 54) {
text("書き出しさえも浮かばない", 50, 870);
}
if (seconds >= 55 && seconds <= 62) {
text("時間だけが過ぎていく", 50, 870);
}
if (seconds >= 63 && seconds <= 69) {
text("ラブレター 勇気出して", 50, 870); // サビ1
}
if (seconds >= 70 && seconds <= 77) {
text("届ける想いよ 希望を込めて", 50, 870);
}
if (seconds >= 78 && seconds <= 84) {
text("フラれても いいじゃないか", 50, 870);
}
if (seconds >= 85 && seconds <= 94) {
text("大切なのは 伝えること", 50, 870);
}
if (seconds >= 95 && seconds <= 101) {
text("誰よりも早く登校して", 50, 870); // A'メロ
}
if (seconds >= 102 && seconds <= 107) {
text("あの人の机に入れた", 50, 870);
}
if (seconds >= 109 && seconds <= 115) {
text("授業中に読まれた", 50, 870);
}
if (seconds >= 116 && seconds <= 122) {
text("チャイムが鳴り目が合った", 50, 870);
}
if (seconds >= 123 && seconds <= 129) {
text("翌日、オシャレな便箋が", 50, 870);
}
if (seconds >= 130 && seconds <= 136) {
text("私の机の中に", 50, 870);
}
if (seconds >= 137 && seconds <= 143) {
text("教科書で隠して読んだ", 50, 870);
}
if (seconds >= 144 && seconds <= 150) {
text("こぼれ落ちた涙", 50, 870);
}
if (seconds >= 151 && seconds <= 157) {
text("ラブレター 勇気出して", 50, 870); // サビ2
}
if (seconds >= 158 && seconds <= 164) {
text("届ける想いよ 希望を込めて", 50, 870);
}
if (seconds >= 165 && seconds <= 171) {
text("フラれても いいじゃないか", 50, 870);
}
if (seconds >= 172 && seconds <= 179) {
text("大切なのは 伝えること", 50, 870);
}
if (seconds >= 180 && seconds <= 190) {
text("大切なのは 伝えること", 50, 870);
}
}
// ハート
void drawHeart(float x, float y, float size) {
beginShape();
for (float t = 0; t <= TWO_PI; t += 0.01) {
float xPos = x + size * 16 * pow(sin(t), 3);
float yPos = y - size * (13 * cos(t) - 4 * cos(2 * t) - 3 * cos(3 * t) - cos(4 * t));
vertex(xPos, yPos);
}
endShape(CLOSE);
}
// 曲を停止
void stop(){
player.close();
minim.stop();
super.stop();
}
- 音楽を作品にするのが初めてで不安が多かった
- ラブレターの封筒の線を残しながら、ハートを描くのが大変だった
- line()で線引いて、ハートを書けばいいんだと思って油断していたので「え?」「ん?」「え?」って何回もなった
- ハートをドキドキ動かすにはどうすればいいのかも大変だった
第一回ジェネラティブアート・アワードに応募してからの自身の変化
イメージしたものが「で、できた!!」という喜びと自信
作品を応募した2024年に学び、ブログでアウトプットしていたのは、ifとかmouse関連の構文。
「音楽は基礎をやりきってからやるぞ」と思っていたもんですから、いろいろとすっ飛ばして挑戦しました。
イメージした作品をつけれるように、調べて、エラーで、調べて、ちょっとできて……。夢中になってやっていたらできて、すごく嬉しかったです。
「難しそうだな。できるのかな?」と感じるものでも、必死になって調べたらできるということが分かったのは、僕の中で大きな自信となりました。
アウトプットの大幅な強化
自分にとって難しいと思っていたことができるようになったことで「Processingの勉強や練習をもっとしたい」と考えるように。
そこで、もっと学習時間を増やすために、学んだことをアウトプットするやり方を考え直し、生産性が向上。
第一回ジェネラティブアート・アワードに応募した次の月の2024年9月は、自分なりに理解した構文や気づきを112記事アウトプットできましたし、この記事を書いている2024年10月12日も59記事アウトプットできています。
Xにはアウトプットしすぎて、投稿に制限がかかったので、ブログ記事の投稿はしすぎないようにしました。
Xはブログ記事をアウトプットしたときは1日1投稿くらいにして、投稿しすぎない程度に作品を載せることに。
他にもYoutubeのチャンネルをワタタクコーディングを作りました。
今はまだ基礎の勉強中なので、Youtubeへの投稿はするつもりはないですが、基礎が終わったら動きのある作品などをたくさん載せていく予定です。
第二回ジェネラティブアート・アワードに挑戦する前にやっておくこと
次回のコンテストまでにやること。
- コンテストだけを意識しすぎないこと
- いろいろな作品をつくり、自分がしたい表現もやること
- 作成する作品ジャンルに、図形、写真、詩、コンテストのように考える
- いろいろな作品をつくり、自分がしたい表現もやること
- Processingのリファレンスの構文をすべて読み、理解しておく
- 第一回ジェネラティブアート・アワード受賞作品にて、入賞者さんの作品を見て、分析し、ジェネラティブアートについてより理解を深める
大賞受賞者様と作品。
すごくて。可愛くて。勉強と練習を続けて、以下のような作品がつくれるように頑張ろうと思いました。
超高級カーペットですね。僕はオレンジ色が入ってるカーペットが好きです。
今なら過去の自分に言える。上達を感じたいなら、初心者でもコンテストに挑戦すること。と
第一回ジェネラティブアート・アワードに参加して、このブログのコンセプト「Processingの上達の過程」で伝えることができるメッセージも増えました。
それは「上達を感じたいなら、初心者だったとしても、コンテストに参加すること」です。
迷いながら参加してみて、エラーを乗り越えて、イメージしたことができて、1つの壁をぶち破った気がします。
もし参加していなかったら、アウトプットも強化されていなかったし、この記事も書けていないからですからね。
第二回ジェネラティブアート・アワードでは、今よりもっと創意工夫をした表現を提出できたらなと思います。
上級者の皆様の作品を参考にして保存しつつ、基礎の学習続けていきます。
それでは今日もレッツワクワクコーディング。