LoginSignup
85
79

More than 5 years have passed since last update.

Clojureで音楽組織プログラミングについて

Last updated at Posted at 2013-12-03

はい、こんにちは。

今回はOvertoneについて書くといいましたが、それだけだとつまらないので、「Clojure」で「Clojureならではの」音楽をつくることを主眼に書きます。

あんまり、Overtoneについて書かないかもしれません。
ぶっちゃけこれ読んでくだたい。
http://overtone.github.io/

また、今回はあんまりポップな音楽については書きません。

「Clojureならでは」の音楽

1.音楽とは?

  • そもそも、音と音楽の違いってなに?
  • 車の音は音楽?
  • リズム、メロディーがあれば音楽?

とか、音楽とはなんなのか、 とかいったらこの記事だと延々と終らないので、ここでは単純に

  • その組みあわせの構造
  • 組あわせをさらに組織

と考えます。一つ一つの音が折り重ねの結果が音楽というわけです。
基本的に音楽は「音そのもの」よりも、「その組みあわせの構造」が大事だと僕は思います。ちょっと抽象的に「なんのこっちゃ」という人がいるでしょうから、ある名曲を参考にしましょう。

2.ベートーヴェン交響曲第5番「運命」とはなぜ名曲か?

さて、だれもが聞いたことはあるでしょう。「運命」についてです。「運命」とはなぜ名曲(個人的な主観評価は置いておいて)、といわれるのでしょうか?

その理由の一つに「一つのモチーフが見事に組織されてできているから」だと僕は思います。され楽譜を見せましょう。(読めなくて良いです。)

*モチーフ
スクリーンショット 2013-12-03 4.00.11.png

さてこれは口で言うと「たたたターン!」というフレーズです。 この「たたたターン!」というフレーズがモチーフとなって楽曲上に至るところに表われています。それは、このままの形で表われるのではなく、

  • ひっくり変えしたり
    スクリーンショット 2013-12-04 0.34.34.png

  • 組み合わさったり

スクリーンショット 2013-12-03 4.03.53.png

スコア全体を見せたいですが、ベートーベンは良く「たたた*たーん」を組みあわせて音楽を作っているのがわかります。

このように「 一つのモチーフが見事に組織されてできている 」ことがわかるかと思います。

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の音楽ならでは!」を目指すべきだと思います。従来の五線楽譜の音楽ではなく、「プログラミング」でやるのだから、「プログラミング」の音楽を目指すべきだと思います。そこに「音楽プログラミング」による作曲の意義があるのではないでしょうか?

85
79
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
85
79