この文書は書きかけです
Takt基礎文法最速マスター
はじめに
Taktはテキストで音楽を記述するプログラミング言語で、Taktで書かれたコードをTaktインタプリタで実行するとMIDIを生成します。 Emacsプラグインが付属していたり、midiからソースコードを逆生成できたりします。
PMMLという言語の後継に当たり、似た構文です。 公式の説明は今の所 英語ばかりですがPMMLの方は日本語のもあるので英語が嫌な人はPMMLの方の文書も参考にすると良いと思います。 PMMLはテキスト音楽サクラに使われているMMLと似た言語です。
Taktの公式サイトはTakt | Text-based Music Programming Toolsです。
この記事の主な出典はレファレンスマニュアル[2]です。
インストール
インストール方法はDownload | Taktに書いてあります。
Linuxなら、解凍して./configure
してmake
してsudo make install
です。
(一応言っておくとtar.gzファイルをtar
コマンドで解凍するときのオプションはzvxf
です(と言いながら私はこれを書いた後で忘れる))
libasound2-devを入れる必要があるかも知れません。
基礎
###対話環境
コンソールにtakt
と打つと対話環境に入ります。
$ takt
Welcome to Takt version 0.309
> C D E
> quit
$
Ctrl-Cで再生を終了させる事ができます。
takt -Q
で対話環境で使用できるデバイスを表示する事ができます。
$ takt -Q
MIDI Output Devices:
[0] 14:0 Midi Through Port-0 (default)
[1] 128:0 TiMidity port 0
[2] 128:1 TiMidity port 1
[3] 128:2 TiMidity port 2
[4] 128:3 TiMidity port 3
MIDI Input Devices:
[0] 14:0 Midi Through Port-0 (default)
$
何も指定しなければdefaultのデバイスが使用されます。
デバイスの番号をDEV
としてtakt -m DEV
とするとデバイスを指定して対話環境に入ります。
defaultを変更したい場合、ALSAなら、aconnect
を使います。
Timidity - Arch Wiki#仮想 MIDI デバイスに接続を参考にしてください。
###ファイルを実行
takt -o hoge.mid sample-code.takt
とすれば、sample-code.taktを実行し生成されたMIDIをhoge.midに書き出します。
$ cat sample-code.takt
A A A A A
$ takt -o hoge.mid sample-code.takt
$ timidity hoge.mid
###Emacs takt-mode
EmacsでTaktコードの実行、再生等をするtakt-modeというものがあり、普通にインストールすると「/usr/local/share/emacs/site-lisp/」以下に入ります。
Emacsを起動した後、takt-mode
を実行し、その後play-from-here-solo
を実行するとカレントバッファ中の現在位置からのコードが実行、再生するといった具合で使います。
M-x
help-for-help
a
takt
で出る各takt系コマンドのヘルプも参考にしてください。
###midi-file-to-takt translator
takt
と同時にインストールされるmid2takt
というコマンドは、midiファイルの、和音や、声部構造、パラメータ変化などを解析し、そのmidiを生成するようなtaktコードを得ます[3]。
midi2takt hoge.mid > sample-code.takt
ただし、出力されるtaktコードは読み難いです。
###print函数
- 例:
print("Hello, World")
- コードの実行時に 文字列を表示します
- 生成されたmidiファイルを再生すると喋ったりとかはしません
###コメント
- C言語とかと同じで、
//
が1行コメントで/* hoge */
が複数行コメントアウトです- 例:
A A A A A //ラララララ
- 例:
- 例:
C D E F G A B
/* C
Major
Scale*/
- 入れ子にしても良い
- 例:
A A A A
/*
al /* al /* allowed!!!!! */ */ */
- 空白と同じ扱いです
###pitch name
- 音名
- 標準ライブラリで定義されている音名はアメリカ・イギリス式音名です
- 例:
G
- 例:
- 休符は
R
- restの略
- 大文字でも小文字でも大丈夫です
###Pitch literal
- octave adjuster・pitch name・accidental sequence・Octave numberを順に、空白を開けずに並べたものです
- Pitch name以外はオプションです
- 例:
^^C#b3
####Octave adjuster
^
と_
の列です^
で1オクターブ上がり、_
で1オクターブ下がります
####accidental sequence
- 臨時記号をそれぞれ3つまで並べたものです
- 臨時記号は3種類あります
#
- シャープです
- 半音上がります
b
- フラットです
- 半音下がります
- 小文字じゃなきゃ駄目です
%
- ナチュラルです
- あっても無くても変わりません
- シャープ/フラットを打ち消したりもしない
- その音だけが変わります
####Octave number
- 国際式オクターブ表記
- 符号無し整数で指定します
###変数 var statement
####宣言文
var
の後に変数名- 例:
var x
- 例:
- 初期化しても良い
- 例:
var y = ^^Ab
- 例:
,
で区切れば幾つも宣言できますvar x, y=A
A
・B
・C
・D
・E
・F
・G
・R
とそれらに対応する小文字1文字の名前は予約語なので変数名には使えません
####代入文
左辺値 = expression
の形- 例:
x = _Cbb
note statement
- pitch literal・任意個のmodifier・
&
を順に並べたもの- pitch literal以外はオプションです
- 一般に、statementとstatementの間は空白や改行などで区切られている必要があります
###modifier
####音長・音価
- 音長は指定しない場合4分音符になります
- 指定する場合modifierを使います
*
を指定すると1つにつき2倍の長さ、\
を指定すると1つにつき半分の長さになります.
を指定すると 付点、即ち1つにつき1.5倍の長さになります- 例:
c** //全音符、
c* //2分音符、
c //4分音符、
c\ //8分音符、
c\\ //16分音符、
c\. //付点8分音符のハ音
####強弱
- 指定しない場合80のvelocityとなります
- modifierで指定
+
を指定するとvelocityを、1つにつき10上げます-
を指定するとvelocityを、1つにつき10下げます
####staccato
!
を指定するとstaccatoのように音の後が1つにつき音半分切れます- 例:
{___ B- B!!! B- B!!!}****
chord statement
- 各要素を同時に再生する文
- 和音や多声の実現に使う
- 空白で区切られた任意個の文を角括弧でくくったの・任意個のmodifier・
&
、を順に並べたもの- 最初の以外はオプションです
- 指定されたmodifierは要素それぞれに適用されます
- 例:
[A# B B C]!
new-context statement
- track名の後にコロン・空白で区切られた任意個の文を角括弧でくくったの・任意個のmodifier・
&
、を順に並べたもの- 2番目以外はオプション
- 例:
right_hand: {a b c# e}++ &
- 要素は順に再生される
- 指定されたmodifierは要素それぞれに適用されます
- まとめてmodifierを指定したいときや、context内に効力を及ぼす文を使うときとかに使います
- 一塊の文になるのでchord statementの要素にして多声曲の1パートを構成したりもできる
- 例:
[{a b c} {c b a}]
- 例:
- trackというのはcontext内に影響を及ぼす文とかをまとめて名前を付けたもので、trackを指定したnew-context statementはtrackに設定されている文の影響を受けます
newtrack(right_hand){ ^ } //right_handを指定したnew-context statement中の要素全体は完全8度上がる
###context内に影響を及ぼす文
^
・_
v=INTEGER
expression
- 式
- リテラルは全てexpressionです
###chord expression
- 「chord expression」は便宜的に付けただけで非公式な名称です
[ 文々 ] 任意個の単項modifier
の形を取ります- chord statementの式版みたいなものです
###new-context expression
- 非公式名称
{ 文々 } 任意個の単項modifier
の形- new-context statementの式版って感じです
他の最速マスター
- プログラミング言語「基礎文法最速マスター」ランキング | http://cielquis.net/programming-grammer/
- Perl基礎文法最速マスター - サンプルコードによるPerl入門 〜 安定と信頼のPerlを学ぼう | http://d.hatena.ne.jp/perlcodesample/20091226/1264257759
- AWK Users JP :: awk 基礎文法最速マスター | http://gauc.no-ip.org/awk-users-jp/blis.cgi/awk_fastest
- Haskell基礎文法最速マスター - think and error | http://d.hatena.ne.jp/ruicc/20100131/1264905896
参考文献
- 高機能な音楽プログラミング言語Takt - 丸井綜研 | http://marui.hatenablog.com/entry/2014/09/14/150337
- Takt Language Reference Manual | http://takt.sourceforge.net/doc/takt-lang.html
- Takt: A read-eval-play-loop interpreter for a structural/procedural score language | http://speech.di.uoa.gr/ICMC-SMC-2014/images/VOL_2/1736.pdf