kenban nikki    archives   tags   

wann poker live vol. 1

2019-06-14

一月程前にnyan氏を招待してwann poker liveなるイベントを開催しました。ライブコーディングによる音楽とポーカーを楽しむ会です。

そもそもは我々のポーカーをドローポーカーからテキサスホールデムへ進化させるための勉強会をする予定だったのですが、その3日前にライブコーディングなるものを知り(ライブコーディングについて詳しく知りたい方はyoppa先生の講義資料をどうぞ。も良かったです)、これは面白い!となったので急遽ライブコーディングとポーカーをする会に変更になったのです。

ついでにロゴも作ってみました。こんなのです。本番には1分くらいで考えて描いたスケッチを使って、後日時間のある時にパスを引きました。全てがiPadで完結したので良い時代になったものだなあと思いました。


止めておきなさいと言われたけれど、ネオンバージョンも作ってみました。こっちを公式にしようかな。


コーディングをするので「wann live」部分は等幅フォントっぽくして、「poker」はなんとなくイメージで筆記体っぽくしました。等幅と筆記体と言えば、Tabulamore Scriptがアツいですね。そもそもTabular Type Foundry自体がアツいです。等幅フォントだけのファウンドリーなんてわくわくしかありません。そういえば、Source Han Code JPのPan-CJKバージョンのSource Code Monoも最近リリースされましたね。私もプログラミングフォントを合成したり、等幅フォントを作ったりしてみたいです。

まあ話を戻して、wann poker liveです。

ライブコーディング

音にしても映像にしてもライブコーディングにしても超ド級の初心者なため、映像も出したかったのですが両方一緒にするのは絶対に無理だと思ったので、音に反応するProcessing1のスケッチを用意しました。ほぼyoppa先生の講義資料そのままの、FFT解析を利用したものです。

また、音楽についても何も分かっていないので、場をつなぐために必要だろうと思ってPacemakerというDJをするiOSアプリを用意しておきました2。これもProcessingに入力として与えたかったのですが、一方で話し声など外部の物音は拾わないようにしたかったのでMacのマイクを使うのではなく、iPadの音声出力をMacのMIDI入力として使いました。また、SunflowerとLadioCastを使って音をルーティングしました。結構スムーズにできました。

やはりプロジェクターの方が雰囲気が良かろうと思って、プロジェクターとディスプレイの両方を使いました。プロジェクターで壁にコーディング画面を投影し、ディスプレイにはProcessingスケッチを映しました。


肝心の音のライブコーディング部分には、Sonic Piを使いました。Rubyライクな文法でループが作れる楽しいやつです。単体で動くのでインストールも楽ちん。ライブコーディングには他にもいろんなツールがあって、一覧はここにまとまっています。Extemporeとか、Lispライクなのが多いような気がします。Haskellも多いかなあ、有名なTidalCyclesとか。あ、FoxDotはPython製だよ!

今回はSonic Piを使ったわけですが、私が作った音楽は宇宙との交信と評されました。途中でnyan氏のターンになり、なんだか落ち着いたカフェのような感じになりました。記録のためにできたコードを置いておきます。nyan氏の方が、演奏しているっぽさがありますね。Sonic Piにコピペすると聞くことができます。

wann's code

tempo = 60
root = :C2 + 7

use_bpm tempo

live_loop :riff do
  use_bpm tempo * 4
  use_synth :pluck
  16.times do
    play scale(root, :major, num_octaves: 1).shuffle.take(2),
      release: rand(3), amp: 1, pan: rrand(-0.7, 0.7)
    sleep 0.5
  end
end

live_loop :harmony do
  use_bpm tempo * 2
  use_synth :sine
  if one_in(2)
    with_fx :wobble do
      2.times do
        play chord(root, :M7,  num_octaves: 4)
        sleep 1
      end
      2.times do
        play chord(root, :M,  num_octaves: 4)
        sleep 1
      end
    end
  else
    2.times do
      play chord(root, :M7,  num_octaves: 4)
      sleep 1
    end
    2.times do
      play chord(root, :M,  num_octaves: 4)
      sleep 1
    end
  end
end

live_loop :random_bd do
  if one_in(3)
    sample :bd_haus, amp: 1.0, cutoff: 80
  end
  sleep 0.25
end

live_loop :drums do
  sample :bd_808, amp: 2.5, cutoff: 80
  sleep 0.5
  if one_in(4)
    2.times do
      sample :bd_haus, amp: 1.5
      sleep 0.5 / 2
    end
  else
    4.times do
      sample :bd_klub, amp: 1.5
      sleep 0.5 / 4
    end
  end
end

nyan's code

use_bpm 80

live_loop :nya do
  6.times do
    sample :drum_bass_soft
    sleep 0.5
  end
end

live_loop :nyanya do
  sample :drum_snare_soft
  sleep 1
end

live_loop :nyanyanya do
  use_synth :tri
  play chord(:g3, :m7)
  sleep 0.5
  
  play chord(:g3, :m7)
  sleep 0.5
  
  play chord(:g3, :m7)
  sleep 0.5
  
  play chord(:g3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:e3, :m7)
  sleep 0.5
  
  play chord(:e3, :m7)
  sleep 0.5
  
  play chord(:e3, :m7)
  sleep 0.5
  
  play chord(:e3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.5
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
  
  play chord(:c3, :m7)
  sleep 0.25
end

live_loop :nyanyanyanya do
  use_synth :tri
  play :g2
  play :c3
  sleep 0.25
  
  play :a3
  play :e3
  sleep 0.25
  
  play :b3
  play :b4, amp: 0.6, cuttoff: 80
  sleep 1.5
  
  if one_in(4)
    play :c4, cutoff: 80
    sleep 0.25 / 2
    
    play :e4, cutoff: 80
    sleep 0.25 / 2
    
    play :a3
    play :e3
    sleep 0.25
    
    play :b3
    play :b4, amp: 0.6, cuttoff: 80
    sleep 1.5
  end
end

ポーカー

その後、テキサスホールデムのルールを学んで、二人でテキサスホールデムをしました。楽しかった。けれど私の態度が悪いとの苦情を受けて、今ではポーカーで遊んでもらえません。またポーカーがしたいです。


  1. 余談ですが(余談ばかりですが)、ProcessingのProce55ing表記を先日imoutoid's websitoidで初めて知った。そもそもライブコーディングに辿り着いたのも元はと言えばimoutoidのSuperCollider関連の記事を読んだから。 ↩︎

  2. こいつはiPhoneとiPadでインターフェイスが結構異なっていて、iPhoneだと波形の操作がメインだけどiPadだとターンテーブルを回す要領で色々できるから楽しい。 ↩︎