Hatena::ブログ(Diary)

aikeの日記 RSSフィード

2011-11-12 竹内関数で音楽生成

Lisperの人ならみんな知ってる竹内関数(たらいまわし関数)という関数があります。

定義としてはこんな感じ。

 

¥text{Tarai}(x,y,z)=¥left¥{{y ¥text{       if } x¥leq y¥¥¥text{Tarai}(¥text{Tarai}(x-1,y,z),¥text{Tarai}(y-1,z,x),¥text{Tarai}(z-1,x,y))¥text{  otherwise}}

 

そのシンプルな定義からは想像もつかないほど複雑で膨大な再帰呼び出しがおこなわれるとても興味深い関数です。たとえば引数にTarai(10,5,0)を与えると343,073回も再帰呼び出しされたりします。

 

この関数呼び出しの引数がどのように変化するか知りたくてプログラムを書いて調べてみたところ、Tarai(10,5,0)の場合は3つの引数がそれぞれ0〜10(xは-1〜10)の間で少しずつ変化するなかで、2つの値を固定してひとつの値が下降していくような挙動があったりして、なんだか音楽の3和音コード進行を思わせるような動き方です。

 

そういうことなら、ということで実際に音にして聴いてみました。Tarai関数が呼ばれるたびに引数のx、y、zを、0=ミ、1=ファ、2=ソ、……、のように音に割りあて3和音にして鳴らしています。せっかくなので音源の自動アルペジオ機能でミニマルっぽくしています。この手の自動生成音楽にしては緊張感の変化があってちょっと面白いんじゃないかと思います。

動画では60小節で止めていますが、この曲のフルバージョンは343,073小節あります。

 

D

 

関連エントリー:竹内関数が音楽的に聴こえる理由について考えてみた

 

初めての人のためのLISP[増補改訂版]

初めての人のためのLISP[増補改訂版]

水月水月 2011/11/12 22:13 はじめまして
ねこ速@VIPというブログをやっている水月と言います
よろしければ相互リンクしていただけないでしょうか?
内容はツール、マンガ、アニメ、その他ニュース等です
検討のほう、よろしくお願いします
サイト名:ねこ速@VIP
URL:http://nic.chu.jp/
RSS:http://nic.chu.jp/feed/

シマタニノリヒデシマタニノリヒデ 2011/11/13 04:24 スバラシイ。是非ともフルバージョンをお聴かせ願いたく候。

竹内郁雄竹内郁雄 2011/11/15 14:52 当の本人の竹内です.友人から教えてもらってアクセスしました.素晴らしいですね.嬉しかったので,このURLをみんなに紹介しまくっています.私はSteve Reichは結構趣味なのですが,聴きやすさという意味ではいい勝負になっていると思います.紹介した音楽仲間からは,以下のような感想をもらいました.

低音部に属音の保持があって、
その上を分散和音で、
下降する順位進行の響きは、
まるでClementiが現代に甦ったみたいですね。

ほかにも現代音楽をやっている人からは「これがいい音楽に聞こえる理由は、ダイアトニックなところで、書いてあるからです」というコメントももらっています.

これはTarai(6, 3, 0)とかだとずっとつまらない音楽になってしまうんですよね?
いずれにせよ,長生きはしてみるもんです.

Tak (NUE)

aikeaike 2011/11/16 00:44 竹内先生、はじめまして。
十数年前に「初めての人のためのLISP」を大学の図書館で読んで以来
LISPと再帰計算の不思議な魅力にすっかりやられてしまいましたので
今回、竹内先生から直接コメントをいただいて大変驚き、感激しています。

音色やテンポの設定をいかにもミニマルミュージック的にしたこともあり、
たしかにSteve Reichのマリンバ曲に通ずるものがあるような気がします。

次のエントリーで竹内関数の音楽的構造について自分なりに考察して
みたので、もしよろしければこちらもご覧ください。
http://d.hatena.ne.jp/aike/20111115

本当にありがとうございました。

竹内郁雄竹内郁雄 2011/11/19 01:24 aikeさん,初めまして.というか,上記のような投稿をしたのが,私にとって初めてのことでした :-). 音楽的構造のエントリーも拝見しました.音楽的なことにずいぶんと深い配慮がなされているのに感服いたしました.この変な関数もこれで浮かばれるということです.お時間があればぜひ英語でもエントリーを書いていただければ,外国の連中にも紹介したいと思います.面倒であれば,私が翻訳いたしますが….

Tak (NUE)

ペペロンチーノペペロンチーノ 2011/11/19 23:45 とても興味深く聞かせていただきました。『初めての人のためのLISP』で最初に出てくる関数から、このような音楽が生成されるとは予想だにしておりませんでした。面白いですね。
要望があるのですが、10分〜30分(300小節〜900小節)版を作成していただけないでしょうか。作業用のBGMとして使用してみたいのです。検討のほど、よろしくお願いします。