ベロシティ、演奏時音長、時間シフト

この章では、音符ごとに指定可能な表情付けのための指示について解説します。また、これらの指示のしくみの基となっているコンテキスト属性について説明します。

ベロシティ

ベロシティとは、MIDI規格の用語で、打鍵の速度、つまり音の強さを意味します (鍵盤楽器以外でも使用できます)。ベロシティの値は 最小値は1、最大値は127です。Pytaktの場合、何も指定しないとベロシティは 80 になります。

ベロシティを指定するには、v= に続けてベロシティの値を書きます。これにより、以降の音符のベロシティがその値になります。

cde v=90 fg v=80 ab
音符 ベロシティ
c, d, e 80
f, g 90
a, b 80

波括弧や角括弧の中でベロシティを指定した場合、その指定は波(角)括弧内だけで有効になり、波(角)括弧を出たときには、その括弧に入る前の値に戻ります。したがって、上の例は次のように書いても等価です。

cde {v=90 fg} ab

また、次の例における各音符のベロシティはその下の表の通りです。

[v=100 c {d v=90 e v=85 f}/3 g] a
音符 ベロシティ
c, d,g 100
e 90
f 85
a 80

値の指定には四則演算を含む式を使用でき、また式の中で現在のベロシティ値を表すものとして v を使用できます。例えば、ベロシティの値を現在の値から10増やすために、v=v+10 と書くことができます。さらに、このように v=v10 (• は +, -, *, / のいずれか) という形の場合は、略して v=10 と書くことができます。したがって、最初の例は下のように書くこともできます。

cde {v+=10 fg} ab

また、1つの音符あるいは和音についてだけベロシティを変更する場合は、c(v=90)[ceg](v+=10) のように音符(和音)の直後に丸括弧で囲んで指定する方法があります。これらはそれぞれ {v=90 c}[v+=10 ceg] と等価ですが、1つの音符(和音)だけについての指示であることがより明確になると思います。さらに、(v+=10)(v-=10) は強弱を指示するのによく使うことから、それぞれ ` (バッククォート), ? の1文字が代わりに使えるようになっています (下の例)。

c d(v*=1.2) e`` f? [gab`]`
音符 ベロシティ
c 80
d 96
e 100
f 70
g 90
a 90
b 100

つまり、` (バッククォート) はアクセント、? はその逆に相当します。増減の幅はデフォルトでは 10 になっていますが、カスタマイズによって変更できます。

演奏時音長

Pytakt では、音の開始 (ノートオン) から停止 (ノートオフ) までの時間のことを演奏時音長と呼んでいます (これは、ソフトウェアによってはゲートタイムと呼ばれています)。音価は楽譜上の音の長さを表しますが、実際に演奏されるときはその長さ通りに音を延ばさずに、スタッカート奏法のようにノートオフを早めたり、時には逆にノートオフを遅らせて次の音と一部重ねて発音させたりして、曲に表情をつけることがよく行われます。演奏時音長を指定することで、このような表情付けを制御できます。

Pytaktでの演奏時音長の指定の方法には、音価に対するパーセントで指定するものと、絶対的な長さを指定するものの2通りがあります。

音価に対するパーセントで指定するには dr という名前の設定値 (Pytaktではこのような設定値のことをコンテキスト属性と呼んでいます) を変更します。変更は、ベロシティと同様に、dr=値 あるいは dr=値 (•は +, -, *, / のいずれか) で行います。dr の初期値は 100、つまり演奏時音長が音価と一致するようになっています。下に dr の設定例を示します。

dr=50 c{d dr=25 e}/ f~(dr=80)
音符 音価(ティック数) 演奏時音長(ティック数)
c 480 240
d 240 120
e 240 60
f 960 768

なお、スタッカートに相当する記号として ! が用意されています。これは、’(dr*=0.5)’ と等価です。したがって、上の例は

c!{d! e!!}/ f~(dr=80)

と書き換えることができます。

演奏時音長を直接指定するには、du というコンテキスト属性を使います。これに正の値を指定すると、音価とは無関係にその値が演奏時音長になります。負の値を指定すると、音価にその負の値を加えた値が演奏時音長になり、つまり次の音との無音区間を一定に保つような設定になります。

drdu を両方設定したときには、あとに設定した方が有効になります。たとえば、dr=60 c d(du=240) でD音の演奏時音長は240ティック (144ティックではない)になります。

時間シフト

上の演奏時音長はノートオフ時刻を制御するためのものでしたが、ノートオン時刻を演奏時に楽譜上の時刻から少しずらしたい場合もあります。このようなときには、dt というコンテキスト属性が使用します。dt に値を設定すると、演奏時のノートオン時刻とノートオフ時刻の両方に対してこの値が加算されます。たとえば、

c(dt=30) e(dt=-60)

において各音のノートオン、ノートオフの時刻(ティック単位)は次のようになります。

音符 dtがないとき dtがあるとき
ノートオン時刻 ノートオフ時刻 ノートオン時刻 ノートオフ時刻
c 0 480 30 510
d 480 960 420 900

時刻シフトの記号として <> が使えるようになっており、それぞれ (dt-=30)(dt+=30) (30は64分音符に相当する長さ) と等価です。したがって、上の例は

c> e<<

と書くこともできます。

なお、dt の絶対値の大きさは、1920 (全音符の長さ)までに制限されています。

その他のコンテキスト属性について

上で説明した vdrdudt のほか、以前の章で登場した okeyL もすべてコンテキスト属性です。コンテキスト属性は、その設定方法が統一化されていて、属性名=値 あるいは 属性名=値 (•は +, -, *, / のいずれか) で値の変更ができ、括弧類 ({, }, [, ], (, )) で変更の影響範囲を限定できます。

これまでに説明していないコンテキスト属性には、下のものがあります。

属性名 初期値 意味
nv None ノートオフ・ベロシティ。0-127の数値で離鍵の速さを表します。使用しないときは None にしておきます。
tk 1 トラック番号。0以上の整数を指定します。トラック番号を別にすることで、個別に再生の有無を制御したり、五線譜上で別の段にしたりできます。MIDIファイルは、このトラック番号に基づいてトラック分けされたファイルが出力されます (format-1の場合)。
ch 1 MIDIチャネル番号。1-16の整数を指定します。チャネル番号を別にすることで、音色、ピッチベンド、ボリューム等の制御を個別に行えるようになります。10番のチャネルは、多くのシンセサイザで、リズム楽器に割り当てられています。


Last update: Jan 22 2026 12:18 JST     Copyright (C) 2026 Satoshi Nishimura Top Page