はい、こんにちは。
今回はOvertoneについて書くといいましたが、それだけだとつまらないので、「Clojure」で「Clojureならではの」音楽をつくることを主眼に書きます。
あんまり、Overtoneについて書かないかもしれません。
ぶっちゃけこれ読んでくだたい。
http://overtone.github.io/
また、今回はあんまりポップな音楽については書きません。
「Clojureならでは」の音楽
1.音楽とは?
- そもそも、音と音楽の違いってなに?
- 車の音は音楽?
- リズム、メロディーがあれば音楽?
とか、音楽とはなんなのか、 とかいったらこの記事だと延々と終らないので、ここでは単純に
- 音
- その組みあわせの構造
- 組あわせをさらに組織
と考えます。一つ一つの音が折り重ねの結果が音楽というわけです。
基本的に音楽は「音そのもの」よりも、「その組みあわせの構造」が大事だと僕は思います。ちょっと抽象的に「なんのこっちゃ」という人がいるでしょうから、ある名曲を参考にしましょう。
2.ベートーヴェン交響曲第5番「運命」とはなぜ名曲か?
さて、だれもが聞いたことはあるでしょう。「運命」についてです。「運命」とはなぜ名曲(個人的な主観評価は置いておいて)、といわれるのでしょうか?
その理由の一つに「一つのモチーフが見事に組織されてできているから」だと僕は思います。され楽譜を見せましょう。(読めなくて良いです。)
さてこれは口で言うと「たたたターン!」というフレーズです。 この「たたたターン!」というフレーズがモチーフとなって楽曲上に至るところに表われています。それは、このままの形で表われるのではなく、
スコア全体を見せたいですが、ベートーベンは良く「たたた*たーん」を組みあわせて音楽を作っているのがわかります。
このように「 一つのモチーフが見事に組織されてできている 」ことがわかるかと思います。
3. 音楽構造をプログラミングする。
良く音楽プログラミングをすると、音をプログラミングする人が結構います。けれども、それは大半は楽器にしかならず、音楽になっていかない、ってのを良くみかけます。
さて、僕は思ったのです、「 音楽構造をプログラミング 」してないからだと!。
それはなぜ音楽にならないのかというと、楽曲の構造をつくってないからです。音楽とは「構造」なのです。
4. Clojureで音楽構造を付くる。
さて、云々解説するよりやってみたほうが良いでしょう。
早速音楽構造をプログラミングしていきます。構造を定義していきましょう。
単旋律構造
まず簡単なモチーフを作りましょう。
(def phrase-a '(1 2 3 4 5))
といあえず、こんなリストでいいです。このリストが、まず、モチーフとなります。これを音に関連付けるのですが、それは後でいいでしょう,
さてこれをこんな風に組みあわせていきます。
;;単純につなげる構造
(def phrase-b
(concat
phrase-a phrase-a (reverse phrase-a)))
さて、簡単にちょっとした構造ができました。さてこれを音に割りあてて演奏する関数をつくりましょう。
ここでovertoneをつかいます。(overtoneについては解説しません。)
(use 'overtone.live)
;; 音の定義
;; 今回はなんとなく鋸派でつくる(ここは好きにしていいお!)
(definst saw-wave [freq 1 attack 0.01 sustain 0.4 release 0.1 vol 0.4]
(* (env-gen (lin-env attack sustain release) 1 1 0 1 FREE)
(saw (* freq 100))
vol))
;; 演奏する関数
(defn play-lst [lst tone time delta-time]
(let [elt (first lst)]
(if (nil? elt)
nil
(do (at time (tone elt))
(play-lst (rest lst) tone (+ time delta-time) delta-time)))))
さて、それでは、音を鳴らしましょう
(play-lst phrase-b tone (now) 100)
ちょっと短い単旋律が流れましたね。
ポリフォニックな構造
さて単純な旋律をつくりました。さらに音楽らしくするには、今度な同時間的な構造を定義していきましょう。
単純に上に移調したフレーズをつくります。
(def phrase-c (map #(+ % 2) phrase-b))
さて、ポリフォニックにするために、play-lsts 関数をつくりましょう
(defn play-lsts [phrase-lst tone time delta-time]
(map #(play-lst % tone time delta-time) phrase-lst))
さて鳴らしてみましょう。
(play-lsts (list phrase-b phrase-c) saw-wave (now) 200)
ちょっとポリフォニックになりました。
これはどうでしょうか?
(play-lsts (list phrase-b (reverse phrase-c)) saw-wave (now) 200)
さて、これで、どんどん複雑に構造化していくと、より音楽的になります。
5.まとめ
さて、Clojureで僕が実際にどうやって音楽構造を作り、それをOvertoneに演奏させるかをみてきました。
これはあくまでも、構造化の一例にしかすぎません。いろいろな音楽組織、構造、が考えられます。
また、その構造をどう演奏命令に変換させるかも、様々なやりかたがあります。いろいろ、ためしてみればいかがでしょうか?
「音楽プログラミング」をすると大抵の人が「音プログラミング」に走ってしまいます。物理的な「音」をどう再現するか?に走ってしまい、その結果、単純な楽器にしかならない自体になってしまします。
あくまでも、音楽に大切なのはその音そのものよりも、その「構造化」にあると思います。その構造化が大事だとおもいます。
また、僕は音楽をプログラミングで作曲するときは、「音楽プログラミングならでは!」「Clojureの音楽ならでは!」を目指すべきだと思います。従来の五線楽譜の音楽ではなく、「プログラミング」でやるのだから、「プログラミング」の音楽を目指すべきだと思います。そこに「音楽プログラミング」による作曲の意義があるのではないでしょうか?