1225

Twitter:@dn0t_ GitHub:@ogrew

【週刊p5js】work21

f:id:taiga006:20200809202409j:plain

function p5Creature(count, step, scale, offset) {
    for(let i = 0; i < count; i += step) {
        for(let j = 0; j < count; j += step) {
            let n = noise(i * scale, j * scale);
            let m = noise(j * scale, i * scale);
            let x = round(map(n, 0, 1, -offset, offset));
            let y = round(map(m, 0, 1, -offset, offset));

            let w = map(sin(i), -1, 1, .4, 1.96);
            strokeWeight(w);
            let len = map(n+m, 0, 2, 10, 250);
            stroke(16, len);
            point(x, y);
        }
    }
}

function setup() {
    createCanvas(900, 900);
    background(4, 6, 8);
    blendMode(ADD);
    noFill();

    noiseDetail(3);

    let cx = width/2;
    let cy = height/2;

    push();
    translate(cx + 50, cy + 50);
    p5Creature(1000, 1, 0.2, 1000);
    pop();

    noiseDetail(10);

    push();
    translate(cx, cy);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 600);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 800);
    pop();

    ellipseMode(CENTER);
    
    stroke(250, 252, 255, 90);
    strokeWeight(1.2);
    for(let i = 1; i < 4; i++) {
        noFill();
        rect(60, 20*i, 350, 15);
        fill(250, 90);
        rect(60, 20*i, random(100, 250), 15);
    }

    fill(250, 90);
    let vx, vy;
    let t = 200;

    vx = random(t);
    vy = random(t);
    line(100, 100, cx-vx, cy-vy);
    circle(cx-vx, cy-vy, 20, 20);

    vx = random(t);
    vy = random(t);
    line(100, 750, cx-vx, cy+vy);
    circle(cx-vx, cy+vy, 20, 20);
    textSize(16);
    let bnc = random(30, 60);
    let llv = random(140, 520);
    let ktc = random(-400, 600);
    text("BNC : " + bnc.toFixed(5), 40, 780);
    text("LLV(N) :  " + llv.toFixed(5), 40, 810);
    text("LLV(S) :  " + ktc.toFixed(5), 40, 840);

    vx = random(t);
    vy = random(t);
    line(730, 120, cx+vx, cy-vy);
    circle(cx+vx, cy-vy, 20, 20);

    vx = random(t);
    vy = random(t); 
    line(750, 150, cx+vx, cy+vy);
    circle(cx+vx, cy+vy, 20, 20);

    strokeCap(SQUARE);
    rectMode(CENTER);
    noStroke();
    push();
    translate(0, cy);
    rotate(PI/4);
    rect(0, 0, 60, 60);
    pop();

    push();
    translate(width, cy);
    rotate(PI/4);
    rect(0, 0, 60, 60);
    pop();

    stroke(150, 30);

    strokeWeight(16.0);
    noFill();
    circle(width-90 , 90, 80, 80);

    let g = 0;
    for(let i = 0; i < 6; i++) {
        push();
        translate(width-90 , 90);
        g += random(PI/2);
        arc(0, 0, 90, 90, -PI/2, g);
        pop();
    }

    noFill();
    stroke(150, 90);
    strokeWeight(16.0);

    let start1 = random(-PI, 0);
    let end1 = random(0, PI);
    arc(cx, cy, 340, 340, start1, end1);

    let start2 = random(0, PI);
    let end2 = random(PI, 2*PI);
    arc(cx, cy, 640, 640, start2, end2);

    let start3 = random(-HALF_PI, HALF_PI);
    let end3 = random(HALF_PI, HALF_PI+PI);
    arc(cx, cy, 700, 700, start3, end3);

    stroke(250, 252, 255, 80);
    strokeWeight(4.0);
    push();
    drawingContext.shadowBlur = 30;
    drawingContext.shadowColor = color(95, 138, 217);
    pop();

    let v = PI /10;
    let ra = [150, 250, 300, 480, 580];
    push();
    for(let i = 0; i < 5; i++) {
        let a = random(18, 12);
        strokeWeight(2.0);
        drawingContext.setLineDash([a, a/2, a/3, a/2]);
        arc(cx, cy, ra[i], ra[i],   -QUARTER_PI+v,    QUARTER_PI-v);
        arc(cx, cy, ra[i], ra[i], PI-QUARTER_PI+v, PI+QUARTER_PI-v);
    }
    let buff = 200;
    strokeWeight(.8);
    line(cx, buff, cx, height-buff);
    line(buff, cy, width-buff, cy);
    pop();

    push();
    for(let i = 0; i < 3; i++) {
        drawingContext.setLineDash([random(i, i *3), random(i*3 , i *5)]);
        circle(cx, cy, 720 + i * 20);
    }
    push();

    noLoop();
}

function draw() {
    // do nothing
}

今週の作品メモ

📌 Instagramで相互フォローの gengeomergence さんの作品が好きで、よくよくDescriptionを読んだら「レポジトリにソースコード置いてるぜ!」ってなったので早速観察。ProcessingのPythonモードで書かれていたので、今回はその数ある素敵な作品のうちの一つ"SeaCreature"をp5jsに書き換えて遊んでみました。

github.com

📌 少し前に、「SciFi系のUIをジェネラティブに作ろうぜ!」みたいなmediumあたりに書かれた英語の記事をみたんだけど、どれだっけかな。それにもちょっと触発されています。今回は事前にスケッチなどせず、思うがままに要素を追加していった結果、ソースコードもだいぶシッチャカメッチャカですが、ちょっとこれ整理して極めたいですね。面白そう。

今週の雑談

📌 Podcast番組をはじめてだいたい1年くらい経ちました。
そのことについてのブログを書きました。

taiga.hatenadiary.com

📌 7月の頭にebayで購入したオールドレンズがついに到着しました。Helios 44-2 58mmというオールドレンズの入門としては定番のレンズらしいです。sonyのa5100(APS-Cセンサー)しか手元にないので、いざ構えると80mmくらいの望遠レンズになっちゃいます。この焦点距離が素人には難しいんですが、まあ、カメラは長い趣味としてやっていけたらいいなと思っているので焦らずに遊んでいければいいなとおもっています。Flickrとかに写真まとめていきたいな。

📌 最近、読んだ本の感想をInstagramに載せはじめました。おうち時間が当たり前になってきて、一番自分の中で起きた変化は読書量かもしれません。こちらもゆるーく継続できたらいいなと思っています。

www.instagram.com

(こんな感じ。) f:id:taiga006:20200809220209p:plain:w400

今週のラジオ

📌 やー、絵文字って難しいよね😜

酷暑にやられてPodcastを始めて1年が経った、話。

ちょうど去年の今日、こんな記事を書いていました。

taiga.hatenadiary.com

今年の今日も、やっぱり暑いです。


f:id:taiga006:20200809105015p:plain350can.beer : この記事を書いている段階では収録は49回まで、公開は48回までされています。)

今日は、Podcastを1年ほど続けて、変わったこと、良かったこと、そして思ったことなどを書いていきたいと思います。

変わったこと

収録方法が変わりました。(といっても、まだお試し段階ではあるのですが。)

本当の番組開始当初はSkypeやZoomで収録していたのですが、海外のPodcasterたちの動向などを調査して割と早い段階でZencastr1というWebサービスに乗り換えました。

そしてここ直近の2回ほどですが、一部で話題となっているCleanfeed2を使用しています。

新しく使っているCleanfeedについてはまだ詳しく理解していないのですが、一応の使用感と比較して改めて感じたZencastrの良い点と良くない点をまとめておきます。

■ Zencastrの良い点

- UIがシンプル(大事!)
- Google DriveやDropboxと紐付けられる → 編集するために音源を手動でアップロードする手間が省ける
- ゲストも現在の収録時間がわかる
- URLさえ発行すればオーナーがいなくてもゲストが先に部屋に入れる
- 音声とは別でチャット機能がある → 収録前のメモや、音が聞こえないときのSOSなどに使える
- 無料枠で月々16 GB(誤差あり)の収録ができる → 1年やってきて足りなくなったことがない

■ Zencastrの良くない点

- New Recording(別の収録セクション)に移行する際にときどきゲストがサイレントで落ちる
- 時たま他のサービスにはないノイズや音飛びが発生する(いい加減ローカルでRecするべき…?)

正直、Zencastr最高です。これはCleanfeedで収録した音源を編集してからより思うようになりました。

良くない点の2つ目を避けるためにCleanfeedや他にもCast3も触ってみましたがあまり変わらない上に小さなノイズが乗るようになってしまいました。

ro-che.info

…このような記事もありましたが、2018年の比較なので、その後、だいぶZencastrが頑張ったということでしょうか?


マイクを買い替えました。

肝心の音質については、正直Zencastrなどを使用している限り、あまり恩恵は受けられてません。

それを加味すると正直高い買い物だったのですが、これからも番組を続けていくことを考えれば悪くない買い物だったと思います。大切に使います。

ただ、純正のマイクアームが結構高いのが厳しい。(オーディオインターフェース内蔵マイクなので、下手なマイクアームだと支えられない。)

機材やツールについてはこんなところでしょうか。


これは僕のメモとして残しておくのですが、今後変えたいこととして編集ツールの変更があります。

今はAudacity4という有名な音声編集ソフトで編集しているのですが、カフェで作業するのにあたって僕のMSIのごついPCを持ち出すのがだいぶ面倒です。

iPadを買ってGarageBandで編集することを一時期考えたのですが、GarageBandにあまりいい思い出がないので、躊躇していました。

そんなさなか(これもつい最近見つけたのですが)Ferrite5というiOSアプリを発見しました。

www.youtube.com

動画ではまるで、絵を書くように、メモをとるように、サクサク音源を編集しています。

実際に操作していないので、断定はできませんが、これは僕が理想とする編集ツールにだいぶ近そうです。

良かったこと

SNSをあまりやらなくなりました。

正直言えば、アプリを開く頻度などはそこまで減ってないのですがツイートする機会がぐっと減りました。

これはPodcastの番組内でも何度かhaseと話題にしました。

以前まではふと日常で思ったことや仕事に対する愚痴、気になったニュース記事などをRTしてそれっぽい意見をしたりなど、フォロワー各位の情報の波に追いつけ追い越せの感じで生きていたのが、その輪から見事外れることができました。

輪から外れることで自分が好きなことや、やりたいことみたいなものに対してしっかりとフォーカスを合わせることができるようになりつつあります。

一方で、世間の話題や時事ネタに対するセンサーが弱ってきてもいます。

良いのか悪いのか、…その両面があると思いますが、肌感覚では「健康的になった」と言って差し支えないと思います。

それから、生活のリズムを作るということにも少し成功しています。

というのは、Podcastを続けていく上で作業は「収録」だけではもちろんなく、「編集」という作業が必要になります。

僕らの番組はだいたい収録に1時間。編集して40~50分になるのですが、これを編集(&アップロード)するのにだいたい2時間から長いときは3時間ほどかけています。

僕はめんどうくさがりなので朝の集中力がある時間にこういった作業を進めたいと思い、毎週木曜日に収録→土曜日の午前に編集というルーティンにしています。

あの気怠げな土曜日の朝に僕が早起きしているのです!革命!!偉い!!!できる子!!

…そうそう、これは努力の賜物というよりは棚ぼた的な話になるのですが、350canを始めたことで「Arctic Code Vault Contributor」になりました。

f:id:taiga006:20200809092545p:plain

(おそらくfork元のyattecast の影響なのかな、この辺のレポジトリ選定基準はよくわかっていません。)

思ったこと

改めてPodcastはラジオ番組とは違います。

昨今の音声メディアブームの流れを見ていると、みんなどこかしらラジオ番組”風”を興じていますが、その流行はあまり長くないでしょう。

リスナーの求めるものを追い求めて市場分析して提供しようというスタイルの賞味期限は乳製品よりもきっと短い。

それがその人の仕事であったり、あるいは目に見えた利益が発生すれば話は別ですが、少なくとも僕やhaseはその意義だけでは続けられないでしょう。

これからは、よりパーソナリティに迫った企画やコンテンツのほうが受け入れられるようになっていくと思います。

わかりやすく言えば("Video log" = "V-LOG" という言葉が当たり前になってだいぶ経ちましたが)今後は "Voice log" = "V-LOG" という2つ目の使われ方が増えていく、といった感じです。

(こういう観点で見て、改めてRebuild.fmは僕の理想的な番組だなあ、と思います。)

(うーん、"Castlog" ってワードは流行らなそう…?)

偉そうに、「リスナーには媚びないぞ!」みたいなことを上に書きましたが、それは「リスナーを大事にしない」という意味ではありません。むしろ、その正反対です。

僕らが番組を通してよりパーソナリティな部分をより開示していく中で、ときに共感してくれたり、ときに反論してくれたりするリスナーがいてくれたらそれで最高だと思います。


以上、Podcastを始めて1年経っての記録的な記事です。

番組ではご意見ご感想をお待ちしております。

最新回では、haseは「お笑いライブで隣に可愛い女の子が座ってて下ネタコントで上手く笑えなかった話」を、僕は「キムタクのInstagram見てたら高校時代の黒歴史の扉を開いてしまった話」をしています。

………………………なんだ、これ。


最近はポストクラシカルと呼ばれるジャンアルの音楽に傾倒しています。