n平均律のために作ったプログラムをPythonで置き換えることが可能か

以前、音楽はなぜ12音で構成されるのか、DAWソフトを用いてn等分平均律を再生する方法という記事を書いたけれどMax/MSPで書いたものをPythonに置き換えれたら面白そうと思ったのでMax/MSPで作成したものの内容をザックリと書いてみる(一気に書いているので読みにくさMAX)

大学で作成したものの内容を大まかに思い出して書いてみたけどPythonに置き換えるならMax-Logic間でのデータの受け渡ししていた部分をPython-Logicでしっかり置き換えれるかどうかがまずは問題になりそう(なのでその点が可能かどうかわかる人は教えてほしい)

作成したものの根幹は大体こんな感じ
①DAWで入力用のトラックを用意して最低音に近いところはKey Switchとして使用
DAW(Logic)のトラックのポートをto Max 1に設定(Pythonでも同様に可能?)
例としてC1がMaxに出力されれば14平均律のモードに変更する
②入力用のトラックは最低音のあたり以外は通常のDAWと同じ使用感
再生した際にMaxに音程(note number)と何音目(何音目に重なっている)か、velocityをnote inとnote outをリアルタイムでMax/MSPに出力する
③DAW側、Logic Pro XとMax/MSPの間のデータの受け渡しは
Logic側はMidi Environmentで設定
入力用トラックは先ほどの通りポートをto Maxに設定
④Max/MSPは入力された音のデータをn平均律用に変換してDAWの出力用トラックに出力する
例として14平均律の場合で入力されたnoteの音程が基準音からプラス6だった場合は
基準音を440Hzとした場合、440x(2の14乗根)の6乗の周波数を計算する

ツール不使用、とりあえず電卓の機械計算ならy√x使用してメモリに記憶で累乗したものを基準音にかけたら出る
2の14乗根が1.0507…(2の14乗根)の6乗gが1.34590019…で基準音にかけると592.1960…Hz
となったがDAWでいきなりこの592.1960Hzは出せないので12平均律でこの592.1960Hzに最も近いnote numberがどこかを計算する

ド♯/C♯5 570.609とレ/D5 604.540の間で604.540の方が近いのでこちらに相当するnote numberを選択
目標の音程に12.344Hz高いのでDAWに604.540Hzから12.344Hz下げるように指示を出したいがDAWで直接そうする機能はないので代わりに604.540Hzから何Cent下げてくださいとMaxから指示を出す
Centというのは音程を調整するために使われるもので100Centで1半音
1200Centが一オクターブとなる
604.540から592.1960Hzにするためには何Cent下げれば良いかをMaxで計算してDAWの出力用のトラックに出力する
⑤DAWとMaxで音データのやり取りをする際にインターフェースとしてPC側の設定も必要なのでMacならAudio MIDI設定からMIDIスタジオでIACドライバの設定をする
Max側はMIDI SetupでIACドライバの設定をする(From Max)
DAW側は同時に発音したい音分のトラックを用意する(Centの計算が同時に鳴っている音の数分必要になるため)
DAW側はMaxから受けたデータ(From Max)をMidi Environmentのチャンネルスプリッタを使用して、同時発音数分各トラックにデータを振り分けるように設定する

DAWを使用しなければもう少し簡単なると思うのだけれどDAWを使用しているのは楽譜書く際にmidiロールや普段の5線譜を使えるという点とDAWの音源をフルに使えるからというのが大きいです

Pythonで置き換えられれば将棋の三駒関係での評価値みたいな感じでn平均律における三音関係とか勝手に評価してくれる物とかできたら面白そう

Logic Pro XとMax/MSPでデータの受け渡しをするのに必要な設定↓

スクリーンショット 2021-04-12 20.44.59

スクリーンショット 2021-04-12 21.26.15

スクリーンショット 2021-04-12 21.26.48

スクリーンショット 2021-04-12 21.27.12


この記事が気に入ったらサポートをしてみませんか?