yoppa.org


最終課題について / openFrameworksのインタラクション

Reactive Books, John Maeda, 1995 – 1999

インタラクション (Interaciton)とは英語の「 inter (〜の間に)」と「action (動作)」を合成した言葉です。つまり、インタラクションとは「人間が何かアクション (動作) をした時、そのアクションが一方通行にならず、相手側の機器やプログラムがそのアクションに反応してリアクションをする」ということを意味します。今期のクリエイティブ・コーディングの講義の最終課題はこのインタラクションをテーマにします。

今回は、openFrameworksで実現可能な最もシンプルなインタラクションの方法である、マウスとキーボードによるインタラクションを取り上げます。openFrameworksでは、通常はsetup()、update()、draw() のループの中でアニメーションを生成します。しかし、マウスやキーボードの動作によってこのループの中に割り込むことのできる「イベント」と呼ばれる関数がいろいろ用意されています。例えば、マウスポインタを動かした時や、マウスボタンを押した時、またはキーボードを押した時など、ユーザーの動作に反応するプログラムを作成することが可能となります。

映像資料

https://youtube.com/watch?v=agqgU_fK6bA%3Fversion%3D3%26rel%3D1%26showsearch%3D0%26showinfo%3D1%26iv_load_policy%3D1%26fs%3D1%26hl%3Den-US%26autohide%3D2%26wmode%3Dtransparent

スライド資料

サンプルファイル

最終課題について

最終課題のテーマ : 「インタラクションを表現する」

※ テーマ「Audio Visual」からより範囲を拡大しました

インタラクションのあるopenFrameworksのスケッチを作成してください。インタラクションの手段は自由です。

  • 音 ← ※以前の課題内容
  • マウス
  • キーボード
  • 映像 (カメラ)
  • ネットワーク (OSCなど)
  • …etc

1月24日の最後の講義で講評会を行います!

アンケート

本日の授業に参加した方は以下のアンケートに回答してください。


ライブコーディングをストリーミング配信

今回は応用編としてライブコーディングのパフォーマンスをネットストリーミングする方法について紹介していきます。以下のアプリケーションでストリーミング環境を構築することで、フリーでネット配信が実現可能です。

ネットストリーミングする方法を身につけたら、ぜひTOPLAPTidal Clubの主催するストリーミングイベントに参加してみましょう!

準備

以下のサイトからOBS Studioをダウンロードしてインストールします

ストリーミングのための設定は、以下の資料を参考にしながら実際に作業しながら解説していきます。

OSB Studioのセットアップ

※画面では英語版で説明していますが、日本語版でも画面構成は一緒です。

アプリを最初に起動するとセットアップウィザードが起動するので、以下のように設定していく。

Usage Informationは「Optimize for streaming, recording is secondary」で設定

Base Resolution : 1920 x 1080、FPS : 30 に設定

Serviceは「YouTube – RTMPS」にして「Use Stream Key」をクリック。授業内で指定するストリームキーを入力

ネットワークの接続テストを行うので、しばらく待つ。

リコメンドする設定をそのまま「Apply Setting」で適用

ここまでで、環境設定は完了です!

次にストリーミングの設定。メイン画面のSettingsボタンを押して設定画面を表示。

以下のようにYouTUbe – RTMPSでストリーミングキーを入力 (キーは先程設定の際に用いたもの) して、「Apply」で確定

あとは、メイン画面で「Start Streaming」を押すとストリーミングが始まります!

最終課題について

最終課題は、今回紹介した方法でライブコーディングをライブストリーミングしながらパフォーマンスを行います。

  • 日時 : 2022年1月19日 18:00 – 19:30
  • 使用するアプリケーション : TidalCycles、またはSonic Pi
  • 時間 : 5分〜10分程度


ここまでの内容の振り返り、最終課題制作のヒント

今回は、次回の最終発表に向けて、これまでの内容を振り返り、最終課題制作のためのヒントとなる内容をレクチャーします。

最終課題

最終課題のテーマ : TouchDesingerを使用して、ミニVJパフォーマンス!!

TouchDesignerを使用して、映像を用いたパフォーマンス (VJ) を発表してください。

  • 時間はだいたい5分程度
  • 音は、パフォーマンスに使用する曲を各自選曲して使用
  • 最終日 (1月19日) に発表会を行います!

スライド資料

TouchDesignerサンプルファイル一式

ここまでの内容のTouchDesignerのサンプル一式を以下のGithubのリポジトリにアップロードしました。

アンケート

今日の授業を受講した方は以下のアンケートに答えてください。


第2課題講評会に向けて

今後の予定

  • 1月6日 : 最後のエスキス
  • 1月13日 : 講評会

講評会で発表する内容

1. 作品についての説明(プレゼンテーション)

  • スライドで発表 (PowerPointなど)
  • 構成
    1. 作品名
    2. 作品のコンセプトの説明
      • 時間をどのように表現したのか
    3. 展示イメージ
      • Hara Museum ARC内で展示したイメージ
        • もし可能ならCADなどを活用
        • ギャラリーの写真に合成するのも可
        • 手書きスケッチ (殴り書きではなくていねいに)
      • 展示のイメージが伝わるように工夫してみる
    4. 機材構成
      • (想像で構わないので) 機材の構成図を作成

2. プログラムのデモ

  • できるだけ展示の内容が伝わるように
  • プログラムでの再現が難しいようなら画像を切り替えるなど工夫してみる
  • できる範囲で最大限作品を再現

※注意

  • 必ず発表してください! (発表すれば必ず単位は出ます)
  • 講評会は遅刻しないように (もし事情がある場合は事前連絡を)
  • もし不本意な部分があっても制作期間の中でのベストを尽くしてください

最終課題について / openFrameworksのインタラクション

Reactive Books, John Maeda, 1995 – 1999

インタラクション (Interaciton)とは英語の「 inter (〜の間に)」と「action (動作)」を合成した言葉です。つまり、インタラクションとは「人間が何かアクション (動作) をした時、そのアクションが一方通行にならず、相手側の機器やプログラムがそのアクションに反応してリアクションをする」ということを意味します。今期のクリエイティブ・コーディングの講義の最終課題はこのインタラクションをテーマにします。

今回は、openFrameworksで実現可能な最もシンプルなインタラクションの方法である、マウスとキーボードによるインタラクションを取り上げます。openFrameworksでは、通常はsetup()、update()、draw() のループの中でアニメーションを生成します。しかし、マウスやキーボードの動作によってこのループの中に割り込むことのできる「イベント」と呼ばれる関数がいろいろ用意されています。例えば、マウスポインタを動かした時や、マウスボタンを押した時、またはキーボードを押した時など、ユーザーの動作に反応するプログラムを作成することが可能となります。

映像資料

https://youtube.com/watch?v=agqgU_fK6bA%3Fversion%3D3%26rel%3D1%26showsearch%3D0%26showinfo%3D1%26iv_load_policy%3D1%26fs%3D1%26hl%3Den-US%26autohide%3D2%26wmode%3Dtransparent

スライド資料

サンプルファイル

最終課題について

最終課題のテーマ : 「インタラクションを表現する」

インタラクションのあるopenFrameworksのスケッチを作成してください。インタラクションの手段は自由です。

  • マウス
  • キーボード
  • 映像 (カメラ)
  • ネットワーク (OSCなど)
  • …etc

1月14日の最後の講義で講評会を行います!

アンケート

授業に参加した方は以下のアンケートに回答してください。


TouchDesigner中級編(7) – プロジェクトの構造化とGUI、Container COMP、Widget COMP

TouchDesignerのプロジェクトは階層構造を持っています。作成しているプロジェクトの中に複数のオペレーターをまとめた「サブパッチ」のような構造を作ることが可能です。複数のオペレータをまとめるにはContainer COMPを使用します。Container COMPは、複数の入力と出力を設定したり、他のオペレータの値を参照することが可能です。さらに、このContainerの仕組みを応用してGUI (グラフィクスユーザーインターフェイス) が作成できます。Widgetというユーザーインターフェイスに特化したCOMPを使用してボタンやスライダーといった様々なパーツを組合せて独自のGUIを構築して画面上に配置したり、別ウィンドウで表示することが可能です。

スライド資料

サンプルファイル

アンケート

本日の授業に参加した方は下記のアンケートに答えてください。


TidalCycles応用 2 – シンセサイザーを使う / コードとスケール

TidalCycleでここまで使用してきた方法では、サンプリング(録音)したサウンドファイルを演奏してきました (cp hc bdなど) 。これは楽器に例えるなら、サンプラーを演奏している状態です。TidalCyclesではこの他にシンセサイザーのように音の波形を合成して演奏する「楽器」も用意されています。このシンセサイザーの機能はSuperCollider内で楽器 (Synth) として定義されていて、自分自身でプログラミングすることでオリジナルの楽器を作成することも可能です。今回の授業の前半はこのTidalCyclesのシンセサイザーの機能に着目していろいろ実験していきます。後半は、TidalCyclesでコード(和音)とスケール(旋法)を使う方法について取り上げます。Sonic Piと同様にTidalCyclesではコード名やスケール名を指定することで音列を生成することが可能で、この機能を活用することでアルゴリズミックにメロディーやコードを生成していくことが可能となります。

参考:

スライド資料

アンケート

本日の授業に参加した方は下記のアンケートに回答してください。

サンプルコード

-- シンプルにシンセを鳴らしてみる
d1
  $s "supersaw*4"
  #n 0

-- シンセの音色の種類を変えてみる
d1
  $s "supersaw superpwm supersquare superzow"
  #n 0

-- シンセの種類
-- supermandolin, supergong, superpiano, superhex, superkick, super808, 
-- superhat, supersnare, superclap, supersiren, supersquare, supersaw, 
-- superpwm, supercomparator, superchip, supernoise, superfork, 
-- superhammond, supervibe, superhoover, superzow, superstatic, 
-- supergrind, superprimes, superwavemechanics, supertron, superreese

-- 音階を弾く
d1
$s "supersaw*4"
#n "0 4 5 7"

-- ランダムな音階
d1
$s "supersaw*8"
#n (irand 12)

-- 短かい持続
d1
$s "supersaw*8"
#sustain "0.05"
#n (irand 12)

-- 短かい持続と長い持続
d1
$s "supersaw*8"
#sustain "{0.05 0.2}%8"
#n (irand 12)

-- メロディーを生成してみる
d1
$s "supersaw(11, 16)"
#sustain "{0.1 0.3}%4"
#n "{0 4 5 7 9 12}%11"
|-|n 12 
|+|n "[0, 7, 12]"

-- メロディーを生成+変形
d1
$jux (iter 16)
$s "supersaw(11, 16)"
#sustain "{0.1 0.3}%4"
#n "{0 4 5 7 9 12}%11"
|-|n 12 
|+|n "[0, 7, 12]"

-- メロディーを生成+変形+エフェクト
d1
$jux (iter 16)
$s "supersaw(11, 16)"
#sustain "{0.1 0.3}%4"
#n "{0 4 5 7 9 12}%11"
|-|n 12 
|+|n "[0, 7, 12]"
#lpf(range 100 12000 $rand)
#resonance "0.2"
#delay "0.5" #delaytime "0.25"
#delayfeedback "0.7"

-- コード(C Major)
d1
$s "supersaw*4"
#n "c5'maj"

-- コードネーム一覧
-- major maj minor min aug dim major7 maj7 dom7 minor7 min7 
-- dim7 one 1 five 5 plus sharp5 msharp5 sus2 sus4 six 6 m6 
-- sevenSus2 7sus2 sevenSus4 7sus4 sevenFlat5 7f5 m7flat5 
-- m7f5 sevenSharp5 7s5 m7sharp5 m7s5 nine m9 m7sharp9 
-- m7s9 maj9 nineSus4 ninesus4 9sus4 sixby9 6by9 m6by9 
-- sevenFlat9 7f9 m7flat9 m7f9 sevenFlat10 7f10 nineSharp5 9s5 
-- m9sharp5 m9s5 sevenSharp5flat9 7s5f9 m7sharp5flat9 eleven 
-- 11 m11 maj11 elevenSharp 11s m11sharp m11s thirteen 13 m13


-- コード(C Major, G Minor 7)
d1
  $s "supersaw*4"
  #n "c5'maj g5'min7" 

-- コードネームをいろいろ変化させてみる!
d1
  $jux (iter 16)
  $s "supersaw(11, 16)"
  #n "{c5'maj7 c5'sus4 a4'min7 c5'sus2}%3"
  |+| n "[0, 12]"
  #sustain "0.2 0.08"
  #pan (rand)
  #lpf (range 100 8000 $rand)
  #resonance "0.3"

-- コードネームを変数で指定
do
  let chord = "c4'sus4"
  d1
    $jux (iter 16)
    $s "supersaw(11, 16)"
    #n chord
    |+| n "[0, 12]"
    #sustain "0.2 0.08"
    #pan (rand)
    #lpf (range 100 8000 $rand)
    #resonance "0.3"

-- スケール基本 (旋律)
d1
  $ s "supersaw(16, 16)"
  # n (scale "ionian" "[0 1 2 3 4 5 6 7]*2")
  # sustain "0.15"

-- スケール一覧
-- minPent majPent ritusen egyptian kumai hirajoshi iwato
-- chinese indian pelog prometheus scriabin gong shang 
-- jiao zhi yu whole augmented augmented2 hexMajor7 
-- hexDorian hexPhrygian hexSus hexMajor6 hexAeolian major 
-- ionian dorian phrygian lydian mixolydian aeolian minor locrian 
-- harmonicMinor harmonicMajor melodicMinor melodicMinorDesc 
-- melodicMajor bartok hindu todi purvi marva bhairav ahirbhairav 
-- superLocrian romanianMinor hungarianMinor neapolitanMinor 
-- enigmatic spanish leadingWhole lydianMinor neapolitanMajor 
-- locrianMajor diminished diminished2 chromatic 

-- スケールの変化とエフェクト
d1
  $jux (iter 16)
  $ s "supersaw(14, 16)"
  # sustain "0.05 0.3"
  # note (scale "iwato" "{0 .. 7}%9")
  |+| note "[-12, 7, 0]"
  #pan (rand)
  # lpf (range 100 4000 $rand)
  # resonance "0.3"
  # delay "0.7" #delaytime "0.25"

-- スケールを変数で指定
do
  let sc = "yu"
  d1
    $jux (iter 16)
    $ s "supersaw(14, 16)"
    # sustain "0.05 0.3"
    # note ((scale sc "{0 .. 7}%9"))
    |+| note "[-12, 7, 0]"
    |+| note "[-12, 0]"
    #pan (rand)
    # lpf (range 100 4000 $rand)
    # resonance "0.3"
    # delay "0.7" #delaytime "0.25"