数学と音楽とコンピューター

life tips & 雑記 禅とライフティップ 旅と歴史 スポーツとアート 機械学習と数学 Clojure Java 本とTVと映画と音楽 本ブログのナビ

数学と音楽とコンピューター

数学はこの世界にある法則やパータンを抽象化して形にするものだと思っている。機械学習や人工知能の中で数学が重要な位置を占めるのも、コンピューターの計算するという機能に即しているというだけでなく、この法則やパターンの抽象化という機能が大きく寄与しているものだと思う。さらに数学は、様々な視点や発想を工夫してそれらパターンや法則を見つけるという”自由な発想”や”感じる力”が必要とされる分野でもある。このような観点で見ると、様々な直感や発想で人の心を揺さぶるパターンを作り上げる”音楽”も、数学と共通していると考えることができる。

ジェネレーティブアートとプログラムとアルゴリズム“でも述べたが、複雑系や情報理論といった科学理論や自然科学的なシステムを形にする際にも数学は強く関与するものと思われる。

先日読んだ「人生を変える「数学」そして「音楽」教科書には載っていない微妙な関係」はジャズピアニストである筆者が、”自由な発想”や”感じる力”という観点から数学と音楽の共通点を述べたものとなり、この数学と音楽の関係が興味深く綴られていた。

書かれてある内容は以下のようになる。

「人生を変える「数学」そして「音楽」
プロローグ
第1章 数学と音楽は似ている?
   数学も音楽も、ワクワクがいっぱいの世界
   みんな、素晴らしい数学者であり音楽家
   数学と音楽は、お互いに大事な存在
   今は第二のルネッサンス時代?混沌と統合の時代
   発見や創造のカギは感じる力
第2章 連想力を働かせてみよう
   表面的な顔にとらわれず、二人を見比べよう
   数字は連想ゲーム
   寄り道エピソード あみだくじの中から「問題」を見出す
   素数と原子・音の種は三角関数?
   すべてのものが伸び縮み自由自在のゴム膜でできていたら?
   Column 図形の数の「お約束」(位相幾何学)
第3章 想像力 心の眼で次元を超える
   目に見えない世界を想像する
   高い次元に昇ってみる
   4次元を覗く
   寄り道エピソード 日本文化と想像力
第4章 先入観から抜け出す 自由の世界
   数字は「割り切れない」
   思い込みから自由になろう! 曲がった幾何学を考える
   Column [99%]の制度は、本当に高い?
   いろいろなパラドックス、数学は本当に正しいの?
   「正しい」と「正しくない」の間はある?
   ガロアとマヌジャン 革命の異端児
第5章 自然の神秘 数学も音楽もまだまだ 自然はすごい
   自然は、未解決問題の答えを知っている
   数学は大雑把、自然は複雑
   フラクタル図面は効率的
第6章 実際に自分なりの数学を作ってみよう
   エッシャーに迫る
   問題を作る・予測を立ててみる
   新しい「距離」を作る
   新しい「足し算」を作る
   Column 世界にもしかずが三つしかなかったら
   数学から聞こえてくる音楽
第7章 音楽で遊ぶ・発明する
   音楽に参加することのおみしろさ・その場を「感じる」即興性
   音や和音から絵を描く
   新しいリズムを発明する・その1
   新しいリズムを発明する・その2
   寄り道エピソード 本田竹広さん「ジャズと3」
   楽器を作ってみる
   寄り道エピソード 身近な「感覚」の中に潜む数学
第8章 音楽は自由だ
   音楽と想像力
   V度(5度)の関係
   寄り道エピソード ペンタトニックスケール
   一つの音の中に潜む、無数の「倍音」の響き
   いろいろなドレミファソラシド
   音と音の間を除く ミとミbの間のブルース
   音楽は自由だ
第9章 今という時代と感じる力
   21世紀と感じる力
   日常のいろいろな風景の中にもこっそりと潜んでいる数学
   いろんな垣根を超えていく総合の時代
   人間と人間が出会うということの奥深さ
   完成を開く・人間が「生きる」ことの温かみ
エピローグ
   付録コピーで簡単 エッシャー体験パーツ」

これらを読んでいて音楽ソフトウェアを触りたくなり、オープンソースの音響プログラミング言語supercolliderを触ってみた。

日本語の資料で公開されているものとしては”ねことほんだな”さんが翻訳している”A Gentle Introduction to SuperCollider“の和訳である”SuperColliderの優しい紹介“がある。

SuperColliderの使い方としては、公式ダウンロードページよりそれぞれのOSにあったアプリをダウンロードする。ダウンロードしたアプリを立ち上げると以下のような2分割されたウィンドウが現れる。

左側がコードを書き込むゾーンで右側はPost windowとHelp browserとなる(下部のタブで切り替え)。まず最初にHelloWorldとして、左側のゾーンに新しいドキュメントを開き(menu File→New)以下の行を入力する。

"Hello World".postln;

入力が終えたら、その行の任意の場所(開始、中間、終点のいずれでもよい)にカーソルを置いて”ctrl + enter”(macの場合は”command + enter”)を押して、コードを評価する。post windowのタブを押して、post windowにすると、”Hello World”が出力されている。

次に音を出力するためにサーバーを起動する。そのためには、上部のメニューの中から”Server”を選択し、その中の選択メニューの中から”Boot Server”を選択する。無事にサーバーが立ち上がるとローカルの57110ポートにサーバーが立ち上がり、以下のようなメッセージをpost windowsで見ることができる。”Booting server ‘localhost’ on address 127.0.0.1:57110″

実際に音を出すには以下のようなコードを入力し、コードを評価する。

{SinOsc.ar}.play;

うまく動作すると連続的なビープ音(単純なサイン波)が聞こえる。音を消すには”ctrl + .”(macの場合は”command + .”)で消すことができる。

もう少し複雑なシンセサイザー的音を出すには、以下のようなコードを入力して評価すればよい。

{SinOsc.ar(LFNoise0.kr(10).range(500, 1500), mul: 0.1)}.play;

さらに複雑な音を組み立てていくには、”SuperColliderの優しい紹介“を参考のこと。

supercolliderで使われている言語(sclang)はシンプルで使いやすいが、自分の使い慣れた言語で扱いたい人向けに様々な言語でラッパーが作られている。その中で今回はClojureを用いたものovertoneについて述べる。(pyhtonでのハンドリングを行いたい場合は、FoxDotが有名にものとなる。日本語での記事もあるのでそちらを参照のこと)

clojure環境の立ち上げに関してはSublimeText4とVS codeでのClojureの開発環境立ち上げ等を参照のこと。まず任意のディレクトリ下でターミナルを使いprojectをfileを”lein new overtone-test(任意のファイル名””で作成する。

次に作成したprojectの中のproject.cljファイルに以下のようにovertoneライブラリを追加する。

(defproject overtone-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
            :url "https://www.eclipse.org/legal/epl-2.0/"}
  :dependencies [[org.clojure/clojure "1.11.1"]
                 [overtone "0.10.6"]]←追加
  :repl-options {:init-ns overtone-test.core})

overtoneからsupercolliderに繋げるためには、internal-serverモード(supercolliderのインストール不要)かexternal-serverの2つのモードが選べるが、internal-serverモードはうまく動作できなかった為、supercolliderをダウンロードし、前述の手順でserverをbootしlocalhostの57110ポートで繋げる手法を用いる。

supercollider側のサバーがブートされていればいかのclojureのコードを評価すると音を鳴らして止めることができる。

(ns overtone-test.core)
(use 'overtone.core) ← ライブラリを読み取り

(boot-external-server) ← supercolliderと接続
(definst foo [] (saw 220))← ビープ音の設定

(foo) ←音が鳴る。

(kill 34) ←音が止まる

詳細の使い方はGetting-startedcheat-sheetexampleを参照のこと。また実際にovertoneを使ったlive codingが世界各地で行われていたり、映像と組み合わせたアルゴレイヴ(Algorave)が楽しまれていたりする。

また”ClojureのグラフィカルツールseesawとQuilを用いた実装“に述べているグラフィックスと組み合わせたアートも作られている。

コメント

  1. […] 数学と音楽とコンピューター […]

  2. […] 深層学習は、”画像情報処理技術“に述べている画像認識や、”音声認識技術“で述べている音声認識、”自然言語処理技術“で述べている自然言語処理、”数学と音楽とコンピューター“で述べている音楽生成、自動運転などの分野で幅広く活用されている […]

  3. […] “数学と音楽とコンピューター“で述べたOvertoneは、Clojure言語をベースにした音楽プログラミングライブラリで、音楽の合成や演奏を行うためのツールとなる。このOvertoneを使用し […]

タイトルとURLをコピーしました