« ナイロン弦が切れて悩む | トップページ | リボ払いカードで悩む »

2015年6月14日 (日)

音楽向けカオス過程で悩む

基本的なパターンからフラクタルを形成させることによって音楽を生成する、ということをやってみたわけだが、やはりここはちゃんとカオス過程からフラクタルを生成するというのが美しい。単純な関数の繰り返しによって思いもかけないパターンが現れるというのがカオスの醍醐味だ。

 

しかし、元々これはアナログの世界の話であって、アナログな値に対して単純計算を繰り返すというのがカオスの元々の原理っていうか、まぁそういうものなので、音楽にそれを適用するのはもともと無理がある。何しろ音楽というのは音階とかリズムとかもともとデジタルなものなのだから。

 

それでも何とかならんのか?ということで、「単純な計算を繰り返す」というカオス過程をすっ飛ばして無理矢理にフラクタルを作ったのが前回の実験だったのだが、その先がなかなかうまくいかない。いろいろ試しているうちに時間が過ぎてしまった。

 

デジタルなものに対して単純計算を繰り返すということについて、何種類か試してみたが、その結果がうまくフラクタルにならなくて、乱数で音符を発生させたのとそれほど変わらないものにしかならないのだ。

 

だから以下は失敗の報告である。もう一つ芽があるかもしれないことを考えてはいるのだがこれにはもうちょっと醸成が必要な感じ。ま、なんにしても以下は自分自身のための備忘録みたいなものなので、興味のない人にはきっと面白くないであろうことを保証する。

 

では以下に失敗例。

 

 

1) ディフィー・ヘルマン方式

 

 

これは暗号関連の技術で、正確に言うとスクランブル化(解読しにくいようにグチャグチャにする)とは違う鍵管理という技術なのだが、要するに数値をべき乗して、その結果をある数で割り算し、その余りを求めるということをする。

 

で、本来この方式は暗号を扱うので、解読されないようにそれぞれとても大きな数を使う。しかし、私の用途には例えば音程を扱うのでそれほど大きな値を与えることはできない、せいぜいが20くらいだ。できれば15くらいに抑えたい。

ところで、こういう繰り返し計算をデジタルに行うと、必ずリミットサイクルという問題が出てくる。デジタルで表現できる値の種類は有限なので、以前に出てきた値が必ずまた現れて同じことの繰り返しになってしまうのだ。

具体的な例を出すと、例えばDH(Diffie Helman)方式である数を3乗して5で割って余りを求めるということをやると、2→3→2→3→2(2×2×2÷5=1余り3⇒3×3×3÷5=5余り2⇒以下繰り返し)とか4→4→4→4→(4×4×4÷5=12余り4)とか1→1→1→1とかいうリミットサイクルが現れる。これを譜面に置き換えると、ミファミファミファとかソソソソとかでちっとも面白くない。

なので、まずはこのリミットサイクルの長いものを探すということから始めないといけない。

 

普通にDH法で試算すると、べき乗の数値と剰余系(割って余りを出すこと)によってこんな結果を得る。これはべき乗の数を2~13、割る数を2から25までの組み合わせを試行した結果だ。

Dh_2

 

これでは最大リミットサイクルでも12で、これではつまらない。そこでHD法にちょっと手を加えてやると、こんなふうに改善された。

Dh_3
剰余系を25まで試しているので、最大リミットサイクルが25というのはまずまずの値だ。

ただ、これでもリミットサイクルが25というのはいかにも短い。譜面にしても8小節くらいにしかならないので、もっと長いリミットサイクルがほしい。単純に考えると剰余系の数を増やせばいいが、そうすると結果として出てくる値がおおきくなってしまって、音階として使いにくくなる。

ならば、剰余系の数をもっと大きくする代わりに、その出力値をさらに20とか21とかで割ってやってそのあまりを取ればいい。

一方、扱う数が大きくなると、処理系の方に限界が出てきて、基本的にはperlという処理系の標準的な構成でやりたいので、その限界は10の15乗ということになる。bigintというおまじないを使うとそんな限界を軽々と超えられるのだが、そうするとWEBアプリケーションにできなくなるかもしれないので、とりあえず10の15乗を限界とする。

その限界を意識しつつ長いリミットサイクルを探ってみると、5乗したものを107とか467とか887の剰余系で処理すれば長いリミットサイクルを得られることがわかった。でもこれらの組み合わせもそのリミットサイクルのパターンがどうなんだろうなぁ?とか色々悩みどころ。107とか887はちょっと大味な感じに見えるので、467を主体にしたい。ここのところをもうちょっと詳しく書きたいのだけれども、う~ん。

なにが「う~ん」なのかというと、もともと暗号系の技術なだけに、出力パターンから入力パターン(最初のパターン)を類推できにくくなるような、つまりのところ出力パターンがランダムに近くなって、つまりパターンを持ちにくいというのが悩みどころ。

2) 三角関数による丸め込み

 

DH法は剰余系計算(つまりは余りを出す計算)によって数値をある範囲内に制限するものだが、それがどうにもトゲトゲしくていけない、もうちょっと優しくできないかと思って三角関数で制限できないかと思った。

つまりsinとかcosとかを使うわけだが、そうするとどんな数値も-1~+1の間に制限されてしまうので、それをまた適当な整数にマッピングしないといいけない。

それだけのことをやっても、やはり音の跳躍が多いのはどうしようもなくて、これなら乱数で音符を並べるのとそれほど違わない。むしろ、無理やりフラクタルの形にするほうがよっぽどマシだ。

3) 巨大整数

DH法でなんとかならんのか? と思ってbigintなんていうおまじないを使いながらパソコンを1時間ほどもブン回すような計算をやらせていたのだが、それでもあまりいい形にはならない。DH法ではべき乗するにも余りを取るにも素数を使っていたので、素数じゃないのだとどうかな? ということとリミットサイクルを長くするということをいろいろやってみたのだが、やはりだめ。

そんな中で、巨大数を扱えるのが面白くて、戯れに巨大素数を求めるなんてことに脱線していたのだが、ふとそんな「巨大数」というのを桁ごとに見てみると、これが意外に面白い。循環小数なんかは案外に短いリミットサイクルをもっているのだが、例えば467の29乗なんてことを計算すると、

 

257151780930293894855337437252683451446177280952232858145117467199592346451747

なんていう数になるわけで、これを桁ごとに区切って0~9の要素を持つ数列とみると、案外パターンも持っていそうで面白そう。

 

467_29

でもやっぱり、跳躍が多いんだなぁ。音にしてみるとこんな感じだ。

 

 

 


 

 

「467_29.mp3」をダウンロード

 



意図的に跳躍を少なくするとかいうことも、もちろん可能ではあるんだけれども、それをやってしまうと、なんだか本気で作曲プログラムを書いているような感じになってしまって、それではつまらない感じがする。私としてはできるだけ面白半分で遊びたいので。

4) 和差法による展開
次に考えたのは、DH法から離れてもっと単純に、最初に与えられた数列から2つずつ数値を取り出してそれらの和と差をとって新たな数列にする、というもの。図示するとこんな感じ。

Addsubfig
この「差」と「和」の順序とか、まとめ方とか(和和和差差差とか)総当りにする順序とかでバリエーションもあるだろうが、とりあえずはこの構成でやってみた。前回も種とした「0-2-1」を元にして展開し、グラフにするとこうなった。

Addsub
うむ、割といい感じじゃないかな。音にしてみよう。4分弱とちょっと長いのでmp3ではなくMIDIで置いてみる。MIDIだとファイルサイズが小さくていいのだが、ChromeではQuickTimeを入れていないと聞くことができない。私はQuickTimeが大嫌いなのでChromeにQTを入れることを推薦しない。MIDIファイルをダウンロードするか、Internet Explorerで聞いていただきたい。

「ADDSUB.MID」をダウンロード

 



うん、わりと聴きやすいかな。でもフラクタル感がいまひとつだ。

和と差をさらに足したり引いたりすると、つまりA+BとA-Bを足したり引いたりするわけでそれは2Aだったり-2Bだったりするので、自己相似の期待感もある。でも、和差をそれぞれ2で割るようにもしてみたが、これは変化に乏しいつまらないものになった。


カオス過程からフラクタル図形を作成するというのは広く行われていて、いろいろな手法もあるのだろうが、図形を生成するためには二次元平面上に「境界」を作れればいいということがわかっているのである意味目標が立てやすいのだと思う。それはマンデルブロ図に見られるようなくっきりした境界でなくても、点の密度差による漠然とした境界でもいいわけで。

Kamtorus

図が図として成立するために境界が必要だとすると、では音楽が音楽であるには何が必要だろうか? まずはスケールだが、転調もあるからそれは絶対的なものではないし、今回の投稿でこだわった「跳躍」も絶対的なものではない。跳躍だらけの音の塊でも今の私にとって聞きにくいだけの話で、そういうのが好きな人も居るかもしれない。

でも、漠然と「スケールの連続性」、「音階の連続性」、「ある程度予測のできるパターンの繰り返し」というあたりが必須というか、いや必須とは言いたくないんだけれどもそういうのがあると聴きやすい感じがする。

しかも以上の考察には時間軸のことを全然考えていないのだ。いや、考えていないわけじゃないんだけれども、書けるほどにはまとまってないということなんだけど。ビートということは横においても、フレーズ内での時間関係と、フレーズとフレーズの相対的な時間関係とは違うみたいだしなぁ、とかいう漠然とした、しかし何かありそうとは思っていて、また機会があればチャレンジしてみようと思う。

6月18日追記:

作成した音列を「1/fゆらぎ」という観点から評価してみようと思った。音列の数字をフーリエ変換してざっくりとグラフにし、そこへ1/fの直線を重ねてみる。

まずこちらは467の29乗の値を示す10進数の桁をならべたもの。1/fの直線からは離れて、むしろ水平に近くなっていて、これは雑音、あるいは一様乱数に近い。

 

F467_29

次にこちらは「0-2-1」の音列を和差法で展開したもの。上の図よりは1/fに近くなっている。

Faddsub
ある意味。「なるほど」なんだけど、次の一手はどうするかな?

 

 

 

 

 

 

 

 

 


 

 

 

|

« ナイロン弦が切れて悩む | トップページ | リボ払いカードで悩む »

音楽」カテゴリの記事

コメント

音楽って〜のは,音を楽しむもんだからどんな楽しみ方をしても良いと思いますが,他から理解されがたい楽しみ方も有る,との感想を持ちました。どのサンプルも聞けないわけじゃない,でも起承転結?,序破急?が無いから凄く退屈しちゃう。フラクタル生成に序破急の成分も入れたらどうだろう?

投稿: ををつか | 2015年6月16日 (火) 07時17分

ここでやっていることは音楽のパーツを作っているだけなので、「起承転結」とか「序破急」とか言われてもねぇ、って感じです。そういうのはアレンジとか曲の構成とかいうことなのでレイヤが違う話で。

ポピュラー音楽の世界ではある雰囲気(調性)のなかでメロディが動くというふうな構成になっているので、私が嫌っている「跳躍の多いメロディ」も、伴奏がついて調性が整い、視点が定まるとそれほど悪くはなりません。伴奏がなくて跳躍の多いメロディは調性がメロディに引っ張られて混乱し、視点が定まらないんです。

そんなふうに、アレンジ次第でテンポもなにもかも変えられるので、序破急も起承転結もアレンジ次第ってわけです。

投稿: PicksClicks | 2015年6月16日 (火) 21時19分

>音楽って〜のは,音を楽しむもんだからどんな楽しみ方をしても良いと思いますが,他から理解されがたい楽しみ方も有る,との感想を持ちました。

私にしてみれば、これは音楽の知識を使っていはいますが、音楽の楽しみ方ではなくて、コンピュータの遊び方なんです。音楽の楽しみっていうのはやっぱり楽器を持ってこそですね。

「面白半分の範囲でやりたい」と書いたのも、そういう意識があってのことだと思います。

投稿: PicksClicks | 2015年6月18日 (木) 23時58分

コメントを書く



(ウェブ上には掲載しません)




« ナイロン弦が切れて悩む | トップページ | リボ払いカードで悩む »