TidalCycleでここまで使用してきた方法では、サンプリング(録音)したサウンドファイルを演奏してきました (cp hc bdなど) 。これは楽器に例えるなら、サンプラーを演奏している状態です。TidalCyclesではこの他にシンセサイザーのように音の波形を合成して演奏する「楽器」も用意されています。このシンセサイザーの機能はSuperCollider内で楽器 (Synth) として定義されていて、自分自身でプログラミングすることでオリジナルの楽器を作成することも可能です。今回の授業の前半はこのTidalCyclesのシンセサイザーの機能に着目していろいろ実験していきます。
シンセサイザーを使用するには、SuperColliderにSC3 Pluginsがインストールされている必要があります。下記のリンクから最新版のものをダウンロードして所定の場所にインストールしてください。
参考:
シンセサイザー
VIDEO
Sequential Circuits Prophet 5 (アナログシンセサイザー)
VIDEO
YAMAHA DX-7 (デジタルシンセサイザー)
VIDEO
Eurorack (モジュラーシンセサイザー)
スライド資料
アンケート
本日の講義を履修した方は以下のアンケートに回答してください。
※ 旧カリ「サウンドプログラミング」「環境情報デザイン」で履修の方はこちら
サンプルコード
TidalCycles
-- シンプルにシンセを鳴らしてみる
d1
$ s "supersaw*4"
# note 0
-- 音階で指定 シャープ
d1
$ s "supersaw*4"
# note "cs5"
-- 音階で指定 フラット
d1
$ s "supersaw*4"
# note "df5"
-- シンセの音色の種類を変えてみる
d1
$ s "supersaw superpwm supersquare superzow"
# note 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"
# note "0 4 5 7"
-- ランダムな音階
d1
$ s "supersaw*8"
# note (irand 12)
-- 短かい持続
d1
$ s "supersaw*8"
# legato "0.5"
# note (irand 12)
-- 短かい持続と長い持続
d1
$ s "supersaw*8"
# legato "<0.5 1.2>*8"
# note (irand 12)
-- メロディーを生成してみる
d1
$ s "supersaw(11, 16)"
# legato "<0.5 1.5>*8"
# note "{c4 e4 f4 g4 b4}%11"
|+ note "[0, 7, 12]"
-- メロディーを生成+変形
d1
$ jux (iter 16)
$ s "supersaw(11, 16)"
# legato "<0.5 1.5>*8"
# note "{c4 e4 f4 g4 b4}%11"
|-note "0 12"
|+note "[0, 7, 12]"
-- メロディーを生成+変形+エフェクト
d1
$ jux (iter 16)
$ s "supersaw(11, 16)"
# legato "<0.5 1.5>*8"
# note "{c4 e4 f4 g4 b4}%11"
|- note "0 12"
|+ note "[0, 7, 12]"
# lpf(range 100 12000 $rand)
# resonance "0.2"
# delay "0.5" # delaytime "0.25"
# delayfeedback "0.7"
Strudel (1行ごとにコピペして使用)
// シンプルにシンセを鳴らしてみる
$: s("supersaw*4").note(60)
// 音階で指定
$: s("supersaw*4").note("c4")
// 半音階、シャープ
$: s("supersaw*4").note("cs4")
// 半音階、フラット
$: s("supersaw*4").note("db4")
// シンセの音色の種類を変えてみる
$: s("supersaw sine square triangle").note(60)
// 音階を弾く
$: s("supersaw*4").note("c d e f")
// ランダムな音階
$: s("supersaw*4").note(irand(12).add(40))
// 短かい持続
$: s("supersaw*4")
note(irand(12).add(40)).legato(0.2)
// 短かい持続と長い持続
$: s("supersaw*4")
.note(irand(12).add(40)).legato("<0.2 1.0>*4")
// メロディーの生成
$: s("supersaw*8")
.legato("<1.2 0.5>*8")
.note("<c4 e4 f4 g4 b4>*8"
// メロディーの生成
$: s("supersaw*8")
.legato("<0.5 1.2>*8")
.note("<c4 e4 f4 g4 b4>*8"
.add("0 -12")
.add("[0, 7, 12]"))
// メロディーの生成2
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12], 24"))
// メロディー + フィルター + エフェクト
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12]"))
.lpf("<400 2000 1200 8000>*8").delay(0.75).delaytime(0.125)
// メロディー + フィルター + エフェクト その2
$: s("supersaw(11, 16)")
.note("{40 47 52}%21"
.add("[0, <5 7 -5>]")
.add("<0 12 -12 24>*4"))
.lpf(sine.segment(32).range(400, 8000)).resonance(12)
.delay(0.75).delaytime(0.125).delayfeedback(0.7)
// メロディー + フィルター + エフェクト + リズム
$: s("supersaw(5, 16, [0, 5, 12])")
.note(
"<c d e f g a>*2"
.add("[0, <12 -12>]")
.add("[0, 7, 12]")
.add("<-12 -12 -12 0>/8")
)
.legato("<0.5 1.7>*2")
.delay(0.75).delaytime(0.625).delayfeedback(0.5)
.lpf(sine.segment(32).range(100, 8000)).resonance(10)
$: s("bd(3, 8), [~ hh]*4")
.bank("RolandTR909")
.gain(1.3)
Shaderとは、もともとは3Dコンピュータグラフィクスで、シェーディング (陰影処理) をするプログラムのことを指していました。従来は、開発者やデザイナーは、グラフィクスカード (GPU) に固定機能として実装された定形の処理しか使えませんでした (固定機能シェーダー)。2000年代に入って、プログラマブル・シェーダーが登場します。これまでブラックボックスだったシェーダー自体が、プログラム可能になりました。OpenGLではGLSLというプログラミング言語が策定されシェーダーをプログラムすることが可能です。画面上の膨大なピクセル情報を、高い並列処理性能を持つGPUで実行することにより、CPUで実行するよりもはるかに高いパフォーマンスを実現できるようになりました。
TouchDesignerでは、GLSL TOPを使用してGLSLを記述してテクスチャーとして書き出すことが可能です。今回はTochDesignerでのGLSLの使用法の導入を行います。
スライド資料
サンプルプログラム
本日の課題
今回の講義資料およびサンプルプログラムを参考にして、GLSLを使用した表現をTouchDesignerを用いて行ってください。今回の内容は少し難しいので、サンプルのプログラムの色などを変えるだけでもOKです!
課題提出 + アンケート
本日の課題の提出は下記から行ってください。
スライド資料
本日の内容
今回からこの講義の最終課題のヒントになるような内容を紹介していきます。初回の本日は、難易度的には易しい制作例を紹介します。作品の制作例は「生成コレクション」と名付けました。制作にはDALL-Eなどの画像生成AIを使用します。生成AIの特徴である一つのプロンプトから大量のバリエーションのインスタンスを生成できるという性質を利用して、特定のテーマで生成した画像をコレクションして展示します。最初に参考となる作品例を紹介した後で、具体的な制作方法について解説していきます。
生成コレクション
「生成コレクション」概要
画像生成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)
参考: 画像生成AIのサービス
参考: 画像生成AI導入 (過去講義資料)
実習: Figmaを使用して「生成コレクション」を作成
Figma
https://figma.com
ブラウザベースのコラボレーション・ツール
デスクトップ版やモバイル版もあり
もともとはインターフェイス (UI) のデザインに特化していたが、グラフィクスデザインツールとしても使用可能
コラボレーション機能
学生であれば無料で使用可能! (ただし資格認定を受ける必要あり)
「生成コレクション」制作用テンプレート
こんな感じで作成可能です!
アンケート
本日の講義に参加した方は以下のアンケートに回答してください。
パーティクル (Particle) またはパーティクルシステム (Particle System) とは、たくさんの細かいスプライト画像、3Dモデル、またはその他のCGオブジェクトを使って、様々な現象をシミュレーションする表現手法です。パーティクルを用いて炎、爆発、煙、流水、火花、落葉、雲、霧、雪、埃、流星、毛髪、毛皮、草地など様々な現象や物体のふるまいをシミュレーションすることが可能です。
TouchDesingerでは、Particle SOPを用いることでとても簡単にパーティクルの生成と制御が可能です。また、生成したパーティクルにスプライト画像を適用したり、ジオメトリインスタンシングを用いてパーティクルの一粒ごとに3Dオブジェクトを配置することも可能です。今回はTouchDesingerのパーティクル表現についていろいろ実験していきます。
スライド資料
サンプルプログラム
本日の課題
今回の講義資料およびサンプルプログラムを参考にして、パーティクルを使用した表現をTouchDesignerを用いて行ってください。
課題提出 + アンケート
本日の課題の提出は下記から行ってください。
今回は、関数 (function) についてとりあげます。といっても、ここまでの講義で関数は頻繁に使用してきました。ここまでで使用してきた関数は主に2つの場合に分けられます。
1つ目は、プログラミングしているp5.jsのスケッチからp5.jsのライブラリー内で定義されているの関数を呼び出しです。例えば
//circle()関数の呼び出し
circle(400, 300, 100);
といったp5.jsで実行していた命令は、p5.jsの関数を呼び出していたのです。
2つ目は、 p5.jsのライブラリーから呼び出されている関数を定義する記述です。これは、setup() や draw() 内で書いていたプログラムに相当します。
//setup関数の定義
function setup() {
createCanvas(windowWidth, windowHeight);
frameRate(60);
...
}
関数はプログラムを処理内容ごとにモジュール化して、プログラムの可読性を高めデバッグを容易にします。
また、関数は引数(arguments)を受け取り、内部の処理のパラメータとして使用することが可能です。このことにより1つの関数で様々なバリエーションを持つことが可能となります。
p5.jsで実際に描画しながら関数について学んでいきましょう。
スライド資料
ランキング
おめでとうございます!!
映像資料
VIDEO
サンプルコード
本日の課題
関数を用いて作品を制作してください!
課題: 関数 (function) をつかって大量に形を増殖させる
引数によってバリエーションをつけながら何か形を描く関数を作成してください。作成した関数をdraw()関数から呼び出して大量に形を描いてください。
投稿したURLをアンケートから提出
投稿の際に sfc241129 のタグをつけてください!
締切: 2023年12月6日(水)まで!
アンケート
今回も、前回の提出作品の人気投票を行います!
前回のタグsfc241115 でOpenProcessingで検索 (検索方法をSketches that are tagged にする必用あり)
一番良いと思った作品に1票投票 (自信があれば自分の作品でも可)
TidalCyclesのインストールが完了したので、いよいよ今回からTidalCyclesを用いたライブコーディングを始めていきます!
TidalCyclesはHaskellというプログラミング言語のライブラリーです。Haskellは「関数型プログラミング言語」に分類されるプログラミング言語で、これまで習ってきたProcessing (JAVA) やJavaScript、C++などとはその言語のパラダイムが大きく異なります。しかし、TidalCyclesを使用する目的に限定すれば、Haskellの言語自体を詳しく習得する必要はありません。あくまでパターンを生成する関数の使用方法に精通すれば良いのです。
今回は、TidalCyclesでのパターン生成の基本をステップバイステップで解説していきます。
スライド資料
アンケート
本日の講義に出席した方は以下のアンケートに答えてください。
サンプルコード
----------------------------------
--
-- TidalCycles基本
--
----------------------------------
-- シーケンス
d1 $ sound "bd"
-- 同じ種類のサウンドのバリエーション
d1 $ sound "bd"
d1 $ sound "bd:1"
d1 $ sound "bd:2"
d1 $ sound "bd:3"
d1 $ sound "bd:4"
-- 複数のサンプル
d1 $ sound "bd sn"
-- リズムのくりかえし
d1 $ sound "bd sn"
d1 $ sound "hh hh hh hh"
d1 $ sound "arpy"
-- サンプルの数を増やしてみる
d1 $ sound "bd sn"
d1 $ sound "bd sn hh cp mt arpy drum"
d1 $ sound "bd sn hh cp mt arpy drum odx bd arpy bass2 feel future"
-- 休符
d1 $ sound "bd cp ~ hh"
-- 演奏の停止
d1 silence
hush
-- サブシーケンス
d1 $ sound "[bd sn sn] cp"
d1 $ sound "bd [sn sn]"
d1 $ sound "bd [sn sn sn]"
d1 $ sound "bd [sn sn sn sn]"
d1 $ sound "[bd bd] [sn sn sn sn]"
d1 $ sound "[bd bd bd] [sn sn]"
d1 $ sound "[bd bd bd bd] [sn]"
-- サブシーケンスの入れ子
d1 $ sound "[bd bd] [bd [sn [sn sn] sn] sn]"
-- レイヤー化 (同時並行に演奏)
d1 $ sound "[bd bd bd, sn cp sn cp]"
d1 $ sound "[bd bd bd, sn cp sn cp, arpy arpy, odx]"
d1 $ sound
"[bd bd bd, [sn sn] cp, arpy [arpy [arpy arpy] arpy arpy], odx]"
-- くりかえし
d1 $ sound "bd*2"
-- n回に一度演奏
d1 $ sound "bd/2"
d1 $ sound "[bd sn]*2 cp"
d1 $ sound "[bd sn] cp/2"
d1 $ sound "[[bd sn] cp]*2"
d1 $ sound "[[bd sn] cp]/2"
-- パターンの中のパターン
d1 $ sound "[bd sn sn*3]/2 [bd sn*3 bd*4]/3"
d1 $ sound "[bd [sn sn]*2]/2 [bd [sn bd]/2]*2"
-- 反転
d1 $ rev $sound "[bd bd] [bd [sn [sn sn] sn] sn]"
-- 反転: 複雑な例
d1 $ every 4 (rev) $ sound "bd*2 [bd [sn sn*2 sn] sn]"
-- スローダウン
d1 $ slow 4 $ sound "bd*2 [bd [sn sn*2 sn] sn]"
-- スピードアップ
d1 $ density 4 $ sound "bd*2 [bd [sn sn*2 sn] sn]"
-- $ と ()
d1 $sound "bd cp"
d1 (sound "bd cp")
-- 全て同じ構造
d1 $ every 4 (density 4) $ sound "bd*2 [bd [sn sn*2 sn] sn]"
d1 $ every 4 (density 4) (sound "bd*2 [bd [sn sn*2 sn] sn]")
d1 (every 4 (density 4) (sound "bd*2 [bd [sn sn*2 sn] sn]"))
d1 $ sound (every 4 (density 4) "bd*2 [bd [sn sn*2 sn] sn]")
d1 (sound (every 4 (density 4) "bd*2 [bd [sn sn*2 sn] sn]"))
-- エフェクト: 音量
d1 $ sound "bd*4" # gain "0.5"
-- 複数のエフェクト: 音量、ディレイ
d1 $ sound "bd*4" # gain "0.5" # delay "0.5"
-- エフェクトのシーケンス
d1 $ sound "bd*4" # gain "1 0.8 0.5 0.7"
d1 $ sound "bd*4 sn*4" # gain "[[1 0.8]*2 [0.5 0.7]]/2"
d1 $ sound "bd*4" # gain (every 3 (rev) $ "1 0.8 0.5 0.7")
d1 $ gain "1 0.8 0.5 0.7" # sound "bd"
-- サンプルの再生スピード
d1 $ sound "arpy" # speed "1"
d1 $ sound "arpy" # speed "0.5"
d1 $ sound "arpy" # speed "2"
-- 再生スピードのシーケンス
d1 $ sound "arpy*4" # speed "1 0.5 2 1.5"
d1 $ sound "arpy*4" # speed "-1 -0.5 -2 -1.5"
d1 $ sound "arpy*12" # up "0 1 2 3 4 5 6 7 8 9 10 11"
-- アルペジオ
d1 $ sound "arpy*12" # up (run 12)
-- ランダムな音階
d1 $ sound "arpy*12" # up (irand 12)
-- 以上です!!
hush
スライド資料
本日の内容
今回の講義では、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とは
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);
}
コードの説明
setup
関数 :
createCanvas(windowWidth, windowHeight)
を使って、ブラウザウィンドウ全体をキャンバスとして利用。
draw
関数 :
background(220)
で背景を塗りつぶし、リセット。
ellipse(centerX, centerY, diameter, diameter)
を使い、画面の中心に直径 100 の円を描画。
windowResized
関数 :
ウィンドウサイズが変更されたときにキャンバスのサイズを自動調整。
実行手順
p5.js Webエディタ を開きます。
上記のコードをコピーペーストします。
「再生」ボタンを押すと、ブラウザ画面全体に円が表示されます。
必要に応じて円の色やサイズを変更してみてください!
実行結果 (完璧!!)
実習: ChatGPTによるコード生成を試してみる
ChatGPTにp5.jsで生成したいコードをリクスト
冒頭で「p5.jsで」などと制作環境を指定すると良い
生成されたコードをp5.js Web Editorにコピー&ペースト
コードを実行してみる
AIによるコーディング 2 : AI機能を搭載したエディターを使う
もっと高度な機能を利用したい!
よりインタラクティブに生成結果をみながらAIのサポートを受けたい
エラーが発生した際にもAIに助けて欲しい
あらかじめ作成したコードをAIに改良して欲しい
p5.CodingWithAIを使ってみる
詳細な使用方法は、実際にデモをしながら解説していきます!
ちなみに先程と同じ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を使用するための事前準備
使用のための手順
Githubへのユーザー登録
Github Copilotのトライアル版登録
Visual Studio Codeのインストール
Visual Studio Codeの環境設定
環境設定が完了するとVSCodeとGithub Copilotが統合された最強のコーディング環境が実現されます!
生成された「かわいいキャラクター」!
Github Copilotを使用したコード生成
詳細は、ハンズオン:AIを使ったコード生成 (YCAMワークショップ 2024) の資料を参照してください
次回までの課題
この講義も前半が終了しました。後半は履修者のみなさんそれぞれの専門分野に生成AIを用いた創作を応用できるような内容にしていきたいと考えています。そこで以下のような内容を次週までに考えてきてください。
興味を持った生成AIの分野
文章の生成、チャット
画像生成
動画生成
音楽生成
コード生成 …など
自身の専門分野の創作にどのように生かすことが可能そうか
現時点でのこの講義の最終制作に向けてのアイデア
上記の内容を下記のフォームに記入して提出してください。締切は11月28日(木)までとします。
アンケート
本日の講義に参加した方は以下のアンケートに回答してください。
TidalCycles手動インストール – Windows がうまくいかない方のための資料です。
「Chocolatey」というWindowsのパッケージ管理システムを使用した自動インストールの手順の説明です。
事前準備
一度手動インストールをトライした方は、以下の操作で一度インストールしたファイルやアプリケーションを削除してください。
1. SuperColliderのアンインストール
「Windowsメニュー > 設定 > アプリ > インストールされているアプリ」を選択してSuperColliderを検索します。表示されたリストを右クリックして「アンインストール」を選択してアンインストールしてください。
2. Cabal、Ghcup、Haskellのアンインストール
C:ドライブ直下にある「cabal」「ghcup」フォルダをフォルダごと削除します。
自動インストールの手順
1. PowerShellを管理者として起動
Windowsキーを右クリックしてポップアップメニューを表示
「Terminal (管理者)」または「Power Shell (管理者)」または「コマンドプロンプト (管理者)」を選択します。
2. Chocolateyのインストール
PowerShellに以下のコマンドを入力して、Enterキーを押して実行します。
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
3. TidalCyclesのインストール
PowerShellに以下のコマンドを入力して、Enterキーを押して実行します。
choco install tidalcycles
途中で以下の確認の表示が出たら、「a」キーを押してEnterしてください。
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint):
注意: 完全なインストールには時間がかかります (30 分以上)。最後まで実行するのが最善ですが、完了せずに終了した場合や中止する必要がある場合は、このコマンドを再度実行してみてください。Choco は、すでに完了しているパッケージの依存関係をスキップします。
4. 動作確認
SuperColliderのブート
プログラムリストからSuperColliderを選択して起動します。
右下の「Server」と書いてある欄をクリックしてポップアップメニューを表示します。
Boot Serverを選択してサーバーをBootします。
サーバーが起動したら、左側のエディター画面に以下のコマンドを入力します
SuperDirt.start
行末にカーソルを移動して「Control + Enter」キーを入力します
Pulserの起動
アプリケーションのリストから「Pulser」を起動します (SuperColliderは起動したままで)
新規にファイルを開き、「test.tidal」というファイル名で保存します。(※拡張子を必ず .tidal にすること!)
作成したファイルに以下のコマンドを入力して音が鳴ればOKです
d1 $ s "cp*4"
TouchDesigner中級編の3回目となる今回は、前回に引続きオーディオリアクティブな表現を探求します。前回は波形の情報からRMS (二乗平均平方根) を算出して音量によるビジュアライズを行いました。しかし、音量の情報だけではビジュアライズの限界があります。
実は我々の耳は音を波形ではなく、周波数に分解して知覚しています。ですので、波形をそのま操作して表示しても、あまり音と一致した映像にはなりません。音を周波数の帯域ごとの音の成分に分解するには、フーリエ変換という手法を用います。これにより、音を周波数帯域ごとの強さにわけて取得することが可能となります。フーリエ変換は、コンピュータ内で高速に処理する高速フーリエ変換(FFT)というアルゴリズムが考案され、現在ではPC内でリアルタイムに変換していくことが可能です。今回は、このフーリエ解析を利用して、TouchDesignerで音を可視化してみましょう。
スライド資料
サンプルプログラム
本日の課題
今回の講義資料およびサンプルプログラムを参考にして、スペクトル解析を使用した音響のビジュアライズをTouchDesignerを用いて行ってください。
課題提出 + アンケート
本日の課題の提出は下記から行ってください。
本日の内容
本日は、まず生成動画「幻覚 – バッド・トリップ」の講評を行います。次に本日はAIを活用した音楽制作について解説していきます。まず始めに生成AIを用いた音楽創作のための技術について、様々な実例や作品を紹介します。最後に実習としてSuno AIを用いてAIによる音楽生成に挑戦します。
スライド資料
生成動画「幻覚 – バッド・トリップ」講評
今回も提出用のオンラインフォームを作成しました! 以下のリンクからアクセスしてください。
生成した動画ファイルをアップロードしてください (最大5個)
動画ファイル名は「学籍番号_名前_番号.拡張子」の形式で保存してください
(例: 12345678_tadokoro_01.mov)
AIと音楽制作
生成AIによる音楽の創作
徳井直生 – AI DJ Projectは、人工知能(AI)と人間のDJが交互に曲をかけ合う「バック・トゥ・バック」形式のライブパフォーマンス。AIはディープラーニング技術を活用し、曲の選択やミックスを行う。このプロジェクトは、AIと人間の対話を通じて新たな音楽的創造性を探求する試みであり、国内外で注目を集めている。
2018年に発表された「Godmother」は、Holly HerndonとJlinが共同制作し、AI「Spawn」を活用した楽曲である。Spawnは、Herndonと彼女のパートナーであるMat Dryhurstが開発した人工知能であり、Jlinの音楽スタイルを学習し、Herndonの声で再現することを試みた。このプロジェクトは、AIが人間の創造性とどのように共存し、新たな音楽表現を生み出せるかを探求する試みとして注目された。
参考:
Brien Eno – Reflextion
VIDEO
ブライアン・イーノのアルブライアン・イーノ(Brian Eno)が『Reflection』で行う自己省察 バム『Reflection』は、ジェネラティブ・ミュージックの手法を用いて制作された。彼は複数のサウンドやフレーズを集め、それらに特定のルールを設定し、システムを作動させることで、常に異なる音楽を生成することを目指した。このプロセスは、AIの自動生成的なアプローチと類似しており、イーノは自身の役割を作曲家からプログラマーや観察者へと変化させ、音楽の生成過程を楽しんだ。
参考: ブライアン・イーノ(Brian Eno)が『Reflection』で行う自己省察
The Beatles – Now And Thenは、ジョン・レノンが1970年代後半に自宅で録音したデモテープを基に、AI技術を活用して完成された楽曲である。当時の技術では、ピアノとボーカルの分離が困難であったが、最新のAIを用いることで、レノンの声をクリアに抽出することが可能となった。これにより、ポール・マッカートニーとリンゴ・スターが新たな演奏を加え、ビートルズの最後の楽曲として2023年にリリースされた。
参考: ビートルズ最後の新曲「Now and Then」はどうやって作られたのか
その他の事例
AI技術が音楽制作に与える影響を分析している。AIはステムの分離やボーカルのディープフェイクなど、従来の制作ツールに新たな可能性をもたらしている。しかし、音楽制作におけるAIの活用は、創造性や所有権、信頼性に関する議論を引き起こしている。記事は、AIが人間の創造性を脅かすのか、それとも増大させるのかを探求し、音楽制作の未来を見据えている。
音楽生成ツールとしての生成AI
NSynth Superは、GoogleのMagentaプロジェクトとDeepMindが共同開発したシンセサイザーである。このシンセサイザーは、機械学習アルゴリズム「NSynth」を活用し、既存の楽器音を組み合わせて新たな音色を生成することが可能である。NSynthは、WaveNetスタイルのオートエンコーダーを使用し、約30万の楽器音データセットから学習を行う。NSynth Superは、タッチスクリーンを備えたハードウェアインターフェースを持ち、ユーザーは4つの異なる音源を選択し、それらを組み合わせて新しい音色を直感的に作成できる。このプロジェクトは、オープンソースとしてGitHub上で公開されており、誰でも自作可能である。NSynth Superの登場により、AIを活用した音楽制作の新たな可能性が広がり、アーティストやクリエイターに革新的なツールを提供している。
Neutone Morphoは、株式会社Neutoneが開発した機械学習ベースのオーディオプラグインである。このプラグインは、入力された音を別の音に瞬時に変換する新しいタイプのエフェクターであり、例えば、声をバイオリンやジャンベの音にリアルタイムで変換することが可能である。Neutone Morphoは、AI技術を活用して音楽制作に革新をもたらし、アーティストやクリエイターの創造性を拡張することを目指している。このプラグインの開発は、AIと音楽の融合を推進する株式会社Qosmoの代表であり、Neutoneの設立者でもある徳井直生氏が主導している。Neutone Morphoのリリースにより、音楽制作の現場でAIを活用した新たな表現手法が広がり、音楽業界におけるAIの可能性を示す重要なステップとなっている。
2024年、グラミー賞受賞アーティストのジェイコブ・コリアーは、Google DeepMindおよびGoogle Labsと協力し、AI音楽生成ツール「MusicFX DJ」の開発に携わった。このツールは、ユーザーが楽器、ジャンル、感情などのプロンプトを組み合わせることで、リアルタイムに音楽を生成し、AIを活用した即興演奏を可能にする。コリアーは、直感的な操作性と創造性を重視し、初心者からプロまで幅広いユーザーが利用できるよう設計に貢献した。また、生成された音楽は他者と共有・リミックス可能で、共同制作の新たな形を提案している。
音楽生成AIを使ってみる!
Google MusicFX DJ
Googleの「MusicFX DJ」は、AIを活用した音楽生成ツールである。ユーザーはテキストでジャンルや楽器、雰囲気などを指定することで、リアルタイムに音楽を生成・操作できる。直感的なインターフェースにより、音楽制作の専門知識がなくても、誰でも簡単にオリジナルの楽曲を作成可能である。また、生成した音楽はダウンロードや共有が可能であり、創造的なコラボレーションを促進する。
Suno AI
Suno AIは、テキスト入力に基づき音楽を自動生成するAIツールである。ユーザーが入力した歌詞や曲のイメージに応じて、ボーカルや楽器、バックトラックを含む楽曲を作成することが可能である。日本語にも対応しており、日本語の歌詞を用いた楽曲制作も容易である。無料プランでは1日最大10曲の生成が可能で、商用利用を希望する場合は有料プランへの加入が必要である。2024年5月のアップデートにより、最大4分の楽曲生成が可能となり、機能が大幅に向上した。ただし、著作権に関する問題も指摘されており、商用利用時には注意が必要である。
Suno AIを活用して音楽を生成する際の主な方法
テキストプロンプトの入力:楽曲のテーマや雰囲気をテキストで指定し、AIに楽曲を生成させる。
歌詞の入力:ユーザーが作成した歌詞を入力し、それに基づいてメロディや伴奏を生成する。
ジャンルの選択:ポップ、ジャズ、クラシックなど、希望する音楽ジャンルを選択して、特定のスタイルの楽曲を生成する。
カスタムモードの活用:テンポ、楽器構成、ボーカルスタイル、楽曲の長さなど、詳細な設定を行い、より個別化された楽曲を作成する。
インストゥルメンタルの生成:ボーカルなしの楽曲を生成するために、インストゥルメンタルオプションを選択する。
楽曲の延長:生成された楽曲をさらに延長し、より長い楽曲を作成する。
参考: Neutone Morpho
Neutone Morphoは、最先端の機械学習技術を活用したリアルタイムのトーンモーフィングプラグインである。入力された音声を異なる音色やスタイルに変換し、新たなサウンドを創出することが可能である。例えば、ユーザーの声をバイオリンの音色に変換したり、日常の物音をドラムセットの音に変換することができる。このプラグインは、事前にトレーニングされたAIモデルを使用し、入力されたオーディオをリアルタイムで変換する。無料版では4種類のモデルが利用可能であり、有料版では追加のモデルやカスタムモデルの作成も可能である。 Neutone Morphoは、Mac(Apple Siliconネイティブサポート)およびWindowsで動作し、AU/VST3形式に対応している。ユーザーは、DAW上でリアルタイムに音声を変換し、創造的な音楽制作を行うことができる。
Neutone Morphoの主な機能
リアルタイムのトーンモーフィング:入力された音声をリアルタイムで異なる音色やスタイルに変換する。
多様なAIモデルの利用:事前にトレーニングされたモデルを使用し、ドラム、声、コーラス、バイオリン、エフェクトなど多彩なサウンドに変換可能。
カスタムモデルの作成:独自の音声データを用いて、ユーザー専用のAIモデルをトレーニングし、オリジナルのサウンドを生成できる。
マクロおよびマイクロビューの操作:マクロビューでは4つのノブでモデルの一般的な動作を調整し、マイクロビューでは詳細なパラメータを微調整可能。
プリ/ポストプロセッシング機能:ピッチシフト、フィードバックディレイ、コンプレッサー、ノイズゲート、リミッターなどのDSP機能を搭載し、最適な音質を実現。
実習: 生成AI映像に音楽をつける
前回作成した生成動画「幻覚 – バッド・トリップ」の映像に音楽をつけてみる
まずは映像にあわせた音楽の生成に挑戦
もし可能な人は、映像編集アプリで映像に音を入れてみる
Davinch Resolve
Adobe Premir
Apple Final Cut Pro … など
アンケート
本日の講義に参加した方は以下のアンケートに回答してください。
https://x.gd/Ta35P