1行の音楽プログラムの深い分析

(11/2 下記に修正部分の履歴を追記しています)
この文章はTarkastele kokoさんのブログを訳したものです。精度の高い訳(今回は難しかった)ではありませんので原文などと一緒に読まれることを勧めます。さて内容ですが、前回のブログから3週間が経って、集めた式を短めと長めに分類した。短めは42、ビット演算、素数、ラップアラウンドがポイントで徐々に探査領域は狭くなっているかも、長めは既存の曲を再現できるようになり凄いけど普通のソフトシンセみたいでちょっと面白みが、、、。2つのバランスが肝心だろう。さらにSNSやりたいと言ってくる人がいるがjavascriptとCの違いを埋めることを考えなくてはいけないんじゃないかな。

Some deep analysis of one-line music programs
原文 http://bit.ly/trgcH8

私がYoutube"Experimental music from very short C programs"を投稿して1ヶ月、ここにブログを投稿して3週間が経ちました。最初のブームは終わったように思われるのですが、何が起こったのか振り返り、将来的に何が出来るのか考えるいい頃合いです。

私の最後の投稿からの展開は、3番目のビデオに要約されている。このビデオは、現在の芸術の状態、そして色々な種類の式の変化にとんだ多様性が含まれていることを大変うまく表している。

ビデオはすべての式の含めることができた一部を披露しているだけです。それを補うために、私がこれまで出会ったすべての"価値ある"式を収集しそれをテキストファイルにしてあります。これらの式のほとんどは、オンラインのJavaScriptActionScriptテストツールで試すことができる。式の幾つかは、JS/AS固有の機能に依存していてCのコードでは直接動作さえしない。

私は、多くの人々がまだこれらも式というよりはむしろ魔法や神秘を見つけると確信して、あなたに必要不可欠な技術に関する詳細なテクニカル分析と解説を提供することにしました。音楽理論において私は完全に独学なので表記法と用語が、時に型破りな可能性があることをお許しください。また、私が話すつもりの事柄の大部分を理解するにはCライクの式の構文とバイナリ演算を理解している必要があります。

私の式のコレクションを長さによって分類しました。最短と最長の式を比較することで、最長の式は、全体を少しずつ構築したソフトウェア・シンセサイザのように定数に格納された音楽データを含んでいる、より構成主義的アプローチがみられることは明らかです。最短の式は、その一方で、経験に基づいた推測から純粋な試行錯誤まで、非決定論的な試みにより発見されたものが多い。

ピッチとスケール

最短の式の間でとても顕著にみられる分類を、私は”t*クラス”と呼んでいる。このタイプの式は、式(Expression)に応じてのこぎり波のピッチを変更させるために、その式(Expression)に時間カウンタtを掛ける。

t*クラスの式の簡単な例は、上昇と下降の(独自のサウンドを作成するエイリアシングアーティファクトを伴う)サウンドを出力する t*(t>>10) です。今、この式にAND演算子を導入すると、ピッチのセットを制限しこのようなメロディーを作成できます。何人かの人によって個別に発見された例 t*(42&t>>10) または t*2*(21&t>>11) は”Forty-Two Melody”と呼ばれている。

ピッチを示す数字は半音またはそれに類するものではなく、基本周波数(サンプリングレートを256で割った値、つまり標準 8 kHzのレートで31.25 Hz)の乗数。下図は整数ピッチ 1 から 31 をセントと西洋音階名にマッピングしたテーブルです。灰色の背景上のピッチは、伝統的な西洋システムとうまく対応しないので、おおよその名前をつけるために四分音のフラットとシャープの記号を使用しました。

このテーブルを使うことで、我々はForty-Two Melodyを人間が読める形式にデコードできます。メロディーは32ステップ長で、8つの特有なピッチの乗数(沈黙を与えるゼロを含む)で構成されています。

"Forty-Two Melody"は、それは少しひょうきんな、調があってない、西洋人の耳には"アラブ音楽"に聴こえるような音程が含まれます。この効果を回避したいなら、おなじみの音程だけになるようなピッチを得るように式を設計する必要があります。シンプルな解決策はできるだけ単純な整数比の範囲に大きな数字を丸める剰余演算子を加えることです。Forty-Two Melodyを t*((42&t>>10)%14) と修正し、例えば、完全に西洋人の耳に少しはよく聞こえるようにメロディの後半を変換します。論理積(AND)は、特定のスケール設定にピッチ制限が役に立つ。例えば t*(5+((t>>11)&5)) はE3、G3、C4そしてD4に対応した4、5、8そして9でピッチを乗算する。

3番目のビデオで提示されたRYGの44.1kHzの式は、2つの異なるメロディー・ジェネレータが含まれています。

((t*("36364689"[t>>13&7]&15))/12&128)
+(((((t>>12)^(t>>12)-2)%11*t)/4|t>>13)&127)

式の前半、最初のジェネレータは、わかりやすいピッチのリストを含む文字列の定数をベースにしている。このリストは、ベースパターンに使用されます。もう一方のジェネレータ、そのコアの部分式 ((t>>12)^(t>>12)-2)%11 は、まさに3つの演算子(減算、排他、剰余)で深い自己相似メロディ構造を生成するようで、興味深い。その深遠な反復性にもかかわらずかなり印象的。生成する級数の分析は以下のとおりです。

平凡な t* 式の波形出力を後処理することをお勧めします。ノコギリ波は、特に低いサンプリングレートで、エイリアシングアーティファクトを多く生みだす傾向にあります。t*の式の終わりに&64または&128を加えることで、通常はもう少しクリーンに聴こえる矩形波に出力に切り替わる。Niklas Royの t*(t>>9|t>>13)&16 の例は、ANDなしでは多くのノイズが聞こえる(この場合はノイズの大部分はエイリアシングからではなく、無限の乗算演算から来ている)。

ビット単位の波形とハーモニー

最短の式の間でとても顕著に見られるもうひとつの分類は、ビット単位の式です。それは純粋で、式は定数とtを組み合わせたビット単位の操作(ビットシフト、否定、AND、OR、XOR)を使うだけです。 シンプルな例 t&t>>8 これは"シェルピンスキーのハーモニー"。シェルピンスキーの三角形は、ビット単位の波形のプロットされたビジュアリゼーションに頻繁にあらわれ、t&t>>8 が優れたシェルピンスキーの三角形をレンダリングする最も単純な類いの式です。

ビット単位の論理式は、しばしば、その長さのわりに驚くほどマルチな音色を轟かせる。これは8ビットのこぎり波が、隣同士オクターブ離れた8つの矩形波から成りたっているという事実に基づいています。通常、これらのコンポーネントは、単一音色の高調波を形成し、人間の脳に融合しているが、毎秒またはそれより遅く2回オンとオフを切り替えると、脳は別々の音として受け止めるのだろう。例えば、t&48はまったく単調に聞こえる、しかし t&48&t>>8 では、全く同じ波形サウンドの複調が突然、前の波形の高調波成分を拡張する。

8ビット波形の8つの矩形波成分の最大音量は、当然、最上位ビット(&128)で表される。のこぎり波もまた波長が最大になる。二番目に高いビット(&64)は半分の波長と振幅を持つ矩形波を表し、三番目以降はその半分のパラメータ、などなどと続く。この原理を使って、シェルピンスキーのハーモニーの音楽的構造を分析することができます。

これまでより低い矩形波成分の導入は簡単に聞くことができる。新たに導入されたすべての成分は、前のよりピッチが大幅に低いので、とてもよく聞くことができます。しかしシェルピンスキーのハーモニーに素数の乗数を含めると、我々は変化に出会う。(t*3)&t>>8では、騒がしい音が実際に特定の時点でより高くなります(音程はどちらもオクターブではない)。

この現象は、エイリアシングアーティファクトとそれらがどのように脳で処理されるかということで説明することができます。t*3の主な波長は一定ではありませんが、42.67 (256/3)を平均して42と43の2つの値の間で行き来する。人間の心は、平均的な長さ(42.67サンプル)の波形としてのこれらの種類の音を余分な音を伴った"エラー"(または理想的な波からの差異)と解釈する。t*3の例では、この余分な音は256サンプルの周期を持っていて分離して聴こえた時ブザーのようになる。

我々が取り扱っているより小さな波長は--ますます顕著にエイリアシングアーティファクトになり--最終的に彼らの親の波形に支配される。(t*3)&128と(t*3)&64 そして(t*3)&32を聞くことによって、我々はそれらの間のオクターブの音程に気づく。しかし、(t*3)&32から(t*3)&16 に渡ってステップした時、音程は間違いなくオクターブではありません。これはアーティファクトの波が支配する閾値です。だから t&t>>8と(t*3)&t>>8 そして (t*5)&t>>8 の音はずいぶん異なる。また高いピッチのメロディーがとても調子がずれに聞こえるかもしれない理由です。

シェルピンスキーのハーモニーの変種は、メロディーを生成するために組み合わせることができます。このアプローチの例は次のとおりです。

t*5&(t>>7)|t*3&(t*4>>10) (from miiro)

(t*5&t>>7)|(t*3&t>>10) (from viznut)

t*9&t>>4|t*5&t>>7|t*3&t/1024 (from stephth)

異なるカウンタは、ビット単位の論理式の原動力です。簡単に言うと、カウンタは、メインカウンター(t)のビットシフトしたバージョンである。暗黙的に互いに同期し、楽曲のさまざまな時間レベルで働く。しかしながら、単純に共通分母を持たないのに、平行して速度がほぼ同一にも関わらずカウンターの実験に実りをもたらす。例えば t&t%255 はAND演算でもって256サイクルカウンタと255サイクルカウンタを一緒にもたらし、パルス幅変調でだせるようなアンビエント・ドローン・サウンドを返す。このアプローチは、明確なリズムやメロディよりもルーズに構造化されたサウンドスケープにより有用と思われる。

いくつかのワンライナーの曲はビット演算を、全体のオクターブを移調して出力するためメロディージェネレータに取り付けます。シンプルな例はRrrolaの t*(0xCA98>>(t>>9&14)&15)|t>>8 で、末尾 '|t>>8' がなければシンプルな音符の級数を繰り返すだろう。このパートは1秒間で出力の上位ビットを徐々に修正し、効果的にメロディーのピッチを上昇し、そのボリュームをフェードアウト。また、私の3番目のビデオでRYGとKbの式もこのテクニックを使用している。私がこれまで見てきたそれの最も先進的な使用は、Mu6kの曲(第3のビデオで最後の1つ)の中にあり、ベースラインを取る際に選択的にビットのオンオフでチューニングし、リード・メロディー(いくつかの付属ビープ音と一緒に)を合成する。これは部分式 (t>>8^t>>10|t>>14|x)&63 内のベースの波形はxとして入力されるところで起こる

剰余によるラップアラウンドと他の音響合成技術

これまでのところ提示されたすべての例で、実際の波形を音響合成するためにカウンタとビット演算を使用している。したがって、同様に他の操作とその可能性について少し話をする必要があります。

単純な加算または減算とビット単位の式を伴うことによって、全く異なるサウンドを生成するのに剰余によるラップアラウンド・アーティファクトを作成できる。小さな、ほぼ聞こえない音がとても支配的になることがあります。調和のとれたサウンドはノイジーでパーカッシブになる。短いシェルピンスキーのハーモニー t&t>>4 を (t&t>>4)-5 へ拡張することによって、”8ビット”ドラムのようなものがそこに現れる。同じ原理が、他のビット単位の式と同様により複雑なシェルピンスキーのハーモニーの派生物に適用できます。

(t*9&t>>4|t*5&t>>7|t*3&t/1024)-1

剰余によるラップアラウンドが音の調波構造にどのように影響するか深い分析をするつもりはない、私は誰かがすでに数学でなされたものだと推測している。しかしながら、剰余を加えることで、技術的基盤が異なるものの、アナログシンセサイザーでのオシレーターのハードシンクのように使用することができます。

おそらく最も明白なのはソフトシンセでの加算合成に使われる、しかしながら、剰余によるラップアラウンドは、一緒に音源のミキシングするにはあまり役に立たない。これのわかりやすいレシピ (A&127)+(B&127) は、ミニマリズムを目指すには少し長ったらしくあるかもしれない。多くの場合、単純なXOR演算はそれを置き換えるのに十分であるが、ケースに応じて、良かったり悪かったりするアーティファクトを通常生成する。XORはまたハードシンクのような効果に使用できます。

もちろん、剰余によるラップアラウンド効果はまた、乗算と除算で達成可能で、そして他方では、加算または減算することさえない。2,3の面白そうな音の例を示しています:

t>>4|t&((t>>5)/(t>>7-(t>>15)&-t>>7-(t>>15))) (from droid, js/as only)

(int)(t/1e7*t*t+t)%127|t>>4|t>>5|t%127+(t>>16)|t (from bst)

t>>6&1?t>>5:-t>>4 (from droid)

ここで議論した多くは一般的な音響合成アルゴリズムとは別のものであるが、既に伝統的なサウンド合成の伝承が適用される領域に踏み込んでしまっている、さあそちらに向かおう。

決定論的構成

コレクション内で最長の式を見てみると、ほとんどの背後に多くのインテリジェントデザインがあることがわかってくる。長い定数や配列、だいたいそれらが、スケール、メロディ、ベースラインとドラムパターンに含まれている。コレクション内の最長の式は"Long Line Theory"で、Conspiracyよる64Kデモ「Chaos Theory」のサウンドトラックのカバーです。mu6kによるオリジナルバージョンは、600文字以上の長さだったが、Pouet.netの人々がもとになり、いくつか議論と品質のトレードオフで、300文字以下に最適化した。

もちろん、特に長さに上限がない場合は、式でどんなものでも音響合成することは可能です。かなり一般的なアルゴリズムと実績のある工学技術を用いて、音響合成とシーケンシンスのロジックは逐条構築できますこれは魔法ではありません。しかし、一方で純粋な不確定要素の魔法はどちらもありません:最初の発見段階が終了した後、完全にランダムな実験で卓越した何かを見つけることは難しくなるでしょう。

より洗練された計算式の多くは、ランダム実験と決定論的な組成物との良いバランスを持っているように思われる。その構造のいくつかの要素はランダムな発見の結果、一方で他人がエンジニア発想で構築した結果であることは明らかである。Mu6kの曲(第3ビデオの最後で紹介した、32 kHz)を見てみましょう:

(((int)(3e3/(y=t&16383))&1)*35) +
(x=t*("6689"[t>>16&3]&15)/24&127)*y/4e4 +
((t>>8^t>>10|t>>14|x)&63)

私はそこに3つの楽器:ドラム、ベース、リードのために、3行に式を分割しました。

私の仮定では、曲は最初に発見されたリード式を中心に構築されている、おそらく t>>6^t>>8|t>>12|t&63 の形、または何か(この式の元のバージョンは8 kHzで実行する)。純粋なビット単位の論理式にはよくあることだが、すべての音程はオクターブになり、しかしこの場合には、音楽構造はとても良い。

キャリア波を移調するだけでビットマスクのメロディーを移調できるので、ベースラインを生成しキャリアとしてそれを再利用することをお勧めします。リード・ジェネレータとは異なり、ベースライン・ジェネレータは文字列の定数に格納された4つのピッチの値で構成され見た所たいへんわかりやすい。生成されたノコギリ波は、変数(つまりリード・メロディー・ジェネレータで再利用できるよう)に保存され、振幅を変調する。

最後に、除算とビットの抽出の組み合わせによって生成されるシンプルなドラムビートがあります。抽出されたビットは、35の振幅にスケールされます。シンプルなドラムは、しばしば高速下降ピッチスライドを使用して音響合成される、そして除算のアプローチはこれをうまくやってくれる。

最初のほうのセクションで説明したRYGの式の場合、システムの最もカオスな要素のメロディー・ジェネレータが、生成されたメロディーで調和するように意図的に選択されたベースライン・ジェネレータのピッチでもって後に結合された中心の部分であったと推測されかもしれません。

将来

私は将来の発展のためにさまざまなアイデアを持っている多くの人々から連絡を受けている。我々がすべきもの、例えば、誰もが新しい数式を入力できるソーシャルウェブサイトを持ち、方法や評価のようなプレイリストに耳を傾ける。別のアイデアの支流は、無作為に生成するか、または遺伝的アルゴリズムで古いものをみんなで育てる新しい評価できる式の生産。

これらのアイデアのすべては、間違いなく面白いですが、私は時がまだ成熟しているとは思わない。私は視聴覚仮想マシンを開発している、これがそもそもこんな実験を行った主要な理由です。私は"ワンライナー音楽"の現在のコンセプトをまだリリースされていないシステムの単なるプレースホルダにすぎないと考えています。Cライクな挿入記法と他の概念の側面とあまりにも多くの問題があるので、私は最初によりよいおもちゃを開発しコミュニティのメカニズムについて考える方が賢明だと思います。しかし、これらは単に私自身の優先事項です。誰かが私が説明したようなオンラインコミュニティを構築したいなら、私はアイディアを支持するでしょう。

私は以前このおもちゃについて言及した。以前はEDAMと呼ばれていたが、今、IBNIZ(Ideally Bare Numeric Impression giZmo)と名付けることにしました。アルファベットIのひとつは、"即時"または"インタラクティブ"を表し、私は直接強調するつもりなのは、コードの実践的な修正可能性。IBNIZは、うまくいけば、ハードコア・ミニマル・プログラミングの魅力的な紹介として、そしてまさにジャムセッションの楽しいおもちゃとして、難解なアルゴリズムの策略のためのテストベッドとして、極端なサイズのクラスのデモシーンプラットフォームとして意味のあるものになるかもしれない。

私の以前の記事で、視覚と音楽をともなった興味深い256バイトのデモのためにドアを開けはなつ可能性に言及した。ワンライナー音楽プロジェクトとIBNIZは、このプロジェクトのハイレベルな、アルゴリズムの側面のために貴重な研究を提供するだろう、そのために私もまたアイデアのプラットフォームレベルでの実現性を実地テストするものを作っている。今やPCM音と同期したリアルタイムグラフィックスを簡単に96バイト以下に収めることができるスタンドアロンのMS - DOSのプログラムがあるので、256バイトのサイズの中に音楽とグラフィックス両方のために多くの部屋は残されている。サウンドトラックのような優れたワンライナー音楽の式から派生したものを使って、概念実証として128または256バイトのデモをリリースするつもりです。

すべてのこのブームの広がりが、私にビットとバイトの潜在能力を解き放つための探求を継続しようと決意させたのではないか、ワンライナー音楽のプロジェクトに興味を持っているすべての皆さんに感謝したい。ここでの探求を鑑みて次のポストはIBNIZのバージョンを公にリリースする価値がある時になるでしょう。

>>>以上本文

修正履歴
11/2
・最後から2段落目の1文が2つに切れていると勘違いして訳していた。
・7段落目、基本周波数の乗算->乗数
11/6
・最後の段落、決定->決意 要求->探索
・4段落目、見つけることを->見つけると