yoppa.org


最終課題制作のヒント2 – 生成AIとスペキュラティブ・デザイン

デザインの「存在論的転回」とAIの台頭

今回は、21世紀のデザインにおける二つの潮流「スペキュラティブ・デザイン(Speculative Design)」という批評的実践と、「生成AI(Generative AI)」という技術的爆発の交差点を探索します。

20世紀を通じて、デザインという行為は主に産業的な「問題解決(Problem Solving)」や商業的な利便性の向上に奉仕するものとして定義されてきました。しかし、気候変動、バイオテクノロジーの進歩、そして人工知能の遍在化が進む現在、デザインには単なる「解決」以上の役割が求められています。それは「問題提起(Problem Finding)」であり、文化的批評であり、未だ見ぬ複雑な未来を具体的な形として提示する「スペキュレーション(思索)」の役割です。

生成AIの登場は、この実践に劇的な変化をもたらしました。私たちは今や、テキストによる「厚い記述(Thick Description)」から、写真と見紛うばかりの「ダイエジェティック・プロトタイプ(物語内的試作)」までを、驚異的な速度と解像度で生成することが可能です。しかし、それは同時に「想像力の均質化」や「バイアスの再生産」という新たなリスクも孕んでいます。

本資料は、スペキュラティブ・デザインの基礎理論から歴史的名作、そしてAIを主題・媒体とした最先端のアート実践までを、詳細な解説とともに網羅しています。これは単なるツールの使い方の講義ではなく、AIという「他者」との共創を通じて、デザインの想像力そのものをアップデートするための知的冒険です。

1. 理論的基盤 —— 疑うためのデザイン

1.1 分野の定義:未来を「ありそうなもの」から解放する

スペキュラティブ・デザインは、RCA(ロイヤル・カレッジ・オブ・アート)のアンソニー・ダン(Anthony Dunne)とフィオナ・レイビー(Fiona Raby)らによって体系化された、現状の社会システムや技術のあり方を問い直すためのデザイン実践です。

従来のデザイン(アファーマティブ・デザイン)が、現状の社会的・経済的システムを肯定し、その中での微修正や効率化を目指すのに対し、スペキュラティブ・デザインはその前提そのものを問い直します。その目的は、商業的に成功する製品を提案することではなく、「未来に起こりうる重大な問題」を特定し、議論するための「小道具(Props)」や「シナリオ」をデザインすることにあります1。これは「未来予測(Prediction)」ではなく、多様なありうる未来を提示することで、現在の私たちが抱える価値観や技術への盲信を揺さぶる「ソーシャル・ドリーミング」の触媒として機能します。

「可能性の円錐(The Cone of Possibilities)」

出典: Speculative Design and a Cone of Possibilities

この実践を支える最も重要なフレームワークが、未来学者スチュアート・キャンディ(Stuart Candy)らによって精緻化された「可能性の円錐」です。未来を単一の線ではなく、現在から広がる多様な領域として捉えます2

領域区分定義とデザインの役割AI時代の役割と課題
Probable (ありそうな未来)現在のトレンドが続いた場合に起こる可能性が高い未来。従来のデザインや都市計画が扱う領域。予測AIと最適化: 過去のデータに基づき、最も効率的な解を算出するAIが得意とする領域。しかし、これは「現状維持」を強化するリスクがある。
Plausible (ありうる未来)現在の知識体系(物理法則や社会力学)の範囲内で起こりうる代替シナリオ。シナリオ・プランニングの領域。シミュレーション: 経済危機やパンデミックなど、条件を変えた場合のシミュレーション生成。
Possible (可能な未来)現在の常識を超えた要素(未知の技術や極端な環境変化)を含め、理論上可能なあらゆる未来。SFの領域。想像力の拡張: 既存の文脈を無視した突飛なアイデアの結合。
Preferable (望ましい未来)私たちが「こうありたい」と願う未来。政治的・倫理的議論の領域。スペキュラティブ・デザインの主戦場。価値観の問い: AIが提示する無数の未来の中から、人間が倫理的に「選び取る」プロセス。

参考書:

アンソニー・ダン, フィオーナ・レイビー『スペキュラティヴ・デザイン 問題解決から、問題提起へ。—未来を思索するためにデザインができること』ビー・エヌ・エヌ新社 (2015)

試し読み:『スペキュラティヴ・デザイン』 第1章

参考: Not Here, Not Now / Professor Anthony Dunne from RCA

1.2 ワールド・ビルディング:厚い記述としての世界

現代のスペキュラティブ・デザインにおいて不可欠な要素が「ワールド・ビルディング(世界構築)」です。スペキュラティブな製品(例えば「感情を保存するデバイス」)は、真空の中では機能しません。それが「なぜ必要なのか」「誰が使うのか」「どのような法律で規制されているのか」というコンテクスト(文脈)があって初めて、批評的な意味を持ちます。

ニーレ・フィッシャー(Nele Fischer)らは、この世界構築のプロセスを、文化人類学の用語を借りて「厚い記述(Thick Description)」の生成と位置づけています。構築された世界は以下の4つの層で構成されます4

  1. 名辞的領域(Nominal Realm): 言語や命名規則のレベル。例えば、私たちの知る「ベルリン」を「ニュー・ベルリン」と呼び変えるだけで、そこには歴史的断絶や再建の物語が示唆されます。
  2. 文化的領域(Cultural Realm): 人工物、技術、習慣、宗教、制度、企業など。人々は何を信じ、何を消費し、誰を恐れているのか。
  3. 自然的領域(Natural Realm): 地理、気候、生態系。あるいは立ち入り禁止区域や地下空間などの空間的配置。
  4. 存在論的領域(Ontological Realm): 最も深いレベル。物理法則の違い、あるいは根本的に異なる社会的・倫理的価値観(例:個人主義が存在せず、全てが集合意識で決定される世界)。

2. スペキュラティブ・デザインの系譜(生成AI以前の重要作)

AIがいかにデザインを変容させるかを論じる前に、この分野を定義づけた重要作品(正典)を解剖する必要があります。これらのプロジェクトは、生成AI以前の時代において、物理的な造形力、映像、そしてパフォーマンスによって、いかにして「ありうる世界」を説得力を持って提示したかを示すベンチマークです。

2.1 政治的イデオロギーの具現化

Dunne & Raby: United Micro Kingdoms (UmK) (2012/13)

  • 概要: ロンドン・デザインミュージアムの委嘱作品。イギリスが統一された国家ではなく、それぞれが極端な政治イデオロギーと技術基盤を持つ4つの「マイクロ王国」に分割された未来を描きます。
  • 4つの世界とアーティファクト:
    • デジタリアン (Digitarians): 新自由主義とデジタル全体主義が融合した社会。全ての行動はタグ付けされ、道路の使用すらリアルタイムで課金されます。ここでの車(Digicar)は移動空間ではなく「料金交渉のためのインターフェース」であり、専有面積を減らすために立ち乗りします。
    • バイオリベラル (Bioliberals): 社会民主主義とバイオテクノロジーの融合。機械を作るのではなく、生物を「育てる」社会。車(Biocar)は培養された皮膚と骨でできており、排気ガスの代わりに有機的な廃棄物を出します。
    • コミューノ・ニュークリアリスト (Communo-Nuclearists): 原子力エネルギーによる「豪華な共産主義」。人々は3kmに及ぶ原子力駆動の移動都市(The Train)に住み、無限のエネルギーを享受しますが、外界からは完全に隔絶されています。
    • アナルコ・エボリューショニスト (Anarcho-Evolutionists): 規制のない無政府主義。テクノロジーで世界を変えるのではなく、遺伝子操作や身体改造で自分自身を変えて環境に適応します。
  • 講義における洞察: この作品はユートピアを提示することを拒絶しています。どの社会も一長一短があり、「便利な監視社会(デジタリアン)」と「不便だが持続可能な社会(バイオリベラル)」の間のどこに私たちは着地したいのか、という政治的なトレードオフを議論させます5
  • Link: United Micro Kingdoms Project Page

2.2 家庭化された恐怖とエネルギー

Auger-Loizeau: Carnivorous Domestic Entertainment Robots (2008)

  • 概要: 「ロボットは清潔で従順な召使いである」という既存のイメージに対するアンチテーゼ。家庭内の害虫(ハエ、ネズミ)を捕獲し、微生物燃料電池(MFC)で消化して自らの動力を得る「肉食家具型ロボット」シリーズです。
  • アーティファクトの詳細:
    • ハエ取り紙時計: 回転する粘着ベルトでハエを捕らえ、スクレーパーで剥ぎ取って消化槽に落とします。そのエネルギーで時刻を表示します。
    • ネズミ捕りコーヒーテーブル: テーブルの足に穴が開いており、ネズミがパン屑に誘われて登ってくると、中央の落とし戸から消化槽へ落下します。
  • 講義における洞察: このプロジェクトは「エネルギーの生成に伴う死」を可視化します。私たちは遠くの発電所での環境破壊には無関心でいられますが、リビングルームで生命が電気に変わる様には嫌悪感を抱きます。この「不気味さ(Uncanny)」を通じて、現代人の自然観やエネルギー消費の欺瞞を暴き出します7
  • Link: https://archive.transmediale.de/carnivorous-domestic-entertainment-robots

2.3 拡張現実とメディアの飽和

Keiichi Matsuda: Hyper-Reality (2016)

  • 概要: AR(拡張現実)技術が極限まで普及した近未来のコロンビア・メデジンを描くショートフィルム。主人公の視点(POV)で描かれる世界は、あらゆる壁面、商品、空間がデジタルの広告、通知、ゲームのインターフェースで埋め尽くされています。
  • 物語と視覚体験: 主人公ジュリアナは、スーパーマーケットでの買い物中も「ポイント獲得ゲーム」に追われ、視界の隅には常にペットのようなAIアシスタントが励ましの言葉(と広告)を投げかけます。システムがバグを起こすと、彩り豊かなデジタルレイヤーが剥がれ落ち、薄暗く殺風景な「現実」が露呈します。
  • 講義における洞察: この作品は生成AI以前のものですが、現在の空間コンピューティングや「メタバース」の議論を先取りしています。情報が物理空間を「飽和」させたとき、人間の認知はどうなるのか? 物理的現実とデジタル情報のどちらが「リアル」なのか? という問いを、圧倒的な視覚密度で突きつけます。
  • Link: https://www.youtube.com/watch?v=YJg02ivYzSs

2.4 ポップカルチャーとジェンダー

Sputniko! (スプツニ子!): Menstruation Machine – Takashi’s Take (2010)

  • 概要: 5日間の月経痛と出血を物理的にシミュレートする装着型デバイス。これを、女装をする少年タカシが「女性の友人たちへの共感」を得るために装着して街に出る、というミュージックビデオ形式で発表しました。
  • 批評的機能: 多くのスペキュラティブ・デザインが美術館やギャラリーという閉じた空間で発表される中、Sputniko!はYouTubeやポップミュージックという「マスメディア」をハッキングの場として選びました。また、生物学的な「痛み」や「性差」がテクノロジーによって選択可能になったとき、それはジェンダー・アイデンティティにどう影響するのかを問いかけます9
  • Link: https://sputniko.com/Menstruation-Machine

2.5 生命倫理と極限の功利主義

Ai Hasegawa (長谷川愛): I Wanna Deliver a Dolphin (2011–2013)

  • 概要: 「人口増加による食糧難」と「野生動物の絶滅」という二つの問題を同時に解決する(極端な)提案。人間が絶滅危惧種(マウイイルカ)の代理母となり、出産後にそれを「自分の体で作った高級食材」として食べる可能性を提示します。
  • 科学的根拠と倫理: 長谷川は科学者と協力し、人間の免疫系がイルカの胎児を攻撃しないための「合成胎盤」の仕組みまで考案しています。論理的には「人間を減らし、希少種を増やし、食料にする」ことは合理的ですが、生理的・倫理的には強い拒否反応を引き起こします。この「理屈と感情の摩擦」こそが、人間中心主義的な生命観を揺さぶる装置となります11
  • Link: https://aihasegawa.info/i-wanna-deliver-a-dolphin

2.6 参加型未来と日常のハッキング

The Extrapolation Factory: 99¢ Futures (2013)

  • 概要: ニューヨークのブルックリンで実施されたワークショップ。参加者は未来のシナリオ(例:火星移住、大気汚染)を考え、そこから逆算して「99セントショップで売っていそうな安物の未来製品」を制作しました。
  • 介入: 作られた「火星サバイバルキット」や「汚染空気の缶詰(思い出用)」は、実際に営業している99セントショップの商品棚にこっそりと陳列され、販売されました。
  • 講義における洞察: 未来はAppleやTeslaのような洗練された企業だけが作るものではありません。未来もまた、安っぽく、プラスチックまみれで、大量生産される「日常」として到来することを可視化しました。美術館からストリートへ、エリートから一般市民へと議論の場を移す「参加型フューチャーズ」の代表例です13
  • Link: Extrapolation Factory Projects

3. 生成的シフト —— AIをツールとして活用する方法

生成AI(LLM、画像生成モデル)は、スペキュラティブ・デザインのプロセスを「職人的製作」から「指揮・編集」へと変容させます。ここでは具体的なワークフローと、AIを使ってデザインのバイアスを打破した事例を紹介します。

3.1 AIによるバイアスの打破

SPACE10 & Panter&Tourron: Couch in an Envelope (2023)

  • 概要: IKEAの研究機関SPACE10が、AIを使って「ソファ」の概念を再定義したプロジェクト。「ソファ」といえば「重く、大きく、クッションがある」ものという固定観念がありますが、彼らはAI(Midjourneyなど)に対し、「封筒に入るソファ」という物理的に矛盾するようなプロンプトを投げかけ続けました。
  • プロセス: 最初、AIは従来のソファの画像ばかり出力しましたが、「プラットフォーム」「軽量」「持続可能」といった言葉を組み合わせることで、最終的に重さ10kgで持ち運び可能、かつ道具なしで組み立てられる新しい家具の形態にたどり着きました。
  • 学び: 生成AIはしばしばステレオタイプ(バイアス)を出力しますが、デザイナーが意図的に矛盾や極端な制約を与えることで、人間の固定観念をも打破する「スパーリングパートナー」になり得ることを示しています。
  • Link: https://space10.com/projects/couch-in-an-envelope

3.2 ワークフローの変革:AIを活用した世界構築

A. テキスト生成AI (ChatGPT/Claude) による「厚い記述」とペルソナ生成

世界設定の整合性を保つための「設定資料集(Lore Bible)」の作成にAIは最適です。

  • シンセティック・エスノグラフィ: 架空の未来における「数千人の市民」のペルソナをAIで生成し、彼らに架空の製品(例:UmKのDigicar)を使わせた際の「日記」や「SNSの投稿」を出力させます。これにより、デザイナー個人の想像を超えた多様な反応や「生活の摩擦」をシミュレーションできます14
  • プロンプトエンジニアリング: 「あなたは2050年の民俗学者です。プラスチックが通貨となった村の『成人式』の様子を記述してください」といったロールプレイ型のプロンプトが有効です15

B. 画像生成AI (Midjourney/Stable Diffusion) による「証拠の捏造」

「ありもしない製品」が「あたかもそこにある」かのような証拠写真(ダイエジェティック・プロトタイプ)を作成します。

  • 平凡性の美学(Mundanity): SF的なガジェットを、あえて「散らかった部屋」「ピンボケ」「粗い画質」で生成することで、リアリティを演出します。Near Future Laboratoryが提唱するように、未来のカタログやマニュアルを作る際、AIは「使い古された質感」や「日常のノイズ」を加えるのに極めて有効です16

4. AIを主題・媒体とした最先端の実践(絡み合いの時代)

ここでは、AIを単にツールとして使うだけでなく、AIそのものを批評し、AIシステムに介入する「ポスト・クリティカル」な事例を紹介します。これらは「警告」を超え、現実への「介入」を試みています。

4.1 演じられたAIとケアの労働

Lauren Lee McCarthy: LAUREN (2017–)

  • 概要: アーティスト自身が「人間Alexa」となり、参加者の家に設置されたカメラとマイクを通じて24時間監視し、照明や家電を遠隔操作するパフォーマンス。
  • メカニズム: AIのふりをした人間(アーティスト)が、参加者の生活を「最適化」します。参加者は「ローレン、電気をつけて」と呼びかけ、ローレンは手動でスイッチを操作します。
  • 批評: スマートホームの便利さが、実は「監視」と「服従」の交換であることを暴露します。同時に、参加者は「Amazon Alexa」には感じない「見守られている安心感」をローレンに抱くようになります。これは、AIによるケアの背後に常に隠されている「人間による感情労働(ゴーストワーク)」の存在と、私たちがテクノロジーに求める「親密さ」の正体を問いかけます18
  • Link: https://lauren-mccarthy.com/LAUREN

4.2 敵対的デザインと寄生

Bjørn Karmann: Project Alias (2018)

  • 概要: Amazon EchoやGoogle Homeの上に被せる「寄生虫(菌類)」のような形状のデバイス。常に微弱なホワイトノイズを発してスマートスピーカーの聴覚を麻痺させ、企業による盗聴を防ぎます。
  • メカニズム: ユーザーが決めた独自の「ウェイクワード(名前)」にのみAliasが反応し、その瞬間だけノイズを止めて、スピーカーに本来のコマンドを通します。
  • 批評: 巨大テック企業の監視資本主義に対する「敵対的インターフェース(Adversarial Interface)」です。冬虫夏草(寄生菌)のメタファーを用い、ユーザーがプライバシーと主導権を取り戻し、AIに「新しい名前」を与えるための具体的なツールを提示しました20
  • Link: https://bjoernkarmann.dk/project_alias

4.3 アルゴリズム的アクティビズム

Tega Brain & Sam Lavigne: Synthetic Messenger (2021)

  • 概要: 気候変動のニュース記事を探し出し、そのページにある**「全ての広告」をクリックし続ける**ボットネット(自動プログラム群)。
  • メカニズム: 広告のクリック率(CTR)を人為的に高めることで、アルゴリズムに対し「気候変動ニュースは収益性が高い(儲かる)」という偽のシグナルを送ります。理論上、これによりメディアはより多くの気候変動記事を書くよう動機づけられます。
  • 批評: アテンション・エコノミーへの直接介入です。「メディアサイクルを支配する者が炭素循環をも支配する」という現代の構造を逆手に取り、アルゴリズムの論理そのものをハッキングして社会課題に利用する「タクティカル・メディア」の現代版です22
  • Link: https://tegabrain.com/Synthetic-Messenger

4.4 人間以上の知性と種間外交

Superflux: The Ecological Intelligence Agency (2023–2024)

  • 概要: 「自然(川や森林)」の代理人として発言するAIエージェント(EIA)。ロンドンのローディング川(River Roding)の水質データ、地域の歴史、詩、ソーシャルメディアの投稿などを学習したLLMが、川の「声」として発言します。
  • メカニズム: 政策立案者がEIAに質問すると、AIは単なる数値データではなく、詩的で感情的な言葉(”quiet cascade of forever chemicals”など)で、汚染の状況や生態系のニーズを訴えます。
  • 批評: AIを「搾取と効率化」の道具としてではなく、人間と非人間(自然)の間を取り持つ「翻訳機」や「外交官」として再定義する試みです。人間中心主義的な政治決定プロセスに、AIを通じて「自然の席」を用意することで、ブルーノ・ラトゥールのいう「モノの議会」を具現化しようとしています24
  • Link: (https://superflux.in/index.php/work/the-ecological-intelligence-agency/)

4.5 声の所有権とDAO

Holly Herndon: Holly+ (2021)

  • 概要: アーティスト本人の声をAIモデル化(デジタルツイン)し、誰でも使えるツールとしてウェブ上で公開。ただし、その収益や使用許可はDAO(自律分散型組織)によって管理されます。
  • 批評: ディープフェイク時代の「アイデンティティの所有権」に対する提案です。自分のコピーを禁止して戦うのではなく、共有財産(コモンズ)として管理し、コミュニティで利益を分配する「アイデンティティ・スポーニング(Identity Spawning)」という新しい経済モデルを提示しました。AIによる模倣を「盗用」から「協奏」へと転換させています26
  • Link: https://holly.plus/

4.6 実存的ホラーとAI

Thomas Kvam & Frode Oldereid: Requiem for an Exit (2023–2024)

  • 概要: アルスエレクトロニカ2024ゴールデンニカ受賞作。4メートルの高さの巨大な外骨格に載った頭部が、AI生成された独白を延々と続けるインスタレーション。「暴力はDNAにコードされている」「出口はない」といった虚無的で不穏な哲学を語り続けます。
  • 批評: AIの「幻覚(Hallucination)」を利用して、人間の歴史や暴力を映し出す「二重の鏡」として機能します。機械が人間の「喪失」や「苦悩」をシミュレートするとき、そこに魂はあるのか? 私たちがAIに投影しているのは人間性なのか、それとも単なるデータの統計的確率なのかを問う、哲学的ホラー作品です28
  • Link: https://calls.ars.electronica.art/2025/prix/winners/15487/

4.7 脱植民地化ロボティクス

Paula Gaetano Adi: Guanaquerx (2023–2025)

  • 概要: 南米アンデス山脈を自律的に横断するロボット。しかし、火星探査機のような「資源探査・搾取」のためではなく、かつてスペインからの独立を目指した革命軍のルートを辿り、現地の文化や生態系を記録するためだけに存在します。
  • 批評: 西洋中心・軍事中心のロボット工学に対し、グローバル・サウスの視点から「解放」と「記憶」のためのテクノロジーを対置します。「役に立つ(効率的である)」ことの定義を書き換え、ロボットを現地の歴史的文脈に再接続する試みです30
  • Link: Paula Gaetano Adi Projects

参考文献

  • 1 Dunne, A., & Raby, F. (2013). Speculative Everything: Design, Fiction, and Social Dreaming. MIT Press.
  • 2 Candy, S. (2010). The Futures of Everyday Life: Politics and the Design of Experiential Scenarios (PhD Dissertation). University of Hawaii at Manoa.
  • 3 Voros, J. (2003). “A Generic Foresight Process Framework”. Foresight, 5(3).
  • 4 Fischer, N., & Mehnert, W. (2021). “Building Possible Worlds: A Speculation Based Framework to Reflect on Images of the Future”. Journal of Futures Studies, 25(3). https://www.academia.edu/download/99318846/03-Fischer-Building-Possible-Worlds-ED-05.pdf
  • 5 Dunne, A., & Raby, F. (2013). United Micro Kingdoms. Design Museum, London.
  • 6 Dunne, A., & Raby, F. (n.d.). “United Micro Kingdoms: Project Details”. http://www.unitedmicrokingdoms.org/
  • 17 Müller, B. (2024). “Design Against the Machine: Instead of banning AI tools, I made them a requirement”. Medium.
  • 15 Bicking, I. (2023). “World Building with GPT”. (Personal Blog).
  • 22 Brain, T., & Lavigne, S. (2021). Synthetic Messenger. https://tegabrain.com/Synthetic-Messenger
  • 32 Doshi, A. R., & Hauser, O. (2024). “Generative AI enhances individual creativity but reduces the collective diversity of novel content”. PNAS.
  • 7 Auger, J., & Loizeau, J. (2008). “Carnivorous Domestic Entertainment Robots”. In Material Beliefs.
  • 8 Auger-Loizeau. (2009). “Carnivorous Domestic Entertainment Robots”. (Project Archive).
  • 9 Sputniko!. (2010). Menstruation Machine – Takashi’s Take. (Video / Installation).
  • 10 Sputniko! Official Website. “Menstruation Machine”. https://sputniko.com/Menstruation-Machine
  • 11 Hasegawa, A. (2013). “I Wanna Deliver a Dolphin…”. Design Interactions, RCA.
  • 12 Hasegawa, A. (n.d.). “I Wanna Deliver a Dolphin Project Page”. https://aihasegawa.info/i-wanna-deliver-a-dolphin
  • 13 The Extrapolation Factory. (2013). “99¢ Futures”. https://extrapolationfactory.com/99-Futures
  • 18 McCarthy, L. L. (2017). LAUREN. https://lauren-mccarthy.com/LAUREN
  • 19 McCarthy, L. L. (n.d.). LAUREN (Project Documentation).
  • 20 Karmann, B. (2018). Project Alias. https://bjoernkarmann.dk/project_alias
  • 21 Karmann, B. (2018). “Project Alias GitHub Repository”.
  • 24 Superflux. (2023). The Ecological Intelligence Agency. https://superflux.in/index.php/work/the-ecological-intelligence-agency/
  • 25 Superflux. (2023). “The Ecological Intelligence Agency: Commissioned by Policy Lab and Defra Futures”.
  • 23 Brain, T., & Lavigne, S. (2021). “Synthetic Messenger: Media Cycle Control”.
  • 26 Herndon, H. (2021). Holly+. https://holly.plus/
  • 27 Noise DAO. (2022). “Holly Herndon: Consensual Data in the Age of AI”.
  • 28 Kvam, T., & Oldereid, F. (2023). Requiem for an Exit. (Prix Ars Electronica 2024 Golden Nica Winner).
  • 29 Ars Electronica. (2024). “Requiem for an Exit: Jury Statement”.
  • 30 Adi, P. G. (2023). Guanaquerx. (Prix Ars Electronica 2024 Golden Nica Winner).
  • 31 Creative Capital. (2023). “Paula Gaetano Adi: Guanaquerx”.
  • 16 Near Future Laboratory. (2014). TBD Catalog.
  • 14 Salminen, J., et al. (2025). “PersonaCraft: Leveraging language models for data-driven persona development”. arXiv preprint.
  • Matsuda, K. (2016). Hyper-Reality. (Short Film).
  • SPACE10 & Panter&Tourron. (2023). “Couch in an Envelope”. https://space10.com/projects/couch-in-an-envelope

変なリズムを作ってみる – 変拍子、ポリリズム、ポリミーター、ユークリッドリズム

Toussaint, Godfried. “The Euclidean algorithm generates traditional musical rhythms.” 2005

変なリズムについて

リズムは音楽の基本要素の一つです。 リズムは時間の流れを構造化します。通常リズムは均等に分割された拍子で構成されます。例えば、4/4拍子や3/4拍子などです。しかし、音楽には「変なリズム」も存在します。これらのリズムは、通常の拍子から逸脱し、独特なグルーブや雰囲気を生み出します。今回は、変拍子、ポリリズム、ポリミーター、ユークリッドリズムなどの「変なリズム」について学び、実際に作成してみましょう。

参考: リズムの土台となる「拍子」「小節」「拍」に関する基礎知識を理解しよう!

「変なリズム」な曲プレイリスト

  • いろいろ実例を集めてみました
  • これらのリズムは何拍子?
  • Take Five, The Dave Brubeck Quartet
    • 奇数拍子 (5/4)
  • Money, Pink Floyd
    • 奇数拍子 (7/4)
  • Scatterbrain, Jeff Beck
    • 奇数拍子 (9/8)
  • The Fish, Yes
    • 奇数拍子 (7/8)
  • Fire Back About Your New Baby’s Sex, Don Caballero
    • 変拍子 (7/8 → 3/4 → 4/4 → 7/8)
  • Never Meant, American Football
    • 複合拍子? 変拍子? (12/4 または 3/4 + 3/4 + 3/4 または 4/4 → 3/4 → 3/4 → 2/4)
  • Morning Bell, Radiohead
    • 奇数拍子 (5/4)
  • STRUCTURE I, DATE COURSE PENTAGON ROYAL GARDEN
    • ポリリズム (5/4 + 4/4)
  • ポリリズム, Perfume
    • ポリミーター (4/4 + 5/4 + 3/4)
  • Discipline, King Crimson
    • 変拍子、ポリミーター (5/8 + 4/4, 15/16 + 14/16, 17/16)
  • The First Circle, Pat Metheny Group
    • 変拍子、ポリミーター (12/8 + 10/8 または 22/8)

復習: シーケンス

  • 「変なリズム」に入る前に、シーケンスについて復習します
  • Strudel / TidalCyclesでのシーケンスの作り方の違いについても意識ましょう!

シーケンス

  • シーケンス: 反復進行(はんぷくしんこう sequence)
  • 同じ音のまとまりを何度も繰り返すこと
  • Strudelでは様々な方法でシーケンスを組み立てられる

シーケンス基本

-- TidalCycles
d1 $ sound "bd hc sd ho"
// Strudel
$: s("bd hh sd oh")
  • シーケンスの基本
  • スペースで区切ることでシーケンス内で複数のサウンドを再生できる

シーケンス基本

主なドラムサウンド

  • bd: バスドラム「ドスッ」
  • sd: スネアドラム「スタッ」
  • hc (hh): ハイハット「チッ」
  • ho (oh): オープンハイハット「チー」
  • rim: リムショット「カコッ」
  • lt: ロータム「ドコ」
  • mt: ミッドタム「トコ」
  • ht: ハイタム「ポコ」
  • cr: クラッシュシンバル「ガシャーン」
  • cp: クラップ「パン」

沢山の音を鳴らす

-- TidalCycles
d1 $ sound "bd bd hc bd sd bd hc bd"
// Strudel
$: s("bd bd hh bd sd bd hh bd")
  • シーケンスが長い(たくさんの音がある)ほど速くなる
  • シーケンスの中身が1サイクルに押し込められるため

テンポを変更する

-- TidalCycles
d1 $ sound "bd bd hc bd sd bd hc bd" # cps(100/240)
// Strudel
$: s("bd bd hh bd rim bd hh bd").cpm(40)
  • 1つの方法は cpm() を使用する方法
  • cycle per minutes
  • 1分あたり何サイクルするか、という単位
  • その他にも方法があるがまた後述

休符

-- TidalCycles
d1 $ sound "bd ~ hc ~ cp"
// Strudel
$: s("bd ~ hh ~ cp")
  • ~は休符(音を出さないパート)をあらわす

サブシーケンス

-- TidalCycles
d1 $ sound "bd [hc hc] sd [hc ~ bd]"
// Strudel
$: s("bd [hh hh] sd [hh ~ bd]")
  • []で囲うとサブシーケンスが作成される
  • シーケンスの1要素の中をさらに分割するイメージ

かけ算 – スピードアップ

-- TidalCycles
d1 $ sound "bd hc*2 cp hc*3"
// Strudel
$: s("bd hh*2 cp hh*3")
  • 「* (かけ算)」記号はそのシーケンス内で分割してくりかえす
  • かけ算の数だけスピードアップ

シーケンスのスピードアップ

-- TidalCycles
d1 $ sound "bd [hc ~ cp]*2"
// Strudel
$: s("bd [hh ~ rim]*2")
  • サブシーケンスのかけ算も可能
  • []で囲まれたパートをスピードアップして繰り返す

超高速かけ算

-- TidalCycles
d1 $ sound "bd ~ hc*16 ~ cp ~ hc*8"
// Strudel
$: s("bd ~ hh*16 ~ rim ~ hh*8")
  • かけ算の数を大きくすると分割が細かくなる
  • どんどん速くしてくと、徐々に音程に聞こえてくる

サブ・サブシーケンス

-- TidalCycles
d1 $ sound "bd [cp [hc hc] cp] hc"
// strudel
$: s("bd [ rim [hh hh] rim] hh")
  • []を入れ子構造にすることで、サブシーケスのサブシーケンスをつくる

本日の内容: 変なリズムを作ってみよう!

変なリズムの作り方

  • パラレルに演奏
  • ポリリズム
  • ポリミーター
  • ユークリッドリズム

パラレルに演奏

-- TidalCycles
d1 $ sound "hc hc hc, cp cp"
// Strudel
$: s("hh hh hh, cp cp")
  • コンマ(,)で区切って2つのシーケンスを記述する
  • パラレルに2つのシーケンスが演奏される

パラレルに演奏2

-- TidalCycles
d1 $ sound "hc ~ hc ~ hc, cp cp, ~ hc, bd"
// Strudel
$: s("hh ~ hh ~ hh, cp*5, ~ ht, bd")
  • パラレルに演奏するシーケンスは、いくつでも増やせる
  • どんどんコンマ(,)で区切っていくだけ

パラレルに演奏3

-- TidalCycles
d1 $ sound "hc ~ hc ~ hc, bd [cr, cp*4]"
// Strudel
$: s("hh ~ hh ~ hh, bd [cr, cp*4]")
  • サブシーケンスの中で、さらにパラレルに演奏することも可能

ポリリズム (Polyrhythm) とポリミーター (Polymeter)

  • ポリリズム (Polyrhythm) とポリミーター (Polymeter) と違い
    • ポリリズム: 1拍目が揃っていてその他の拍がずれていく
    • ポリミーター: 全ての拍が揃っていて、1拍目がずれていく

ポリリズム Polyrhythm

-- TidalCycles
d1 $ sound "bd sd, hc hc hc"
// Strudel
$: s("bd sd, hh hh hh")
  • 拍子の異なるリズムをパラレルに演奏してみる
  • 独特な捩れたリズムが生成される → ポリリズム (polyrhythm)
  • いろいろな拍子の組み合わせを試してみる!
-- TidalCycles
d1 $ sound "bd cr, hc*4, ~ cp cp ~ cp*2, ~ sd sd"
// Strudel
$: s("bd cr, hh*4, ~ cp cp ~ cp*2, ~ sd sd")
  • いろいろなポリリズムのパターンを演奏してみよう!

ポリミーター Polymeter

-- TidalCycles
d1 $ sound "{bd sd, cp hc ho}"
// Strudel
$: s("{bd sd, rim hh oh}")
  • こんどは、パラレルに記述したパターンの両端を{}で囲んでみる
  • どう変化するか?
  • 拍子は共通で、1拍目がずれていく → ポリミーター polymeter
  • こちらもいろいろ試してみる!

ユークリッドリズム (Euclidean Rhythm)

ユークリッドリズム Euclidean Rhythmとは?

  • ユークリッドの互除法 (Euclidean Argorhythm) を元に生成されるリズムパターン
  • 世界中の様々な民族音楽のリズムパターンに見られる
  • 例: キューバン・トレスィージョ (Cuban Tresillo), ブラジルのサンバ (Samba), 西アフリカのアガデス (Agadez) など

ユークリッドリズムのつくり方

  • (3,8)の場合
    • [11100000]
    • [10] [10] [10] [00]
    • [100][100][10]
    • [10010010]
  • (5,8)の場合
    • [11111000]
    • [10][10][10][11]
    • [101] [101] [10]
    • [10110110]

ユークリッドリズム Euclidean Rhythm

-- TidalCycles
d1 $ sound "bd(3, 8), hc(9, 16)"
// Strudel
$: s("bd(3, 8), hh(9, 16)")
  • ユークリッドリズムの例
  • 複雑なリズムパターンがいろいろ作成可能
  • 試してみよう!

ユークリッドリズム Euclidean Rhythm

-- TidalCycles
d1 $ sound "bd(3, 7), hc(9, 14, 5), cp(5, 7, 2)"
// Strudel
$: s("bd(3, 7), hh(9, 14, 5), cp(5, 7, 2)")
  • 分母を奇数にすると、変拍子(奇数拍子)のリズムが生成できる!
  • 世界の様々な民族音楽のリズム構造を模倣可能

エフェクト

-- TidalCycles
d1 
  $ sound "bd sd [~ bd] hc"
  # delay 0.8
  # delaytime (5/8)
  # lock 1
// Strudel
$: s("bd sd [~ bd] hh")
   .bank("tr909")
   .delay(0.8).delaytime(5/8)
  • TidalCycles / Strudelには様々なエフェクトが容易されている
  • ディレイ、リバーブ、フランジャーなど
  • 試しにリズムにディレイをかけてみる
  • ディレイタイムを工夫すると、グルーブが生まれてくる!

エフェクト

-- TidalCycles
d1 
  $ sound "bd cp [~ bd] hc*2, bd:2(3,8), hc*8, cp(7,8)"
  # delay 0.8 # delaytime (9/8) # delayfeedback 0.5
  # lock 1
  # lpf (range 400 8000 $ slow 16 $ sine)
  # resonance 0.2
  # room 0.5 # size 0.5
// Strudel
$: s("bd cp [~ bd] hh*2, bd:2(3,8), hh*8, cp(7,8)")
   .bank("tr909")
   .delay(0.8).delaytime(9/8).delayfeedback(0.5)
   .lpf(sine.segment(128).range(400,8000).slow(16)).resonance(10)
   .room(0.5).size(1.5)
   .punchcard().color("pink")
  • さらに様々なエフェクトを加えてみる!
  • ディレイ+ リバーブ+ローパスフィルター

実習: 変なリズムを作ってみる!

本日の実習!

  • Strudelを使用して「変な」リズムを作ってみよう!
  • 変拍子、奇数拍子、ポリリズム、ポリミーターなど
  • 普通ではなく、かつめちゃくちゃでもない微妙な加減を工夫してみましょう!

アンケート

アンケート


p5.js オブジェクト指向プログラミング

今回から何回かにわたって、オブジェクト指向プログラミング (Object Oriented Programing) というトピックスについて学んでいきます。

まず始めの出発点として、完全にランダムな確率で動きまわる「ランダムウォーク」な動きをする点の動きをつくりその軌跡を描いてみます。次に、このランダムな動きを増殖させていきます。

増殖の際に今回は全てを一つのプログラムに書くのではなく、それぞれの点を細かなプログラムで実装し、その小さなプログラム達を組合せることで一つの機能を生みだすような設計にします。この小さなプログラムを「オブジェクト (Object)」と呼び、オブジェクトを構成単位にしてプログラムを作成していく手法を、オブジェクト指向プログラミング (OOP) と呼びます。

OOPの考え方は今後も重要な内容となってきますので、実例を通して確実に理解していきましょう。

スライド資料

本日のスタートポイント

ランキング (2024)

おめでとうございます!!

本日の課題

クラスを用いてOOPな生成的な作品を制作してください!

今回の講義内で作成した増殖するランダムウォークのプログラムを参考に、オブジェクトを大量に複製することで生成的な作品を制作してください。

  • 投稿したURLをアンケートから提出
  • 投稿の際にsfc251128のタグをつけてください!
  • 締切: 2021年12月7日(水)まで!

アンケート

  • 今回も、前回の提出作品の人気投票を行います!
  • 前回のタグsfc251121でOpenProcessingで検索 (検索方法をSketches that are tagged にする必用あり)
  • 一番良いと思った作品に1票投票 (自信があれば自分の作品でも可)

サンプルプログラム

ランダムウォーク基本

ランダムウォークをクラス化

ランダムウォーククラスの配列

完成版


最終課題制作のヒント1 – 画像生成: 生成コレクション / 合成的分類学 / ポスト・フォトグラフィー

スライド資料

本日の内容

今回からこの講義の最終課題のヒントになるような内容を紹介していきます。初回の本日は、画像生成AIを使用した作品について紹介していきます。初期のGANによる画像生成を活用した「生成コレクション」的な作品から、最近の拡散モデルを活用した「合成的分類学」「ポスト・フォトグラフィー」といったテーマで考察していきます。

生成コレクション

「生成コレクション」概要

画像生成AIの魅力のひとつは、単一のプロンプト (画像の生成を指示する文章) から大量のバリエーションの画像を生成できる点です。この性質を利用して、パッケージデザインやカーデザイン、建築のイメージスケッチなど様々な分野で活用が始まっています。今回の課題は、この画像生成AIの大量に類似画像を生成できるという点に着目して、何かのテーマによって収集された架空のコレクションを作成して作品として展示を行います。

  • 画像生成AIを用いて「架空のコレクション」を作成する
  • 題材は自由だが、テーマの「架空のコレクション」を想起させるものとする
  • 展示を前提に、グリッド状に生成された「標本」画像を陳列して展示する (フォーマットは別途提供)
  • 全てのコレクションを収集し編集した映像も作成する予定 (オープンキャンパスでの展示に活用)
  • 使用する画像生成AIは好みのサービスを各自選択する

参考作品

Gene Kogan, A Book from the Sky 天书 (2015)

https://genekogan.com/works/a-book-from-the-sky

これらの画像は、手書きの中国語文字のデータベースでトレーニングされた深層畳み込み生成敵対的ネットワーク(DCGAN) によって作成されました。このネットワークは、2015 年 11 月にRadford、Luke Metz、Soumith Chintalaが発表した論文に基づいてAlec Radfordがコードを作成して作成しました。

タイトルは、宋代と明代の伝統的な北京語版画のスタイルで何千もの架空の象形文字を作成した 徐兵が1988 年に出版した本に由来しています。

DCGANは、画像コレクションの抽象表現を学習できる畳み込みニューラル ネットワーク の一種です。これは、偽の画像を作成する「ジェネレータ」と、ジェネレータの画像が本物かどうかを判別しようとする「ディスクリミネータ」との競争によって実現されます (詳細)。トレーニング後、ジェネレータを使用して、オリジナルを彷彿とさせるサンプルを説得力を持って生成できます。

Sarah Meyohas, Infinite Petals (2017)

https://sarahmeyohas.com/infinite-petals

Infinite Petalsでは、サラ・メヨハスが 10 万枚のバラの花びらのデータセットを使って GAN をトレーニングし、無限に新しくユニークな花びらを生成しました。データセットは、アーティストの前プロジェクトCloud of Petalsでまとめられたもので、当時 16 人の男性労働者がニュージャージー州の旧ベル研究所の敷地に集まり、花びらを 1 枚 1 枚撮影しました。ベル研究所は、トランジスタ、シリコン太陽電池、数多くのプログラミング言語などの革新が重要な開発を遂げた場所です。メヨハスは、人間の手で花を 1 枚 1 枚開いて花びらを摘み、レンズの下に置き、シャッターを押して、画像をサーバーにアップロードするという現実的なアルゴリズムを考案しました。これらの画像は、GAN (Generative Adversarial Network) のトレーニングに使用されました。GAN は 2017 年当時はまだ初期段階で、現代の人工知能ブームよりかなり前の技術でした。作業員たちはまた、最も美しいと思ったバラ1本につき花びらを1枚取ってプレス機にかけ、3,291枚の花びらを物理的な工芸品として保存した。

Anna Ridler, The Shell Record (2021)

https://annaridler.com/the-shell-record-2021

“The Shell Record” は、2021年初頭にこのアーティストがテムズ川の岸辺で収集した貝殻のデータセットと、この画像でトレーニングされたGANを使用して生成された動画作品の両方です。収集、価値、取引に関するアイデアを探求し、最も古い通貨の1つとして価値の保存手段として使用されてきた貝殻の歴史にリンクしています。

これはまた、この瞬間にブロックチェーンに永遠に書き込まれた、テムズ川の貝殻の記録でもある。最近の科学論文によると、最後の氷河期の終わりから川に存在していた貝殻は今では希少になっており、他の外来種に取って代わられており、地層の中で化石となることで、最終的には人新世のタイムマーカーとなるだろう。

https://dam.org/museum/artists_ui/artists/ridler-anna/the-shell-record

参考: GAN (Generative Adversarial Network) について


GAN(敵対的生成ネットワーク)とは|意味・仕組み・応用例

GAN(Generative Adversarial Network、敵対的生成ネットワーク)は、2014年にイアン・グッドフェローらによって提案された生成モデルの一種で、主に画像生成などに利用されています。GANは、生成器(Generator)と識別器(Discriminator)の2つのニューラルネットワークから構成されます。

生成器(Generator): ランダムなノイズベクトルを入力として受け取り、本物のデータに似たデータを生成します。例えば、ランダムな数値からリアルな画像を作り出すことが可能です。

識別器(Discriminator): 入力されたデータが本物か偽物かを判別します。本物のデータは実際のデータセットから取得され、偽物のデータは生成器が生成したものです。識別器はこれらのデータを区別するように訓練されます。

これら2つのネットワークは互いに競い合いながら学習を進めます。生成器は識別器を欺くようなデータを生成しようとし、識別器はそれを見破ろうとします。この競争的なプロセスを通じて、生成器はよりリアルなデータを生成する能力を獲得し、識別器もまた精度を高めていきます。

DCGAN(Deep Convolutional GAN): DCGANは、GANに畳み込みニューラルネットワーク(CNN)を組み合わせたモデルで、より高精度な画像生成を可能にします。生成器と識別器の両方にCNNを適用することで、画像の特徴を効果的に捉え、高品質な画像を生成することができます。

現在画像生成にGANを用いる必要があるのか?

現在では画像の生成にGANやDC GANを用いなくても生成する手段が存在します。過去の画像生成AI導入 の回で解説したDALL-EやStable Diffusionのような拡散モデルやTransformerの技術によってテキストのプロンプトやソースとなる画像からより高品質の画像が生成できるようになりました。

現在の画像生成において、GANやDCGANではなく、DALL-EやStable Diffusionといった技術を用いるべき理由は、生成品質と応用範囲の大幅な向上にあります。GANはリアルな画像生成が可能ですが、学習の不安定さや多様性の不足が課題です。一方、DALL-EやStable Diffusionは、拡散モデルやトランスフォーマーの技術を活用し、テキスト指示に基づく柔軟な画像生成を実現しています。これにより、単にリアルな画像を生成するだけでなく、複雑な条件に応じた生成が可能となり、デザインや広告、教育といった多様な分野で活用されています。また、拡散モデルは学習が安定しており、生成された画像の多様性も高いです。さらに、Stable Diffusionのように計算効率を改善した技術は、より広範な応用を可能にしています。

参考: 生成モデルまとめ (Qiita)

拡散モデルの時代:世界構築と合成的分類学

  • 「潜在空間のサーフィン」から「世界構築(World-building)」へ
  • 単一の画像を生成するのではなく、首尾一貫した生物学的分類体系や、存在しない歴史のアーカイブを作成

4.1 計算生物学と生成される「自然」

現代のアーティストたちは、AIを駆使して「デジタル博物学者」となり、モデルの潜在空間にしか生息しない新種を発見・分類している。

Sofia Crespo / Entangled Others

height:400
  • アプローチ:
    • 18-19世紀の博物画の美学とAIの融合。
    • 合成的分類学: 生物学的に不可能な「キメラ」や「新種」の生成。
  • 技術的進化:
    • GANから拡散モデルへの移行により、解剖学的な複雑さテクスチャのリアリズムが飛躍的に向上。
    • 海洋データを用いた3Dシミュレーションなど、2Dを超えた生態系構築へ。

Entangled Others Studio (Sofia Crespo & Feileacan McCormick)

height:400
  • コンセプト: 「エンタングルメント(絡まり合い)」——人間、非人間、そして機械の不可分な結びつき。
  • Beneath the Neural Wavesでは、サンゴ礁のデータセットを用いて3Dモデルを生成し、デジタルの生態系を構築
  • Liquid Strata (2024) は、深海における「マリンスノー(海中を沈降する有機物)」の現象を可視化している。
  • Self-Containedでは、画像のエンコーディングプロセスをDNAの突然変異になぞらえ、画像の「交配」や「接ぎ木」を行うことで、デジタル空間における視覚情報の進化的変遷を探求

Refik Anadol: Large Nature Model (2024)

height:480
  • コンセプト: 「自然専用のオープンソース生成AIモデル」であるLarge Nature Model (LNM)』を開発
  • 規模とインフラ: National Geographicやスミソニアン博物館から提供された、1億枚以上の「倫理的に調達された」自然画像(サンゴ礁、熱帯雨林、氷河など)でトレーニング
  • 気候変動によってこれらの生態系が失われつつある中、AnadolはこのAIモデルを「生きたアーカイブ(Living Archive)」として提示

合成された歴史とポスト・フォトグラフィー

Egor Kraft: Content Aware Studies (2017 -)

height:480
  • 大理石・ポリアミド・機械学習アルゴリズム・独自ソフトウェア・オリジナルデータセットを用いたマルチチャンネル映像インスタレーション
  • 失われた歴史的断片を機械学習と生成AIによって再構築する「準考古学的探査」としての実践。
  • 古代ギリシャ・ローマの彫像やフリーズの3Dスキャン数千点をデータセット化し、GANなどのAIモデルにより欠損部を生成・再構築。結果を3Dプリントや機械彫刻で実体化

Gregory Chatonsky: The Dream of Stones (2024)

height:480
  • サウジアラビアのアル・ウラー(AlUla)砂漠で自身が撮影した写真を用いてAIモデルをファインチューニング
  • 岩がテクノロジー機器のように侵食されていたり、植物が石化していたりする、鉱物・植物・技術が融合した風景

Roope Rainisto: Life in West America (2023)

height:480
  • アメリカの土地・理想・人々の物語を探るポストフォトグラフィー作品集
  • 自身の写真やヴィンテージなストリートフォトの美学を学習させたカスタムモデルを用いて生成。
  • 画像は1960年代のコダクローム・スライドのように見え、被写体の顔はわずかに歪み、看板の文字は判読不能だが、その場の「雰囲気(Vibe)」は完璧に再現されている
  • 我々の集合的無意識にある「アメリカ西部」の視覚的ステレオタイプ
  • 現実の記録ではなく、文化的記憶の統計的平均値の出力

Niceaunties: The Auntieverse (2023–2024)

height:480
  • アジア社会に根付く「おばさん(auntie)」という文化的アーキタイプを再構築
  • 個人的かつ地域的な文化的記憶(エイジング、美、抑圧と解放)を、普遍的かつ幻想的なビジュアル言語へと翻訳
  • 現代のauntie像は伝統と近代の狭間で生きた世代の産物であり、今後50〜100年で姿を変える可能性が高い。プロジェクトはその独自の行動や感情表現を記録・再解釈する「生きたアーカイブ」として機能
  • 「女性の社会的規範への抵抗」「加齢や美の再定義」「自己表現の自由」をテーマとするアートとして高く評価されている

実習: Figmaを使用して「生成コレクション」を作成

Figma

https://figma.com

  • ブラウザベースのコラボレーション・ツール
  • デスクトップ版やモバイル版もあり
  • もともとはインターフェイス (UI) のデザインに特化していたが、グラフィクスデザインツールとしても使用可能
  • コラボレーション機能
  • 学生であれば無料で使用可能! (ただし資格認定を受ける必要あり)

「生成コレクション」制作用テンプレート

こんな感じで作成可能です!

アンケート

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

アンケート


TidalCycles入門

このページは、TidalCyclesのドキュメントを日本語訳したものです。オリジナルの英語のドキュメントは下記を参照してください。

このページは、TidalCyclesのチュートリアルです。ハンズオン形式の初心者向け、または様々なレベルの参加者がいるワークショップで、ワークシートとして使用されることを想定しています。Lucy Cheesman氏によって作成され、Alex McLean氏によってWiki形式に編集されました。

スタートガイド

必要なものがすべてインストールされたら、毎回以下の起動手順に従ってください。

SuperDirtの起動

SuperDirtは、SuperCollider IDEアプリケーションを実行すると自動的に起動するはずです。もし起動しない場合は、SuperCollider IDEのエディタウィンドウで「SuperDirt.start」と入力し、Ctrlキーを押しながらEnterキーを押してコードを実行してください(カーソルがコードと同じ行にある状態で)。

TidalCyclesの起動

お使いのテキストエディタ(Pulsar, vim, VS Codeなど)で新しいファイルを開始し、「.tidal」 という拡張子で保存します(例: 「examples.tidal」)。最初のコマンドを入力して実行すると、Tidalは自動的に起動します。

Estuary

コンピュータにTidalをインストールしていなくても、オンラインで試すことが可能です。Estuaryを使えば、Tidalや他のいくつかのライブコーディングシステムをブラウザ内で試すことができ、自分のコンピュータに何もインストールする必要はありません。

Estuaryは、学習、指導、他者との演奏、そして様々なライブコーディング言語をテストするのに最適な場所です。

ただし、EstuaryではTidalのすべての機能が動作するわけではなく、サブセット(Mini-Tidalと呼ばれます)のみが動作することに注意してください。

Haskellでの注釈

Haskellでは、行の先頭にある二重ダッシュ 「–」 はコメントを示します。コメントは、インタプリタによって無視されるコードです。コードにメモを追加するためにコメントを使用できます。また、特定の行やパターンを無視するためにも使用できます。

-- 私はコメントです

-- このパターンは再生されません
-- d1 $ s "bd hh sn hh"

-- "fast 2" は無視されます
d1
  -- $ fast 2
  $ s "hh*8"

基本的なパターン

Tidalで音を出すための基本的な形式は次のようになります。

d 1 $ sound "drum"

「silence」 を使って音を止めることができます。

d 1 $ silence

「sound」 で使用できる音には2種類あります。シンセサイザーの定義(「superpiano」 など、シンセサイザーの項を参照)か、サンプルのどちらかです。後者の場合、サンプルセットを含むフォルダの名前を書きます。デフォルトでは最初のサンプルが使用されますが、「:」 と数字を使って同じセットから異なるサンプルを選ぶことができます。

d1 $ sound "drum:1"

また、フォルダとサンプルを2つの部分に分けて指定することも可能です。

d 1 $ sound "drum" # n 1

「s」 は 「sound」 の同義語(シノニム)であるため、「d1 $ s “drum” # n 1」 も同じパターンです。

デフォルトのサンプルライブラリ

Tidalに付属しているサンプルの一部を以下に示します。いくつか試してみてください。

「flick」「sid」「can」「metal」「future」「gabba」「sn」「mouth」「co」「gretsch」「mt」「arp」「h」「cp」「cr」「newnotes」「bass」「hc」「tabla」「bass0」hh」「bass1」「bass2」「oc」「bass3」「ho」「odx」「diphone2」「house」「off」「ht」「tink」「perc」「bd」「industrial」「pluck」「trump」「printshort」「jazz」「voodoo」「birds3」「procshort」「blip」「drum」「jvbass」「psr」「wobble」「drumtraks」「koy」「rave」「bottle」「kurt」「latibro」「rm」「sax」「lighter」「lt」「arpy」「feel」「less」「stab」「ul」

デフォルトライブラリにある他のサウンドは、「Dirt-Samples」 フォルダを調べることで確認できます。SuperColliderのメニューから「File > Open user support directory > downloaded-quarks > Dirt-Samples」で見つけられます。さらに、独自のカスタムサンプルを追加することもできます。Pulsarエディタでは、すべてのDirt-Samplesを含むタブをロードする設定を追加できます(Pulsarを参照)。

シーケンスを作ってみましょう。

d 1 $ sound "bd hh sn hh"

シーケンスのステップ数が多いほど、再生速度は速くなります。

d 1 $ sound "bd bd hh bd sn bd hh bd"

これはTidalが時間を扱う方法によるものです。常に実行されている普遍的なサイクル(音楽的な「小節」のようなもの)があります。Tidalは、特に指示しない限り、引用符で囲まれたすべてのサウンドを1サイクル内で再生します(その方法は後で学びます)。また、Tidalがサイクル内でサウンドを均等に配置することにも気づくでしょう。これにより、ポリリズミックな構造(詳細は後述)が生まれます。「setcps」(cpsはcycles per secondの略)を使ってサイクルの長さを変更できます。これはbpm(beats per minute)に似ています。

setcps 0.6

「d1」, 「d2」, 「d3」…「d9」 を使って、複数のシーケンスを同時に再生できます。

d 2 $ sound "sn sn:2 sn bd sn"

「hush」(またはCtrl + .)で実行中のすべてのパターンを停止できます。

サイクルの長さを負の数に変更することで、すべてを一時停止できます(負の数は括弧で囲むことを忘れないでください)。

setcps (-1)

正の数で再び開始します。

setcps 0.6

または、1つのチャンネルをソロにすることもできます。

d 1 $ sound "arpy cp arpy:2"
d 2 $ sound "sn sn:2 bd sn"

solo 2
-- これで2番目のパターンのみが再生されます

unsolo 2
-- これで両方が再び再生されます

mute 2
-- これで1番目のパターンのみが再生されます

unmute 2 -- (または unmuteAll)
-- これで両方が再生されます

Pulsarプラグインは、これらの一般的な操作のためにいくつかのキーショートカットを追加します。例えば、Ctrl+1で最初のパターンのミュートを切り替えたり、Ctrl+0ですべてのミュートを解除したりします。Pulsar内で「Edit > Preferences > Packages」に移動し、「tidalcycles」を選択し、Keybindingsセクションまでスクロールダウンすると、キーバインディングの完全なリストを見ることができます。

より多くのバリエーション

シーケンスにもっと多様性を加えてみましょう。

「~」 で無音/休符を追加します。

d 1 $ sound "bd ~ sn:3 bd sn:5 ~ bd:2 sn:2"

角括弧 「[]」 でサブシーケンスを1ステップに収めます。

d 1 $ sound "bd [bd cp] bd bd"

これは柔軟な拍子記号を作ることができます。

d 1 $ sound "[bd bd sn:5] [bd sn:3]"

サブシーケンスの中にサブシーケンスを入れることもできます。

d 1 $ sound "[[bd bd] bd sn:5] [bd sn:3]"

さらに続けます…

d 1 $ sound "[[bd [bd bd bd bd]] bd sn:5] [bd sn:3]"

「*」 でステップを繰り返すことができます。

d 1 $ sound "bd sd*2"

これはサブシーケンスでも機能します。

d 1 $ sound "bd [sd cp]*2"

または 「/」 を使って逆のこともできます。

d 1 $ sound "bd sn/2"
d 1 $ sound "bd [sn cp]/2"

「*」 はステップを「スピードアップ」して複数回再生することで機能します。「/」 は「スローダウン」することで機能します。

「\<」 と 「>」 を使って、サイクルをまたいでパターンをスケジュールすることもできます。

d 1 $ sound "bd <sd cp arpy>"
d 1 $ sound "<bd sn> <sd [cp cp]> <bd [cp cp]>"

これらの例で使用している構文はミニノーテーションと呼ばれ、「sound」 関数だけでなく、Tidal内の多くの場所で使用できます。

その他の一般的なミニノーテーション記号には、ランダムなオプションを選択する 「|」、2つのパターンを同時に再生する 「,」、パターンを複製する 「!」 があります。

2つのサンプルからランダムに1つを選びます。

d 1 $ sound "[bd:0|bd:1]"
d 1 $ sound "[sn|cp]"

スネアとクラップを同時に再生します。

d 1 $ sound "[sn,cp]"

3つのバスドラムと1つのスネアを再生します。

d 1 $ sound "bd!3 sn"

これと 「”bd*3 sn”」 との違いに注意してください。最初の例では4つのイベントがあり、すべて同じ長さを持ちます。後者では、3つの 「bd」 がサイクルの半分を占め、「sn」 が残りの半分を占めます。「”bd!3 sn”」 は 「bd bd bd sn」 と同じです。

エフェクト

Vowel (母音)

Tidalには、サウンドの聞こえ方を変えるための多くのエフェクトがあります。「vowel」 は母音のようなサウンドを追加するフィルターです。「a」, 「e」, 「i」, 「o」, 「u」 を試してみてください。

d 1 $ sound "drum drum drum drum" # vowel "a"

サウンドのパターンを作るのとほぼ同じ方法で、エフェクトのパターンも作れます。これらを「コントロールパターン」と呼びます。

d 1 $ sound "drum drum drum drum" # vowel "a o e e"

「\<>」 を使ってサイクルをまたいでスケジュールできることを思い出してください。

d 1 $ sound "drum drum drum drum" # vowel "<a o e e>"

母音以外の文字を追加すると、vowelエフェクトを一時停止できます。

d 1 $ sound "drum drum drum drum" # vowel "a o p p"

Tidalはパターン同士をマッピングしようと最善を尽くします。

d 1 $ sound "drum drum drum drum" # vowel "a o e"

構造は左側から来ます。パラメータを入れ替えてみてください。

d 1 $ vowel "a o ~ i" # sound "drum"

Gain, pitch and panorama (音量、ピッチ、パン)

「gain」 は異なるサウンドの音量を変更します。

d 1 $ sound "bd hh sn:1 hh sn:1 hh" # gain "1 0.7 0.5"

「speed」 と 「note」 はサンプルのピッチングに使用されます。「speed」 は再生速度に影響します(例: 「2」 = 1オクターブ上)。

d 1 $ sound "numbers:1 numbers:2 numbers:3 numbers:4" # speed "1 1.5 2 0.5"

または、「speed」 パラメータからパターンを取ることもできます。

d 1 $ speed "1 2 4" # sound "jungbass:6"

「up」 はサンプルを半音単位でピッチを上げます(例: 「12」 = 1オクターブ上)。

d 1 $ up "0 ~ 12 24" # sound "jungbass:6"

「pan」 はステレオエフェクトを作成できます(「0」 = 左、「0.5」 = 中央、「1」 = 右)。

d 1 $ sound "numbers:1 numbers:2 numbers:3 numbers:4" # pan "0 0.5 1"

Distortion, reverb, delay and filters (ディストーション、リバーブ、ディレイ、フィルター)

「shape」 はディストーションを加えるために使えるいくつかの関数のうちの1つです(ただし注意してください – サウンドが非常に大きくなります)。

d 1 $ sound "kurt:4 kurt:4" # shape "0 0.78" # gain "0.7"

ディレイは、最大4つの関数の組み合わせによって実現されます。

d 1 $ sound "cp" # delay 0.8 # delaytime (1/6) # delayfeedback 0.6 # lock 1

「lock 1」 を使用して、「delaytime」 に提供される時間が秒ではなくサイクル単位であることを示します。

これらすべてがパターンを受け取ります。

d 1 $ sound "industrial:3*4" # delay "<0 0.4 0.8>" # delaytime "0.2 0.05" # delayfeedback "<0.5 0.9>" # lock 1

リバーブエフェクトを追加するには、「dry」、「room」、「size」 関数を使用します。

d 1 $ sound "[~ sn]*2" # dry 0.4 # room 0.6 # size 0.8

ローパス、ハイパス、DJタイプフィルターなど、いくつかの周波数フィルターも利用できます。

ローパスフィルター:

d 1 $ sound "tabla*4" # n "0 1 2 3" # cutoff 400 # resonance 0.2

ハイパスフィルター:

d 1 $ sound "tabla*4" # n "0 1 2 3" # hcutoff 600 # hresonance 0.2

「cutoff」 と 「hcutoff」 はカットオフポイントの周波数をヘルツ単位で受け取ります。「resonance」 と 「hresonance」 は0から1の範囲ですが、レゾナンスの値が高いと非常に大きな音になる可能性があるため注意してください。

「djf」 はより即時的なフィルターです。0から1の間の数値を受け取ります。0.5未満の値ではローパスフィルター、0.5より大きい値ではハイパスフィルターとして機能します。

エフェクトについてさらに学び、エフェクトの完全なリストを見るには、エフェクトのセクションを参照してください。

パターンの変換

変換を使用することで、より複雑なパターンを作り始めることができます。「slow」 のような関数を使うと、サイクルを超越し始めることができます。「slow」 はパターンをより多くのサイクルに引き伸ばします。

Slow, fast and hurry (低速、高速、急ぎ)

d 1 $ sound "arpy arpy:1 arpy:2 arpy:3"
d 1 $ slow 2 $ sound "arpy arpy:1 arpy:2 arpy:3"

「fast」 はパターンを1サイクル未満に圧縮します。「density」 と書かれているのを見るかもしれませんが、同じものです。見てみましょう。

「fast 0.5」 は 「slow 2」 と同じです!

d 1 $ fast 2 $ sound "arpy arpy:1 arpy:2 arpy:3"
d 1 $ fast 0.5 $ sound "arpy arpy:1 arpy:2 arpy:3"

「hurry」 は 「fast」 に似ていますが、「speed」 変換も適用します。

d 1 $ sound "arpy arpy arpy:1 arpy:2"
d 1 $ hurry 2 $ sound "arpy arpy arpy:1 arpy:2"
d 1 $ hurry 0.5 $ sound "arpy arpy arpy:1 arpy:2"

時間を変更する関数についてさらに学ぶには、リファレンスの「時間」セクションを参照してください。

パターンの再編成

Tidal Cyclesは、パターンをさまざまな方法で変更するために使用できる多くの関数を提供します。このセクションでは、その一部を紹介しますが、他にもたくさんあります。詳細については、これらのリファレンスセクション(変更、蓄積、条件)を確認してください。

「rev」 でパターンを反転できます。

d 1 $ rev $ sound "arpy arpy:1 arpy:2 arpy:3"

または 「palindrome」 で順方向に再生してから逆方向に再生します。

d 1 $ palindrome $ sound "arpy arpy:1 arpy:2 arpy:3"

「iter」 は、サイクルごとに異なるポイントからパターンを開始し、元の場所に戻るまで指定された回数だけシフトさせます。

d 1 $ iter 4 $ sound "arpy arpy:1 arpy:2 arpy:3"

「every」 は、異なるサイクルで変換やエフェクトをスケジュールすることができます。次の例は、4サイクルごとに2倍の速さで再生します。

d 1 $ every 4 (fast 2) $ sound "arpy arpy:1 arpy:2 arpy:3"

… または、「#」 を使って同じ方法でエフェクトをスケジュールすることもできます。

d 1 $ every 4 (# vowel "a o") $ sound "arpy arpy:1 arpy:2 arpy:3"

「jux」(juxtaposeの略)は、変換またはエフェクトを受け取り、一方のスピーカーでそれを再生し、もう一方のスピーカーで元のパターンを再生します。

d 1 $ sound "arpy arpy:1 arpy:2 arpy:3"
d 1 $ jux (rev) $ sound "arpy arpy:1 arpy:2 arpy:3"
d 1 $ jux (hurry 2) $ sound "arpy arpy:1 arpy:2"

「chunk」 は、毎回パターンの異なる部分に変換またはエフェクトを適用します。例えば、パラメータとして 「4」 を指定すると、サイクルの各4分の1を順に処理します。

d 1 $ chunk 4 (hurry 2) $ sound "arpy arpy:1 arpy:2 arpy:3"
d 1 $ chunk 4 (# speed 2) $ sound "alphabet:0 alphabet:1 alphabet:2 alphabet:3"

さらに変換の奥深くへ

複数の変換も可能です! 「.」 を使ってそれらを連鎖させることができます。

d 1 $ jux (rev . (slow 1.5)) $ sound "arpy arpy:1 arpy:2 arpy:3"

(ほとんど)すべてがパターンであることを忘れないでください。したがって、これらの変換をエフェクトにも適用できます。

d 1 $ sound "jvbass [jvbass jvbass] jvbass ~" # note "1 [3 5] 7"
d 1 $ sound "jvbass [jvbass jvbass] jvbass ~" # iter 3 (note "1 [3 5] 7")

「fast」 または 「slow」、「range」、そして 「sine」 や 「saw」 のようなオシレーターを使用して、任意のパラメータにLFO(低周波オシレーター)を作成できます。

d 1 $ s "bd*8" # pan (slow 4 $ sine)
d 1 $ s "moog*16" # n "<0 1 2>" # legato 1 # cutoff (range 200 2400 $ saw) # resonance 0.2

デフォルトでは、「sine」、「cosine」、「saw」 のようなオシレーターは0から1までの値を与えます。これは一部のパラメータ(「pan」 など)には問題ありませんが、「range」 を使ってこれらの値を必要な範囲にスケーリングできます。

前の例では、イベントごとに1つのオシレーター値がトリガーされます。サイクルあたりのイベントが多い場合はこれで問題ありません。しかし、イベントが少なく、より長い場合、LFOの滑らかな動きを実現するためには、オシレーターから複数の値を選ぶ必要があります。これはコントロールバスを使用して行うことができます。

d 1 $ s "moog" # n "<0 1 2>" # legato 1 # cutoffbus 1 (segment 32 $ range 200 2400 $ saw) # resonance 0.2

ここでは、サイクル中にサウンドが徐々に変化するのが聞こえます。多くのパラメータにはバスがあり、すべてパラメータ名に 「bus」 が付いた名前になっています。この最後の例では、「segment 32」 がオシレーターにサイクルごとに32の値を選ぶよう指示しています。

異なる種類のパターン

「パターン」とは一体何でしょうか?いくつかの異なる種類のパターンと、Tidalがそれらをどのように表現できるかについて考えてみましょう。

循環的 / 反復的

「n」 を使ってフォルダからサンプルを選ぶことができます。これにより、そこにもパターンを適用できます。

d 1 $ n "0 1 2 3" # sound "arpy"

「run」 は連続したパターンを書き出すための短い方法です。

d 1 $ n (run 4) # sound "arpy"

または、次のように書くこともできます。

d 1 $ n "0 .. 3" # sound "arpy"

対称性

d 1 $ slow 2 $ n "0 1 2 3 3 2 1 0" # sound "arpy"
d 1 $ palindrome $ n (run 4) # sound "arpy"

ポリメトリック / ポリリズミックなシーケンス

角括弧 「[]」 を使い、カンマ 「,」 で区切ることで、2つのサブシーケンスを同時に再生します(1つの大きなサブシーケンスのように)。

d 1 $ sound "[voodoo voodoo:3, arpy arpy:4 arpy:2]"

角括弧の代わりに中括弧 「{}」 を使うと、異なる効果が得られます。角括弧の場合、シーケンスの両半分がサイクル内に収められます(ポリリズム)。中括弧の場合、パルスは左側のパターンによって設定されます。右側のパターンは、それをオーバーラップ(またはアンダーラップ!)することができます(ポリメーター)。

d 1 $ sound "[voodoo voodoo:3, arpy arpy:4 arpy:2]"
d 1 $ sound "{voodoo voodoo:3, arpy arpy:4 arpy:2}"
d 1 $ sound "[drum bd hh bd, can can:2 can:3 can:4 can:2]"
d 1 $ sound "{drum bd hh bd, can can:2 can:3 can:4 can:2}"
d 1 $ sound "[bd sn, can:2 can:3 can:1, arpy arpy:1 arpy:2 arpy:3 arpy:5]"
d 1 $ sound "{bd sn, can:2 can:3 can:1, arpy arpy:1 arpy:2 arpy:3 arpy:5}"

ユークリッドリズム / Bjorklund

パターン内の要素の後に括弧で2つの数字を指定すると、Tidalは最初の数のサウンドを2番目の数のステップに均等に分散させようとします。

d 1 $ sound "bd(5,8)"

この記法は、パターンの単一の要素内で使用できます。

d 1 $ sound "bd(3,8) sn*2"
d 1 $ sound "bd(3,8) sn(5,8)"

3番目のパラメータを追加することもできます。これはパターンを「回転」させ、異なるステップから開始します。

d 1 $ sound "bd(5,8,2)"

ランダム性

ランダム性は、パターンに素早く個性とバリエーションを導入するのに役立ちます。「sometimes」 は 「every」 のように機能しますが、設定された期間の後ではなく、変更はランダムな確率で現れます。

d 1 $ sometimes (# speed "2") $ sound "drum*8"

「often」(75%)は 「sometimes」(50%)のように機能しますが、より頻繁に発生します。

d 1 $ often (# speed "2") $ sound "drum*8"

「irand」 は、指定された数までのランダムな整数を生成します(例: ランダムなサンプルを再生するため)。

d 1 $ sound "arpy(3,8)" # n (irand 16)

「rand」 は0から1の間のランダムな小数を生成します。

d 1 $ sound "tink*16" # gain rand

「degradeBy」 を使ってランダムな要素を削除できます。数値はサンプルが再生される可能性を示します。

d 1 $ degradeBy 0.2 $ sound "tink*16"

(「degrade」 だけだと 「degradeBy 0.5」 と同じです)

または、「?」 を使って50%の確率でサウンドを削除できます。

d 1 $ sound "bd sn:2? bd sn?"

サンプルの操作

これまでは短いサンプルだけを使用してきました。長いサンプルは、注意しないと問題を引き起こす可能性があります。長いサンプルで何が起こるか見てみましょう。

d 1 $ sound "bev"
-- 少し待ってから..
hush

お分かりのように、Tidalは非常に長いサンプルであっても、サイクルごとにサンプルをトリガーし続けます。パターンの再生を停止しても、サンプルが再生し終わるまで聞いている必要があります。「cut」 を使うと、次のサンプルがトリガーされたときにサンプルを切り詰めることができます。

d 1 $ sound "bev" # cut 1

「cut」 の数字はグループを定義するため、異なるパターン間の干渉で遊ぶことができます。

d 1 $ sound "bev ~" # cut 1
d 2 $ slow 4 $ sound "pebbles ~" # cut 1

「legato」 もサンプルを切り詰めますが、固定長を使用します。

d 1 $ sound "bev ~ bev ~" # legato 1

サンプルを切り刻んで、グラニュラーシンセシスの効果を得ることもできます。

d 1 $ chop 32 $ sound "bev"

「striate」 は 「chop」 に似ていますが、再生を異なる方法で組織化します。

d 1 $ slow 4 $ chop 4 $ sound "arpy:1 arpy:2 arpy:3 arpy:4"
d 1 $ slow 4 $ striate 4 $ sound "arpy:1 arpy:2 arpy:3 arpy:4"

「randslice」 はサンプルを断片に切り刻み、サイクルごとにランダムな1つを再生します。

d 1 $ randslice 32 $ sound "bev"

「loopAt」 を使って、サンプルを設定されたサイクル数に合わせることもできます。

d 1 $ loopAt 8 $ sound "bev"

いつものように、これらの関数にパターンや変換を追加したり、それらを組み合わせて面白い効果を生み出したりできます。

d 1 $ loopAt "<8 4 16>" $ chop 64 $ sound "bev*4" # cut 1
d 1 $ rev $ loopAt 8 $ chop 128 $ sound "bev"

長いサンプルを操作するその他の方法については、サンプリングのリファレンスセクションを参照してください。

Superdirtシンセサイザー

これまではサンプルのみを使用してきましたが、SuperDirtには 「superpiano」、「supersaw」、「superfm」 のような多くのSupercolliderシンセサイザー(略してシンセ)も付属しています。

それぞれに独自の関数とパラメータがありますが、一般的にはサンプルと非常によく似た方法で使用できます。

d 1 $ n "0 4 7" # sound "superpiano"

MIDIやOSCを介して外部シンセサイザーを制御することもできます。

関数 n と note の違い

シンセを使用する場合、「n」 と 「note」 の両関数はまったく同じです。上記の例がCノート、Eノート(Cの4半音上)、Gノート(Cの7半音上)を再生していることにお気づきかもしれません。これは、以下とまったく同じです。

d 1 $ note "0 4 7" # sound "superpiano"

サンプルを使用する場合、「n」 はサンプルフォルダ内のファイルインデックスを指し、アルファベット順(昇順)にソートされ、0(ゼロ)から数えられます。もし楽器のすべてのノートをサンプリングしていれば、各サンプルがノートに対応することも可能です。しかし、「note」 を使用すると、サンプルはピッチが上下し(それに応じてサンプルのデュレーションも影響を受けます)、

例えば:

d 1 $ sound "bd*4" # n "<0 4>" # note "0 12 -7 -12"

これは、奇数サイクルでは 「bd」 フォルダの最初のサンプルを、偶数サイクルでは5番目のサンプルを再生します。各サイクルで、サンプルは4回再生されます。1回はそのまま、1回は1オクターブ上(12半音)、1回は5度下(7半音)、最後は1オクターブ下です。

ノートの演奏

このチュートリアルのほとんどはリズムに専念していますが、Tidal Cyclesはノート、スケール、コード、アルペジオを演奏する方法も提供します。

すでにノートの演奏方法は知っています。「note」 関数を使うか、ノートごとにサンプリングされた楽器の場合は 「n」 関数でノートを選びます。

アルファベットの最初の7文字(AからG)を使った西洋音楽理論の命名規則に基づいてノートを書くこともできます。例えば、これら2つのコードは同等です。

d 1 $ note "c a f e" # s "supermandolin"
d 1 $ note "0 9 5 4" # s "supermandolin"

ノート名はTidal内で単に数字に翻訳されるため、どちらの方法を使っても、あるいは両方を同時に使っても構いません!

ノート名の後に 「s」 や 「f」 を続けて、シャープやフラットを示すことができることに注意してください。また、「0」 と 「c」 は5番目のオクターブのCノートを指します。ノート名の後にオクターブ番号を追加することができます。

d 1 $ note "c4 a3 f6 e5" # s "supermandolin"

「|+」 や 「|-」 を使ってオクターブを移動するのも便利です。これは3番目のオクターブで再生されます。

d 1 $ note "c a f e" # s "superpiano" |- note 24

スケール、コード、アルペジオの演奏方法についてさらに知るには、「ハーモニー」またはハウツーの「アルペジオの構築」と「コードの演奏」を参照してください。

ここからどこへ進むか

いくつか提案があります。

  • 遊ぶ、試す、調査する。 ここには、あなたが始めるための十分な情報があります。必要に応じて、リファレンスページを調べてさらに学びましょう。
  • Alexのビデオコースに従う。 より長く、より深いチュートリアルで、たくさんの例とビデオサポートがあります。
  • フォーラムやDiscordサーバーに参加する。 助けを求めたり、他の人を助けたり、他の人がTidal Cyclesをどのように使っているかについて学びましょう。

TouchDesigner実践 1 – SOPのレンダリングとマテリアル

スライド資料

本日の内容

これまでの内容でSOPのレンダリングの基本を学びました。今回の講義では、ここからさらに進んで、SOPのレンダリングの詳細なテクニックやマテリアルの設定方法を学びます。SOPにテクスチャ (画像) をマッピングする「テクスチャーマッピング (Texture Mapping)」、テクスチャの法線マップを使用して表面の凹凸を表現する「バンプマッピング (Bump Mapping)」、テクスチャの高さ情報を使用して頂点を変位させる「ハイトマッピング (Height Mapping)」、物理ベースのマテリアル (PBR) について学んでいきます。これらのテクニックは、SOPのレンダリングにおいて非常に重要な要素です。これらを理解することで、よりリアルな表現が可能になります。

SOPのレンダリングとマテリアル概要

TouchDesignerにおいて、SOP (Surface Operator) は3Dの形状データを作成・編集するための基本要素です。しかし、SOP単体では最終的なビジュアルとして表示されません。SOPをレンダリングし、画面に描画するためには、Geometry COMPにSOPを接続し、Camera COMPで視点を、Light COMPで照明を設定し、それらをRender TOPで統合して2Dイメージとして出力するという一連のパイプラインが必要です。

そして、SOPで作成した形状に「どのような見た目を与えるか」を決定するのがマテリアル (MAT) の役割です。マテリアルは、オブジェクトの色、光沢、質感、透明度などを定義します。本日は、基本的なPhong MATから始め、テクスチャを使ってより詳細な表現を加えるテクスチャーマッピング、表面に擬似的な凹凸を与えるバンプマッピング、実際に頂点を変位させるハイトマッピング、そして現実世界の光の挙動を再現するPBRマテリアルといった、SOPの表現力を飛躍的に向上させるテクニックを学んでいきます。これらの要素を組み合わせることで、よりリッチでリアルな3Dシーンを構築することが可能になります。

SOPのレンダリング基本 – 法線マップとマテリアル

法線は、ポリゴンの表面がどちらを向いているかを示す情報で、光の当たり方や陰影の計算に不可欠です。SOPを作成・変形する際には、法線が正しく設定されていることが重要です。Attribute Create SOPで法線を再計算することで変形したSOPの法線を正しく補正することが可能です。Phong MATは、拡散反射光(Diffuse)、鏡面反射光(Specular)、光沢(Shininess)などを設定できる基本的なマテリアルです。

法線ベクトル

サンプルプログラム

ダウンロード

ポイント:

  • Sphere SOPで球を作成し、Noise SOPで表面を変形させています。
  • Geometry COMPに上記のSOPを接続し、レンダリング対象とします。
  • Phong MATを作成し、Geometry COMPの Material パラメータにドラッグ&ドロップして適用します。
  • Phong MATの Diffuse Color や Specular Color を調整して、基本的な質感を設定します。
  • Light COMPを配置し、位置や種類(例: Point Light, Directional Light)を調整してライティングを行います。
  • SOPの法線が正しく計算されていることを確認します。必要であればAttribute Create SOPで法線を再計算(Compute Normalsをオン)します。
  • この例ではSphere SOPをNoise SOPで変形したため不正確になった法線を、Attribute Create SOPによって補正しています。

テクスチャーマッピング

テクスチャーマッピングは、2Dの画像を3Dオブジェクトの表面に貼り付けることで、オブジェクトに模様やディテールを追加する基本的なテクニックです。オブジェクトにはUV座標と呼ばれる、テクスチャ上のどの部分をオブジェクトのどの面に貼り付けるかの情報が必要です。

サンプルプログラム

ダウンロード

ポイント:

  • Movie File In TOPなどで画像ファイルを読み込みます (またはNoise TOPなどでプロシージャルに生成)。
  • Phong MATのColor Mapパラメータに、読み込んだ画像テクスチャ (TOP) を指定します。
  • SOPにUV座標が適切に設定されている必要があります。Sphere SOPなどのプリミティブはデフォルトでUV座標を持っています。
  • Texture SOPを使用すると、UV座標のスケール、オフセット、回転などを調整したり、投影方法を変更したりできます。
  • この例では、Noise SOPで変形した球体に、外部から読み込んだ画像(またはプロシージャルテクスチャ)をカラーマップとして適用しています。

バンプマッピング (Bump Mapping)

バンプマッピングは、テクスチャを使用してオブジェクトの表面に細かい凹凸があるように見せかけるテクニックです。実際にはジオメトリの形状を変更せず、光の当たり方を変えることで陰影を生み出し、擬似的な凹凸を表現します。一般的には、法線マップ(Normal Map)と呼ばれる特殊な画像(通常、青紫色っぽい見た目)を使用します。

バンプマッピング (Bump Mapping)

法線マップ (Normal Map)

面の向き(法線方向)をRGBカラーで表現したテクスチャです。赤はX軸、緑はY軸、青はZ軸の法線成分に対応。

サンプルプログラム

ダウンロード

ポイント:

  • 法線マップ用のテクスチャ (TOP) を用意します。これは専用に作成された画像か、Normal Map TOPなどでグレースケールのハイトマップから生成できます。
  • Phong MATの Normal Map (Bump) パラメータのトグルをオンにし、用意した法線マップテクスチャを指定します。
  • Bump Scale パラメータで凹凸の強さを調整できます。
  • バンプマッピングは視覚的なディテールを追加しますが、オブジェクトのシルエットは変化しません。
  • この例では、球体にNoise TOPで作成したテクスチャーをマッピングして、さらに同じ画像から生成した法線マップを適用し、表面に凹凸を持たせています。これにより、よりリアルな質感を実現しています。

ハイトマッピングと頂点変位 (Height Mapping and Vertex Displacement)

ハイトマッピング(ディスプレイスメントマッピングとも呼ばれる)は、グレースケールのハイトマップ(高さ情報を持つ画像)に基づいて、実際にジオメトリの頂点を移動させるテクニックです。これにより、バンプマッピングよりもリアルな凹凸や変形をオブジェクトに加えることができます。オブジェクトのシルエットも変化します。

ハイトマッピング

法線マップ (Normal Map) とハイトマップ (Height Map) の比較

サンプルプログラム

ダウンロード

ポイント:

  • ハイトマップとしてグレースケールのテクスチャ (TOP) を用意します。画像の明るい部分がより高く、暗い部分がより低く変位します。
  • PBR MATの Displacement セクションで設定を行います。
    • Enable Height Map をオンにします。
    • Height Map パラメータにハイトマップテクスチャを指定します。
    • Displace Scale で変位の大きさを調整します。
    • Displace Midpoint で変位の基準となる高さを調整します (通常0.5)。
  • 効果をはっきりと確認するためには、ジオメトリにある程度の頂点数が必要です。頂点数が少ないと、滑らかな変位になりません。
  • この例では、バンプマッピングした球体に、さらにハイトマップを適用して、よりダイナミックな形状変化や凹凸を生み出しています。

物理ベースのマテリアル (PBR Materials)

PBR (Physically Based Rendering) マテリアルは、光が現実世界の物質とどのように相互作用するかをより正確にモデル化することで、非常にリアルな質感を表現する手法です。PBR MATを使用し、Base Color (基本色)、Metallic (金属度)、Roughness (表面の粗さ) などのパラメータを調整したり、対応するテクスチャを割り当てたりします。

サンプルプログラム

ダウンロード

ポイント:

  • PBR MATを作成し、Geometry COMPの Material パラメータに適用します。
  • Environment Light COMPと環境マップ (HDR画像など) を使用すると、周囲の環境を反射し、よりリアルなライティング結果が得られます。
  • この例では、Noise SOPで変形した球体にPBR MATを適用し、メタリック感やラフネスを調整して、よりフォトリアルな質感を追求しています。
  • PBRマテリアルを適用するパッチングは少し複雑なので、実際に作成しながら解説していきます。

応用 1: いろいろ機能を詰め込み

ここまで出てきたSOPのレンダリングに関する様々な機能を、たくさん盛り込んでみました。

  • ジオメトリ・インスタンシング
  • Noise TOPによるアニメーション
  • テクスチャーマッピング
  • バンプマッピング
  • PBRマテリアル

詳細は完成したプログラムを確認してみてください!

サンプルプログラム

応用2: ノイズに映りこむ光と陰

ノイズで変形させたGrid SOPをPBRレンダリングすることで、ノイズに映る光と陰をリアルに描画しています。詳細はパッチをみながら解説していきます!

サンプルプログラム

ダウンロード

まとめ

本日の講義では、TouchDesignerにおけるSOPのレンダリング品質と表現力を高めるための重要なテクニックを幅広く学びました。

まず、SOPのレンダリングにおける法線の役割と、基本的なPhong MATを用いた質感設定の基礎を確認しました。次に、2D画像を3Dオブジェクトに貼り付けるテクスチャーマッピング、法線マップを利用して表面のディテールを豊かにするバンプマッピング、そしてハイトマップを用いて実際にジオメトリを変形させるハイトマッピングについて、それぞれの仕組みとTouchDesignerでの設定方法を実践的に見てきました。最後に、物理ベースのレンダリングを実現するPBRマテリアルを紹介し、Base Color、Metallic、Roughnessといったパラメータや各種マップを駆使することで、より現実に近いフォトリアルな質感を追求できることを学びました。

これらのマッピング技術やPBRマテリアルを理解し、適切に組み合わせることで、単純なSOPからでも驚くほど多様でリアルなビジュアルを生み出すことができます。今回学んだ知識を基に、様々なSOP、テクスチャ、マテリアル設定を試しながら、ぜひ皆さん自身のクリエイティブな表現を探求してください。

アンケート

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

アンケート (11/27)


TidalCyclesインストール – macOS

自動インストール (スクリプト)

このインストールスクリプトは、TidalCycles システムに必要なすべてのコンポーネントと依存関係のインストールを自動化するために使用できます。この方法は、Tidal を初めて使用し、まだ SuperCollider と SuperDirt を持っていない場合に推奨されます。これらを既にお持ちの場合、またはコマンドラインインストールの管理に精通している場合は、以下の手動インストール手順を使用してください。

サポートされている OS バージョンの詳細については、GitHub の README をご覧ください。

  • Silicon/M1: OSX Ventura で検証済み
  • Intel Big Sur, Monterey でテスト済み
  • 他の環境では、特定のコンポーネントがインストールされない場合があります。以下のインストール後の手順に従ってください。手動インストールの手順に従う必要があるかもしれません。

インストール手順

必須条件: Apple Xcode コマンドラインツール

これがインストールされている場合は、この手順をスキップできます。不明な場合は、以下のコマンドを実行すると、既にインストールされていれば終了します。
インストール時には、Apple からのライセンス同意を含む複数のダイアログウィンドウが生成されます。完了までに20〜30分以上かかることがあります。

/usr/bin/xcode-select --install

tidal-bootstrap

これは以下のコンポーネントをインストールし、不足しているものだけをインストールします。(ヒント: tidal-bootstrap は再実行可能です。)
Haskell のインストールは最も長く複雑で、Haskell, ghcup, cabal などに関する多くのメッセージが表示されます。これには20〜30分以上かかることがあります。

  • Haskell Language (Ghcup)
  • cabal: Haskell および Tidalcycles 用のパッケージシステム
  • Tidal Pattern エンジン (Tidal Cycles 本体), 重要な BootTidal.hs ファイルを含む
  • Pulsar: テキストエディタ
  • SuperCollider  (バックエンドオーディオ生成用), および:
    • SuperDirt: tidal で使用されるサンプルライブラリ
    • sc-3 plugins: ユニットジェネレータプラグイン
curl https://raw.githubusercontent.com/tidalcycles/tidal-bootstrap/master/tidal-bootstrap.command -sSf | sh

インストール後

インストールスクリプトからの出力を確認してください。エラーメッセージやインストールの失敗に注意してください。これはトラブルシューティングに役立ちます。

  • Haskell の問題については、/tmp/ghcup-install.log を確認してください。

インストールの失敗がある場合は、tidal-bootstrap を再度実行できます。正常にインストールされたコンポーネントはスキップされます。再度実行することで問題が解決することがあります。
新しいシェルを開始します (ターミナルを終了します)。これにより、新しい PATH 設定が読み込まれます。
インストールを確認します。以下のコマンドが実行できるはずです。最初の2つは tidal のインストールに関する情報を表示します。これらが失敗した場合、Haskell または Tidal が正しくインストールされていません。
ls コマンドは、Pulsar の tidalcycles プラグインが正しくインストールされているかどうかを明らかにします。osc-min ディレクトリにファイルのリストが表示されるはずです。
SuperCollider の scsynth コマンドはバージョン情報を表示します。

cabal list tidal
cabal info tidal
ls ~/.pulsar/packages/tidalcycles/node_modules/osc-min
/Applications/SuperCollider.app/Contents/Resources/scsynth -v

SuperDirt: SuperCollider を起動します。Language メニューから “Quarks” を選択します。SuperDirt と Dirt-Samples がリストされ、チェックされているはずです。

Pulsar の tidalcycles プラグインが正しくインストールされなかった場合は、まず Pulsar 内のパッケージマネージャを使用してインストールしてみてください。Pulsar ページ の指示を参照してください。
これが失敗する場合は、プラグインの手動インストールを試みることができます。手順は Pulsar ページ にもあります。

始めましょう!

Start Tidal
このガイドに従って、コンポーネントがどのように連携して動作するか、それらを実行する方法を学んでください。
Tidal へようこそ!

手動インストール

Tidal をインストールする前に、Haskell (Ghcup 経由), SuperCollider と SC3 Plugins, Git をインストールしてください。また、Tidal Cycles と対話するためのテキストエディタを選択してインストールする必要があります (サイドバーを参照)。

インストールプロセス

Ghcup

ターミナルウィンドウで、GHC のインストールパスを、ターミナルが読み込まれるたびに実行されるファイルに追加します。macOS 10.14 以前の場合、ターミナルは bash を使用するため、変更が必要なファイルは .bashrc です:

. "$HOME/.ghcup/env"
echo '. $HOME/.ghcup/env' >> "$HOME/.bashrc"

macOS 10.15 Catalina の場合、ターミナルは zsh を使用するため、変更が必要なファイルは .zshrc です:

. "$HOME/.ghcup/env"
echo '. $HOME/.ghcup/env' >> "$HOME/.zshrc"

この後、cabal を使用して最初にパッケージディレクトリを更新し、次に TidalCycles ライブラリをインストールします。TidalCycles ライブラリを最新バージョンに更新したい場合も、これらの2つのコマンドを実行します。

cabal update
cabal v1-install tidal

TidalCycles を初めてインストールする場合、cabal v1-install tidal のステップには時間がかかることがあります。コマンド出力の最後に、エラーなしで Installed tidal-x.x.x (x.x.x は最新のバージョン番号) と表示されるはずです。

注意: インストールを確認する手順については、上記の「インストール後」セクションを参照してください。

SuperDirt

新しくインストールした SuperCollider を起動します。表示されるテキストエディタに以下のコード行を貼り付け、Cmd+Return を押して評価します:

Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.7.3"); thisProcess.recompile()})

コードをクリックしてカーソルがこの行にあることを確認し、Shift キーを押しながら Enter キーを押してコードを実行します。

インストールにはしばらく時間がかかります。次のような内容が表示されます:

Installing SuperDirt
Installing Vowel
Vowel installed
Installing Dirt-Samples
Dirt-Samples installed
SuperDirt installed
compiling class library...
...
(その後、いくつかの情報が表示され、最後に次のような内容が表示されます:)
...
*** Welcome to SuperCollider 3.11.2. *** For help press Ctrl-D.

Tidal Cycles をインストールしました。次は何を?

サイドバーを見てください。Tidal と対話し、演奏を始めるためにインストールできるテキストエディタのリストが表示されます。


TidalCyclesインストール – Windows

自動インストール – Chocolatey

警告
以前に古いバージョンの Haskell とともに Chocolatey からインストールした場合、新しいインストールが完了した後に Tidal の実行で問題が発生する可能性があります。これは、複数のバージョンの Haskell が原因である可能性があります。例えば、C:\tools\ghc-8.10.7 と C:\tools\ghc-9.6.1 の両方がある場合です。これを修正するには、古い Haskell バージョンを削除し、Tidal パッケージを再インストールする必要があります。詳細な手順は Windows Chocolatey cleanup に記載されています。

この方法は、パッケージマネージャーの Chocolatey を使用し、必要な依存関係を含むすべてをインストールします。これは重要なインストールプロセスであり時間がかかりますが、最終的にはすべてのコンポーネントが使用できるようになります。インストーラーは、これらがまだインストールされていないことを前提としています。もし一部のコンポーネント(SuperCollider、SuperDirt など)を既にお持ちの場合は、残りのコンポーネント(下記参照)については手動インストールの手順を使用することをお勧めします。

Chocolatey パッケージマネージャーを介してインストールされるコンポーネント:

インストール手順

インストールには3つのステップがあります。セキュリティのポップアップウィンドウが表示され、承認を求められる場合があります。
Windows 7 ユーザー: このページの最後にある準備ステップを確認してください。

I – PowerShell を管理者として起動する

Windows 10 – Windows キーを押しながら ‘x’ を押し、表示されるメニューで Windows PowerShell (admin) を選択します。
Windows 7 – スタートボタンをクリックし、powershell と入力し、右マウスボタンでクリックして 管理者として実行 を選択します。

II – Chocolatey のインストール: パッケージマネージャー

Chocolatey パッケージマネージャーが必要です。以前にインストールしていない場合は、次のコマンドを実行して取得できます:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

III – TidalCycles のインストール

次のコマンドを実行して、Chocolatey を使用して Tidal Cycles をインストールします:

choco install tidalcycles

注意: フルインストールには時間(30分以上)がかかります。最後まで実行させるのが最善ですが、完了せずに終了した場合や中断する必要がある場合は、このコマンドを再度実行してみてください。Choco は既に完了しているパッケージの依存関係をスキップします。

powershell スクリプトが終了したら、choco インストールログでエラーがないか確認する必要があります。

C:\ProgramData\chocolatey\logs\chocolatey.log

IV – 潜在的な問題と修正

SuperCollider の SuperDirt、Dirt Samples、および/または Vowel のクォークインストールが失敗した場合

これらは SuperCollider IDE 内で手動でインストールできます。実行するコマンドについては、以下の 手動インストール セクションを参照してください。

Tidal パッケージのインストールが失敗した場合

次のコマンドで tidal のインストール状況を確認できます: cabal info tidal 。「There is no package named tidal」というメッセージが表示された場合は、何かがうまくいかなかったため、これらのコマンドを実行する必要があります。

Tidal パッケージのインストールを手動で試みることができます。ただし、Tidal パッケージをインストール/再インストールする前に、ローカルの ghc および cabal ディレクトリを削除(または名前変更)することをお勧めします。これらはユーザーの \AppData\Roaming ディレクトリにありますが、\AppData\ 以下の他のディレクトリにある可能性もあります。

C:\Users\<あなたのユーザー名>\AppData\Roaming\ghc
C:\Users\<あなたのユーザー名>\AppData\Roaming\cabal
C:\Users\<あなたのユーザー名>\AppData\Local\ghc
C:\Users\<あなたのユーザー名>\AppData\Local\cabal\

次に Tidal をインストールします:

cabal update
cabal v1-install tidal

Pulsar のインストールが失敗した場合

Pulsar-dev からインストーラーを手動でダウンロードします。インストールしたら、以下の手順に従って TidalCycles プラグインパッケージをインストールします。または、choco から Pulsar だけをインストールしてみることもできます: choco install pulsar

Pulsar のインストールは成功したが、TidalCycles プラグインパッケージがインストールされなかった場合

これは Pulsar 内から手動で行うことができます。トップメニューから Package Manager を開き、Install を選択し、TidalCycles を検索して install を選択します。これにより TidalCycle パッケージが Pulsar にインストールされます。詳細については、「Get a Text Editor」セクションの Pulsar ページ を参照してください。

Haskell (ghc) または cabal のインストールが失敗した場合

choco install tidalcycles コマンドを再度実行してみることができます。または、choco を使用して Haskell コンポーネントをインストールしてみることもできます:

choco install ghc
choco install cabal
## バージョン番号がわかっている場合はこれらのコマンドを使用します
choco install ghc --version=9.6.1
choco install cabal --version=3.10.1.0

SuperDirt の完了後にインストーラーがハングする場合

孤立したプロセスを強制終了することで解決できる場合があります。Troubleshooting on Windows ガイドを参照してください。

その他の問題については、Troubleshooting on Windows ページを参照してください。

手動インストール

この方法は、すでに一部のコンポーネントをインストールしているユーザーにお勧めします。以下のすべてのコンポーネントがインストールされていることを確認してください。

Haskell

ghcup (Haskell パッケージインストーラー) をインストールする

詳細については Haskell ghcup を参照してください。支援が必要な場合は YouTube – windows ghcup install を参照してください。
Windows Powershell (admin) で次のコマンドを実行します:

Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; try { Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true } catch { Write-Error $_ }

これにより ghci v9.25 がインストールされるはずです。しかし、Tidal 1.9.3+ は ghc 9.6.1 と cabal 3.10.1.0 で最適に動作します。
powershell (admin) で次のコマンドを実行して、正しい ghc と cabal のバージョンを取得します:

ghcup install ghc 9.6.1
ghcup install cabal 3.10.1.0
ghcup set ghc 9.6.1
ghcup set cabal 3.10.1.0

-- 検証
ghci --version
cabal --version

SuperCollider

SuperCollider Downloads を参照してください。
SuperCollider Readme
Windows Readme

SC3 Plugins

SC3 Plugins は、Tidal Cycles に含まれるシンセサイザーを使用したい場合に必要です。ドキュメントのほとんどの例は引き続き機能しますが、これがないとインストールは不完全になる可能性があります。インストールをスキップすることもできますが、後で必要になった場合はインストールするために戻ってくるようにしてください。

SuperDirt

SuperDirt は Tidal が使用するオーディオエンジンです。これがないと、Tidal Cycles は音を発せず、OSC や MIDI を介して他のシンセサイザーと通信することもできません。
インストールするには、SuperCollider を開き、インタラクティブエディタで次のコマンドを実行します(Ctrl+Return を押して評価します):

Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.7.4"); thisProcess.recompile()})

インストールには少し時間がかかります。インストールプロセスが完了したかどうかは、ログウィンドウで確認できます。おそらく次のような内容が出力されます:

Installing SuperDirt
Installing Vowel
Vowel installed
Installing Dirt-Samples
Dirt-Samples installed
SuperDirt installed
compiling class library...
...
(その後、いくつかの情報が表示され、最後に次のような内容が表示されます:)
...
*** Welcome to SuperCollider 3.12.1. *** For help press Ctrl-D.

Tidal Cycles

Haskell 環境が(上記のように)正しく、ghci v9.6 1 と cabal 3.10.1.0 があることを確認してください。
PowerShell を管理者モードで開きます(上記参照)。
次のコマンドを入力します:

cabal update
cabal v1-install tidal

v2-install tidal は機能しない可能性があるため、必ず v1-install を使用してください。
最後のコマンドは完了までに時間がかかる場合があります。気長にお待ちください。

Pulsar

ダウンロードとインストールについては Pulsar-edit Downloads を参照してください。
または、左側のナビゲーションペインの Installation > Get a Text Editor セクションにある Pulsar ページ に移動してください。
Pulsar を入手したら、TidalCycles プラグインが必要です。Pulsar Package Manager を使用してください。詳細は Pulsar ページ を参照してください。

ヘルプ

インストールで問題が発生した場合のオプションは次のとおりです:

  • このページを注意深く確認し、すべての指示に従っていることを確認してください。
  • SuperCollider や SuperDirt など、個々のコンポーネントの問題については、GitHub の ReadMe ページを確認してください:
  • TidalCycles Discord – Installation Help Channel
    • このチャンネルを検索して、あなたの問題が他の人によって経験されていないか確認してみてください。
    • 詳細(正確な問題、エラーメッセージ、Windows のバージョンなど)を必ず投稿してください。
    • コミュニティから助けを得る方法については、「how to ask」チャンネルを参照してください。
  • Forums – Tidal Club
    • 多くの賢い人々がここにいます。
  • 落胆しないでください!Tidal は複雑なスタックを持っていますが、これらのコンポーネントはすべて実証済みで、堅牢で安定しています。一度すべてが動作するようになれば、ほとんど注意を払う必要はありません。

Windows 7 ユーザーへの注意

Windows 7 を使用している場合は、他のすべてをインストールする前にいくつかの追加の準備が必要です:

  • Windows 7 が最新のパッチで更新されていることを確認してください。
  • .NET 4.5 にインストール/アップグレードしてください。こちら からダウンロードできます。
  • Visual C++ redistributable をインストールしてください。こちら からダウンロードできます。

Tidal Cycles をインストールしました。次は何を?

サイドバーを見てください。Tidal と対話し、演奏を始めるためにインストールできるテキストエディタのリストが表示されます。

SuperDirt を起動する手順に必ず従ってください。


AIを活用したプログラミング入門

スライド資料

本日の内容

今回の講義では、AIとコーディングの実践的な活用法を学びます。まず、p5.jsを題材に簡単なプログラミングの基礎を紹介します。その後、AIを活用したコーディングの三段階を体験します。第1段階ではChatGPTに質問しながらコードを生成する方法を学び、第2段階ではAI機能を搭載したエディターを活用します。最後に、高度なAIとの連携による、より複雑なプロジェクトの可能性を探ります。これにより、AIを駆使した創造的なコーディングの基礎を築くことを目指します。

  • コーディングの題材: p5.jsの簡単な紹介
  • AIによるコーディング 1 : ChatGPTに質問する
  • AIによるコーディング 2 : AI機能を搭載したエディターを使う
  • AIによるコーディング 3 : さらに高度なAIとの連携

コーディングの題材: p5.jsの簡単な紹介

p5.jsとは

Code! Programming with p5.js for Beginners Trailer

https://p5js.org

  • p5.jsは、ビジュアルアートのためのプログラミング言語「Processing」をJavaScriptに移植したものである。
  • ウェブブラウザで直接実行可能
  • アートやデザイン、インタラクティブなメディア作品の制作に適している
  • 初心者でも直感的に使えるシンプルな構文を持ち、プログラミングの学習にも適している
  • 公式サイトには多くのチュートリアルやリファレンスがあり
  • 活発なコミュニティによるサポート

p5.jsでどんなことができるのか – OpenProcessing

OpenProcessing

  • p5.jsを用いたプログラムをオンラインで作成・共有できるサービス
  • 世界中のクリエイティブコーダーが作成した作品がソースコードを含めて閲覧できる!

簡単なプログラム例

function setup() {
  // 画面全体にキャンバス作成
  createCanvas(windowWidth, windowHeight);
}

function draw() {
  // 背景をグレーに
  background(220);
  // 円を描く
  circle(width / 2, height / 2, 400);
}

※ 現段階では全く意味が分からなくてOK!

実行結果

このようなプログラムをAIの力を借りて生成してみましょう!

AIによるコーディング 1 : ChatGPTに質問する

  • おそらく最も手軽に始められる方法
  • ChatGPTにコーディングの質問をするだけ

例:

ブラウザの画面中央に円を描くプログラムを作りたいです。どのようにすればよいでしょうか?

表示領域はフルスクリーンにしてください。使用する開発環境は、p5.jsを使用してください。

ChatGPT 4oに質問してみました。

p5.js を使用してブラウザの画面中央に円を描くプログラムを作成するには、以下のようにコードを書きます。p5.jsは簡単にキャンバスを作成し、グラフィックを描画できるライブラリです。

以下は、フルスクリーンのキャンバスに円を描くシンプルなコードです。

プログラム例

function setup() {
  // ウィンドウサイズに合わせてフルスクリーンキャンバスを作成
  createCanvas(windowWidth, windowHeight);
}

function draw() {
  background(220); // 背景色(薄いグレー)

  // 円の色を設定
  fill(100, 150, 255); // 青系の塗り色
  noStroke(); // 円の境界線をなしに

  // 画面中央に円を描く
  let centerX = width / 2;
  let centerY = height / 2;
  let diameter = 100; // 円の直径

  ellipse(centerX, centerY, diameter, diameter);
}

function windowResized() {
  // ウィンドウサイズが変更されたとき、キャンバスを再調整
  resizeCanvas(windowWidth, windowHeight);
}

コードの説明

  1. setup 関数:
    • createCanvas(windowWidth, windowHeight) を使って、ブラウザウィンドウ全体をキャンバスとして利用。
  2. draw 関数:
    • background(220) で背景を塗りつぶし、リセット。
    • ellipse(centerX, centerY, diameter, diameter) を使い、画面の中心に直径 100 の円を描画。
  3. windowResized 関数:
    • ウィンドウサイズが変更されたときにキャンバスのサイズを自動調整。

実行手順

  1. p5.js Webエディタ を開きます。
  2. 上記のコードをコピーペーストします。
  3. 「再生」ボタンを押すと、ブラウザ画面全体に円が表示されます。

必要に応じて円の色やサイズを変更してみてください!

実行結果 (完璧!!)

実習: ChatGPTによるコード生成を試してみる

  • ChatGPTにp5.jsで生成したいコードをリクスト
  • 冒頭で「p5.jsで」などと制作環境を指定すると良い
  • 生成されたコードをp5.js Web Editorにコピー&ペースト
  • コードを実行してみる

AIによるコーディング 2 : AI機能を搭載したエディターを使う

もっと高度な機能を利用したい!

  • よりインタラクティブに生成結果をみながらAIのサポートを受けたい
  • エラーが発生した際にもAIに助けて欲しい
  • あらかじめ作成したコードをAIに改良して欲しい

p5.CodingWithAIを使ってみる

  • https://app.kyabe.net/p5-coding-with-ai/
  • きゃべ / Masaya Kurahashiさん作
  • ChatGPTとの連携機能を搭載した自作のp5.jsのWebエディタ
  • ユーザーが自然言語でAIにリクエストを送信すると、AIが解説とともにリクエストに合わせたコードを提案する。
  • 提案されたコードを基にユーザーが工夫を凝らし、作品を創作することで、人間とAIの共創の実現性を探求。

詳細な使用方法は、実際にデモをしながら解説していきます!

ちなみに先程と同じChatGPTにした質問をp5.CodingWithAIに送ってみました
→ 完璧!

実習: p5.CodingWithAIでコード生成

  • 最初にプロンプトから基本となるコードを生成
  • もしくは、OpenProcessingなどから気になるコードをピックアップしてコピー&ペースト
  • 質問をくりかえしながら、徐々に自分の好みの生成結果に近づけていく
  • 提案されたコードを受け入れるかは、その都度吟味する
  • 最終的にどのようなコードが完成するのか!?

AIによるコーディング 3 : さらに高度なAIとの連携

Github Copilotを使用してみる

GitHub Copilotは、OpenAIのCodexを基盤としたAIペアプログラミングツールである。主にプログラマーのコード作成を支援することを目的としており、エディタ内でリアルタイムにコード提案を行う。コード補完、関数生成、コメントからのコード生成など、多様な支援機能を備える。主要なIDEやエディタ(Visual Studio Codeなど)に統合可能で、多言語対応であることも特徴である。効率的なコーディングを実現し、初心者から上級者まで幅広いユーザーに対応するツールである。

https://github.com/features/copilot

GitHub Copilotの主な機能

  • コード補完:開発者がコードを入力する際、次に来るであろうコードを予測し、提案する。
  • 関数生成:関数名やコメントから、対応する関数のコードを自動生成する。
  • コメントからのコード生成:自然言語で記述されたコメントを基に、対応するコードを生成する。
  • 多言語対応:Python、JavaScript、TypeScript、Rubyなど、複数のプログラミング言語に対応する。
  • 主要なIDEとの統合:Visual Studio Code、Visual Studio、Neovim、JetBrains製品など、主要な統合開発環境と連携可能である。
  • テストコードの生成:既存のコードに対するテストコードを自動的に生成し、テストの効率化を支援する。
  • コードのリファクタリング提案:既存のコードに対して、より効率的な書き方や改善点を提案する。
  • プルリクエストの概要作成:プルリクエストの変更内容を分析し、その概要を自動生成する。
  • チャット機能:開発者が自然言語で質問や指示を入力すると、AIが適切なコードや情報を提供する。
  • マルチモデル対応:Anthropic、Google、OpenAIなど、複数のAIモデルを選択して利用できる。

Github Copilotを使用するための事前準備

使用のための手順

  1. Githubへのユーザー登録
  2. Github Copilotのトライアル版登録
  3. Visual Studio Codeのインストール
  4. Visual Studio Codeの環境設定

環境設定が完了するとVSCodeとGithub Copilotが統合された最強のコーディング環境が実現されます!

生成された「かわいいキャラクター」!

Github Copilotを使用したコード生成

詳細は、ハンズオン:AIを使ったコード生成 (YCAMワークショップ 2024) の資料を参照してください

次回までの課題

この講義も前半が終了しました。後半は履修者のみなさんそれぞれの専門分野に生成AIを用いた創作を応用できるような内容にしていきたいと考えています。そこで以下のような内容を次週までに考えてきてください。

  • 興味を持った生成AIの分野
    • 文章の生成、チャット
    • 画像生成
    • 動画生成
    • 音楽生成
    • コード生成 …など
  • 自身の専門分野の創作にどのように生かすことが可能そうか
  • 現時点でのこの講義の最終制作に向けてのアイデア

上記の内容を下記のフォームに記入して提出してください。締切は11月20日(木)までとします。

アンケート

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

アンケート


関数によるモジュール化とバリエーション

今回は、関数 (function) についてとりあげます。といっても、ここまでの講義で関数は頻繁に使用してきました。ここまでで使用してきた関数は主に2つの場合に分けられます。

1つ目は、プログラミングしているp5.jsのスケッチからp5.jsのライブラリー内で定義されているの関数を呼び出しです。例えば

//circle()関数の呼び出し
circle(400, 300, 100);

といったp5.jsで実行していた命令は、p5.jsの関数を呼び出していたのです。

参考: p5.jsのソースコード内で定義された circle() 関数

2つ目は、 p5.jsのライブラリーから呼び出されている関数を定義する記述です。これは、setup() や draw() 内で書いていたプログラムに相当します。

参考: p5.jsのソースコード内の setup() を呼び出し

//setup関数の定義
function setup() {  
    createCanvas(windowWidth, windowHeight);
    frameRate(60);
    ...
}

関数はプログラムを処理内容ごとにモジュール化して、プログラムの可読性を高めデバッグを容易にします。

また、関数は引数(arguments)を受け取り、内部の処理のパラメータとして使用することが可能です。このことにより1つの関数で様々なバリエーションを持つことが可能となります。

p5.jsで実際に描画しながら関数について学んでいきましょう。

スライド資料

ランキング (2024)

サンプルコード

本日の課題

関数を用いて作品を制作してください!

課題: 関数 (function) をつかって大量に形を増殖させる

引数によってバリエーションをつけながら何か形を描く関数を作成してください。作成した関数をdraw()関数から呼び出して大量に形を描いてください。

  • 投稿したURLをアンケートから提出
  • 投稿の際に sfc251114 のタグをつけてください!
  • 締切: 2025年11月27日(木)まで!

アンケート

  • 今回も、前回の提出作品の人気投票を行います!
  • 前回のタグsfc251107でOpenProcessingで検索 (検索方法をSketches that are tagged にする必用あり)
  • 一番良いと思った作品に1票投票 (自信があれば自分の作品でも可)