Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ayu-mushi
Last active March 7, 2021 16:00
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ayu-mushi/45ecea65635c49bd4978 to your computer and use it in GitHub Desktop.
Save ayu-mushi/45ecea65635c49bd4978 to your computer and use it in GitHub Desktop.
Takt基礎文法最速マスター

この文書は書きかけです

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

  • ^_の列です
  • ^で1オクターブ上がり、_で1オクターブ下がります

####accidental sequence

  • 臨時記号をそれぞれ3つまで並べたものです
  • 臨時記号は3種類あります
    • #
      • シャープです
      • 半音上がります
    • b
      • フラットです
      • 半音下がります
      • 小文字じゃなきゃ駄目です
    • %
      • ナチュラルです
      • あっても無くても変わりません
        • シャープ/フラットを打ち消したりもしない
  • その音だけが変わります

####Octave number

###変数 var statement

####宣言文

  • varの後に変数名
    • 例: var x
  • 初期化しても良い
    • 例: var y = ^^Ab
  • ,で区切れば幾つも宣言できます
    • var x, y=A
  • ABCDEFGRとそれらに対応する小文字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の式版って感じです

他の最速マスター

参考文献

  1. 高機能な音楽プログラミング言語Takt - 丸井綜研 | http://marui.hatenablog.com/entry/2014/09/14/150337
  2. Takt Language Reference Manual | http://takt.sourceforge.net/doc/takt-lang.html
  3. 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment