この根から離れて成長する必要性
(vitling.xyz)- コードが和音選択、音の合成、LED反応を同時に指揮するインスタレーションアートの楽譜として機能し、植物の茎のように見える造形物が音と光を繰り返し生成する
- パートAはA2からD5までのMajor, Minor, Major 7th, Minor 7thの和音と転回形を作り、1音だけ異なる和音へ8秒ごとに移動する
- パートBは現在の和音から音を1つ選び、ランダムな波形と長さで再生して、規則的な和音進行の上に予測しにくい単音を重ねる
- 新しい和音や音が発生するたびに茎の形をしたLEDが反応し、各音の色は五度圏で近い音同士が似て見えるようにマッピングされる
- 実装はRaspberry Pi 3 B+のC++オーディオプログラムとArduino UnoのFastLEDによるLED制御に分かれており、2つの装置はシリアルポートで音情報をやり取りする
生成規則で構成された楽譜
- パートAはA2からD5までで可能なMajor, Minor, Major 7th, Minor 7thの和音とすべての転回形を列挙する
- 選択された和音は8秒間再生され、その後は現在の和音と1音だけ異なる和音の1つへ移動する
- この過程は8秒再生と隣接和音の選択を繰り返しながら継続する
音生成の規則
- パートBは現在再生中の和音から音を1つ選択する
- 選ばれた音はランダムな波形で、ランダムな長さのあいだ再生される
- 長さが短い場合はランダムな回数だけ反復され、その後ランダムな時間だけ待ってから同じ過程を繰り返す
照明反応の規則
- パートCはパートAで新しい和音がトリガーされるたびに、各茎を根元から先端まで点灯させる
- 照明の色は和音の各音に対応し、五度圏で隣接する音は似た色相を持つ
- パートDはパートBで音が再生されるたびに、茎の1本の先端をその音に対応する明るい色で照らす
ハードウェアとソフトウェアの実装
- パートAとBはRaspberry Pi 3 B+上で動作するカスタムC++プログラムが担当する
- 音の選択とオーディオバッファの合成をすべて処理する
- パートCとDはArduino Unoボードのカスタムプログラムとして実装される
- FastLEDを使ってWS2812BプロトコルのLEDストリップとインターフェースする
- Raspberry PiからArduinoへ送られる音情報はシリアルポート信号を通じて受け取られる
物理構造と動作方式
- LEDストリップは家庭用水槽に使われる透明チューブの中を通る
- チューブは太いニッケルワイヤーで補強され、造形可能な形状になる
- 植木鉢の下の木製ハウジングには、マイクロコンピュータ、配線、サウンドシステム接続用の3.5mmオーディオジャックが収められている
- 電源は2本の主電源接続を通じて供給される
- コンピュータはヘッドレスで動作し、通電すると自動起動する
1件のコメント
Hacker Newsのコメント
この人は、ブラウザで何時間でもいじっていられる素晴らしい endless acid banger の作者でもある。
https://www.vitling.xyz/toys/acid-banger/
これを試したあと、実際に 303クローン まで買ってあれこれ触り始めた。あと、すべてのデモが無音の「click to start」画面で開き、自動再生の動画もこの記事のようにデフォルトでミュートされている点がよい。
この記事では「silent gif」の上にマウスを載せるまで音量コントロールが見えなかったし、acid bangerではどこでもクリックすればミュートが解除されると気づくまで、コメントを半分も書いてしまっていた。
生成音楽の楽譜 があのような仕様書の形で書かれているのを見るのは興味深い。
十分に詳細なので、その指示をもとに自分版を再実装すれば本質的には同じ「音楽作品」になるだろうが、解釈は間違いなく異なるはずだ。楽譜はある部分を正確に定める一方で、別の選択は開いたままにするからだ。和音を列挙するときの「すべての転回形」が正確には何を意味するのか、オープン・ボイシングまで含むのか、任意波形の長さはどの値から選ぶのか、反復を決めるときの「短い」とはどの程度なのか、どの波形シンセサイザーを使ってどう変調するのか、といった問題が残る。
こうした決定は、伝統的な楽器の演奏者が楽譜を解釈して演奏するときに下す選択に似ている。ここでは生成音楽のコーダーがこの「楽譜」に従い、自分の解釈を込めたプログラムを作ることができる。
Sonic Pi(https://sonic-pi.net/) で実装してみるのは楽しい練習で、作曲家が意図した方向にかなり近いものを作れた気がした。動画の録音と同じ雰囲気を持っているが、言うならばそれはその作品に対する自分の「演奏」でもある。実際に実行時に演奏しているのはSonic Piだが。
この過程で 仕様と実装の関係 についても改めて考えさせられた。アルゴリズムに対する異なるプログラマーの実装は、全体設計という楽譜の個々の「演奏」と見なせるし、より大きなシステムアーキテクチャの要素を作る開発者は、バンドやオーケストラの中で自分のパートを受け持つ演奏者のようにも見える。あるチームは指揮者兼アーキテクトが率い、あるチームは互いにリフを投げ合いながら即興し、ときどきソロを取るような形かもしれない。また別のチームは、プロデューサーの仕様に合わせて派手ではないが堅実に演奏するセッションプレイヤーのようでもある。
日曜の午後にやるのにちょうどよい瞑想的なコーディング練習で、見方を変えてくれた。
昔の作品を展示しようとしたとき、あるアートキュレーターからフィードバックをもらったのだが、その作品がまさに https://www.vitling.xyz/welcome-to-tech-talk/ だった。最初は何が起きているのかよく理解できなかったが、動作の仕組みや内部で起きていることを説明すると、「これで本当に良くなった。でも、観客にとって面白い部分を全部隠してしまっている」と言われた。
生成アート で自分が行っている「作業」は、出力されるオーディオやビジュアルそのものではなく、規則の集合やアルゴリズムに近い。だからこそ、「箱の中」で何が起きているのかを見せる方法をいつも探したくなる。ソースコードはよい場合もあるが、それを読める人にしかそうではないし、核心となるアイデアがボイラープレートや技術的な奇妙さの中に埋もれやすい。そこで楽譜の形で書くという考えに至り、何が起きているのかという基本前提を示しつつ、細部に入り込みすぎて道を見失わない程度にとどめようとした。
https://massmoca.org/event/walldrawing305/
なので、よりオープンで疎なボイシングはかなり除外されると思う。
転回形は和音の響きをかなり大きく変えてくれる。
このアルゴリズムや https://www.vitling.xyz/toys/acid-banger/ を理解するのに役立つ音楽理論の本や講座を勧めてほしい。
かなり単純で、何となくよく聞こえるものを予測できる規則もあれば、もっと複雑な規則もあり、バロック音楽がアルゴリズミックだというのは有名だが、まだまったく感覚がつかめていない。
以前この方向で調べたことはあるが、自分が見た本に何が正確に問題だったのかはよく覚えていない。おそらくほとんどがあまりに初歩的すぎて役に立たなかったのだと思う。ずっと昔にごく基本的なソルフェージュ訓練を受けたことがあり、楽譜も読めるが、当時は今気になっているような質問をしたり、その訓練の目的を理解したりするには幼すぎた。
結局のところ、自分でたくさん音楽を書いてみないと音楽理論を理解するのは難しい。JavaScript の本を読むのに似ていて、ソフトウェアを一度も書いたことがなく、今後も書くつもりがないなら、その本を本当に理解する方法はない。
このアプリケーションがどう動いているかを説明すると、短調における音の部分集合、つまり音階度をおそらくランダムに選んでいるのかもしれない。音階のうち 5 音以下の部分集合であるペンタトニック音階は、可能なメロディ空間を制限することで、たいていの構成がよく聞こえるようにする。使う音が少ないほど、より予測可能で聞き心地はよくなるが、面白さは減るかもしれない。たとえば主和音を構成する音は、どんな順序で演奏しても常によく聞こえる。acid ラインは通常、特定の和音の音だけでできた反復メロディであるアルペジオを通じて、ある短調の和音を示唆する。
また、ある音階の部分集合は常に別の音階にも含まれうる。共有された音の部分集合を使う区間を作ってから新しい音階へ切り替えれば、ある音階から別の音階へ転調できる。このやり方なら 1 曲の中で取りうるすべての音階を巡ることができ、acid techno ではそのほとんどが短音階になる。
今の自分より高い理解を持つ人向けに書かれたものを手に取っても、多くを得ることはできない。各ページをゆっくり、意図的に、謙虚に読み進め、出会うそれぞれの用語を完全に理解するのに時間をかける必要がある。その過程で何時間も寄り道することになり、そこからさらに別の用語が枝のように際限なく広がっていく。音程や locrian / lydian のような言葉を飛ばして、浸透圧のように理解できることを期待してはいけない。
音高とは何か、なぜ脳が特定の音高の組み合わせを「好み」、別の組み合わせを嫌うのか、などを扱っている。音楽神経学に関するさまざまな理論そのものも興味深い本で、前半にはごく基本的な理論の紹介もある。
作者へのヒントとしては、Arduino を外して Raspberry Pi でWS281x ストリップを直接制御できるこのライブラリを使えば、ハードウェアとソフトウェアの複雑さを大きく減らせる: https://github.com/jgarff/rpi_ws281x
私は Pi 4 でこれを使って、家のひさし飾りに取り付けた 466 ピクセルの WS2815 ストリップをホリデー装飾用に制御している。
このプロジェクトには面白い音楽理論が隠れている。説明されたアルゴリズムでは、ある和音から別の和音へのすべての遷移は、同じ和音への遷移、たとえば C メジャーからその転回形に移る、あるいは 7 度音を追加・削除する場合か、Neo-Riemannian 理論における 3 つの基本変換 P、L、R のいずれかである。
詳しくは Neo-Riemannian theory の Wikipedia ページを見ればよいが、P、L、R の要点はこうだ。任意の和音 x がメジャーなら、P(x)、L(x)、R(x) はすべてマイナーになる。x がマイナーなら、P(x)、L(x)、R(x) はすべてメジャーになる。P、L、R はいずれも自己逆変換なので、P(P(x)) = x であり、L と R も同様である。P、L、R 変換のどんな列を通しても、任意のメジャーまたはマイナー和音から別の任意のメジャーまたはマイナー和音へ行ける。たとえば C メジャーから L の次に R を適用すると G メジャーになり、R の次に P を適用すると A メジャーになり、L の次に P を適用すると E メジャーになる。
Neo-Riemannian 変換で移動することは、滑らかな声部進行を通じて「遠い」調性中心、つまり開始調と共通する音階音があまり多くない場所へすばやく行く方法である。ところがこの曲を聴くと、和声が比較的安定して感じられたので驚いた。興味深いのは、アルゴリズムの構成上、P 変換は L や R 変換、あるいは同じ和音にとどまる場合よりもはるかに少ないことだ。P 変換は遠い調性へすばやく移動するための重要な材料だが、私の大まかな計算では、Markov 過程が定常状態に達していると仮定し、最低音高・最高音高の制限を無視すると、すべての和音変化のうち P 変換は 27 分の 1 にすぎない。定常状態では、7 の和音が単純な 3 和音より 16:11 の比率でより多く現れることも分かる。
Raspberry Pi の限界をもっと知りたいので、技術的な詳細が気になる。
これらすべてを Raspberry Pi 1 台と、そこに接続された多数のGPIO ピンだけで処理することはできなかったのだろうか。今は Raspberry Pi の活用がやや不足しているように感じられ、単一ボードに簡素化したほうがよく見える。電源接続も 1 つで済むという利点がある。
Pi がやっていることが「音の選択とオーディオバッファ自体の合成」だけなら、Arduino Uno でも十分できるのではないか。
誰もが理解できるように擬似コードで書かれているのが良い。
私もこういうプロジェクト、特に音楽生成の部分をやったことがあるので、こういう提示の仕方が本当に気に入った。動画デモまであればさらに良いし、多くのコードプロジェクトは作者が長いテキストの壁だけで説明するので、始める前に力尽きてしまう
本当に素晴らしい。こういうものを作るための詳細な制作ガイドがあるといい
Four Tetのセットのイントロに使えそう :)
美しい。植物がこんなふうになっている異星の惑星を想像してしまう。
こういうものが森を成して、メトロノームやホタルが同期するように互いに調和することもありそう