jackdaw - 新たなDTMの可能性について
現在、電子音楽では主に12平均律が使われています。しかしそれ以外の5平均律や純正律等の響きを利用したいこともあります。そんなとき普通のDAWでは12平均律以外の音がなかなか出せずに苦労します。特に1オクターブ中に13個以上の音を入れたいときには策がほとんど無いのが現状です。
そこでこの度新たなDTMの可能性を探るための試みとして、jackdawという、音階の概念の無いDAWを開発することにしました。
jackdawは純正律に特化しており、トニックという音を基準として全ての音の高さが整数比で扱われます。例えばトニックをドの音にしておくと、<3/2>はソの音、<2/1>は1オクターブ高いドの音を表します。このようにして全ての音を比のみで表すことで、自由に音階を作ることができます。
ダウンロード・インストール
現在ソースコードはここにあります。
github.comダウンロードしてmakeして下さい(make jackdaw)。
./jackdawに楽譜ファイル(書き方は後述)を渡して実行すると、その中身に即してwavファイルが作られます。出力ファイル名はオプション-oで指定しますが、指定されなければa.wavになります。
楽譜ファイルの書き方
exampleに例がいくつかあるので分からなかったらそれを見てください。
score文
「score{」で始まって「}」で終わる部分の中身が楽譜となります。
(tonic 440) |
トニックを440Hzに設定します。 |
(modulate 3/2) |
トニックを現在の3/2倍にします。転調に使います。 |
(tempo 120) |
BPMを120にします。 |
(velocity 0.5) |
全体の音量を0.5倍にします。 |
<3/2>:4 |
トニックの3/2倍の音程の、長さ4の音符です。 |
<3/2>0.5:4 |
トニックの3/2倍の音程で、音量が0.5倍になった、長さ4の音符です。 |
0:4 |
長さ4の休符です。 |
(rhythm 1,1,2) |
リズムを(長さ1,長さ1,長さ2)の繰り返し(タタタン)に設定します。 音符の長さを省略するとリズムに従って長さが決まります。 |
音符をカンマ「,」で区切って並べるとメロディーが作れます。
<5/4>:1, <9/8>:.5, <1/1>:.5, <9/8>:1 (『七つの子』冒頭)
「/」を使うことで2つ以上のメロディーを重ねて同時に鳴らすことができます。
<5/4>:1, <9/8>:.5, <1/1>:.5, <9/8>:1 / <1/2>:2, <3/8>:1 (ベースラインを追加)
「|」を使うことで曲を区切ることができます。
score文の中では#〜#で囲まれた部分と##から行末までがコメントとして扱われます。
set文
今のところ使い道は
set samplerate = 44100
くらいです。サンプルレートが設定できます。
他の書き方:
set {samplerate = 44100}
こう書いても同じです。こちらは途中で改行をはさむことができます。
define文
マクロを定義できます。定義したマクロはその後波括弧{}で括ることで使うことができます。
define melody = <1/1>:1,<3/2>:1,<2/1>:2
score{{melody},{melody},{melody}} ## メロディーが3回繰り返される
message文
標準出力にメッセージを出力できます。
message this is message.
最後に改行されます。
message {this is message.}
の方だと最後に改行されません。
comment文
何もしません。
import文
同じディレクトリ内にある他のファイルを読み込みます。
header.jkdhファイルに"message header is loaded."、main.jkdファイルに"import header"と書いておいて./jackdaw main.jkdを実行すると、"header is loaded."と出力されます。
tonicやtempo、define文などを書いたヘッダファイルを作っておくと便利です。
system文
C言語のsystem関数を呼び出します。"system rm -rf /"とすると"rm -rf /"が実行できます。
今後の課題
音源という概念が今の所存在しません。 (jackdaw.cを見ると分かるのですが今後音源をどう扱っていくかについては色々考えています)
あとはまだ色々バグとかあると思います、じっくり潰していきます
このプロジェクトがあなたの役に立てればこの上なく光栄です。