pytakt.context module

このモジュールには、Contextクラスおよびそれに関連した関数が定義されています。

class Context(dt=0, L=480, v=80, nv=None, duoffset=0, durate=100, tk=1, ch=1, o=4, key=0, effectors=[], **kwargs)

Bases: object

Context クラスのオブジェクト (コンテキスト) は、sc モジュールで 定義されている関数および mml() 関数によって参照されるパラメータ情報を 集めたものです。

コンテキストは with 構文によって、切り替えることができます。例えば:

mycontext = Context(ch=2, v=50)
with mycontext:
    ...

とすると、with の中では mycontext が有効になり、with を抜けると元の コンテキストに戻ります。

コンテキストが持っている属性の値は mycontext.ch=3 のようにして変更でき ますが、新しい属性を追加するには addattr() メソッドを使う必要があります。

sc モジュールで定義されている関数および mml() 関数は、 Context クラスのメソッドとしても使用でき、コンテキストを指定した スコア生成が可能です (例: mycontext.note(C4)mycontext.mml('CDE') など)。

マルチスレッド環境でも安全に使用できるように、現在有効なコンテキストは スレッドごと別々に管理されています。新しいスレッドが生成されたとき、 そのスレッドのコンテキストは常にデフォルトコンテキスト (Context() で 得られるコンテキスト) になります。

インスタンスの属性

dt

生成されるイベントの dt 属性の値 (楽譜上の時刻と 演奏上の時刻との差) を指定します。

Type:

ticks

tk

生成されるイベントの tk 属性の値 (トラック番号) を指定します。

Type:

int

ch

生成されるイベントの ch 属性の値 (MIDIチャネル番号) を指定します。

Type:

int

v

生成される NoteEvent の v 属性の値 (ベロシティ) を指定 します。

Type:

int

nv

生成される NoteEvent の nv 属性の値 (ノートオフ ベロシティ) を指定します。

Type:

int or None

L

生成される NoteEvent の L 属性の値を指定します。 これは楽譜上の音価をティック単位で表したものに相当します。 また、rest() 関数における休符の長さ指定にも使われます。

Type:

ticks

duoffset

演奏時音長 (ノートオンとノートオフ の時間差、いわゆるゲートタイム) のオフセット値、もしくは L 属性 の値からその値を得る関数を保持します。 下の durate とともに、演奏時音長を決めるのに使われます。

Type:

ticks or function

durate

演奏時音長に対する加算値を音価に対する百分率で 指定します。演奏時音長は、上の duoffsetとともに、下式によって 決定されます。

演奏時音長 = duoffset + L * durate / 100  (duoffset が int/float のとき)

演奏時音長 = duoffset(L) + L * durate / 100  (duoffset が関数のとき)

演奏時音長が負の場合は 0 に修正されます。

note() 関数は、上の演奏時音長を NoteEvent の du 属性に設定します。 (ただし、L属性値と同じ値の場合は省略されます)。

Type:

int or float

o

オクターブを表す整数(4が中央ハから始まるオクターブ)。 これは mml() 関数でのみ使用されます。

Type:

int

key

自動的にシャープやフラットをつけるための調 を Key クラスのオブジェクト、もしくは Key()コンストラクタの第1引数を指定します。 これは mml() 関数でのみ使用されます。

Type:

Key, int, or str

effectors

スコア変換を行う呼び出し可能 オブジェクトのリストです。scモジュールの関数、mml関数、safe_mml 関数、およびMML内の各基本コマンドによって生成されるスコアに対して、 このリストに含まれる呼び出し可能オブジェクト(典型的にはEffector インスタンス)が先頭から順に適用されます。

Type:

list of callable objects

疑似属性

各音符に対する演奏時音長の指定を容易にするため、下の2つの疑似属性が 提供されています。 これらは通常のインスタンス属性と同じように値の読み出しや書き込みを行え ますが、属性として登録はされていません。

du

演奏時音長を表しています。 読み出すと演奏時音長 (上の durate の項を式を参照) が得られます。 値xを書き込むと、xを duoffset にセットするのと同時に、durate を 0 (ただし、xが負の場合は 100) にセットします。

使用例:

note(C4, du=120) : 音価(L属性値)にかかわらず演奏時音長を120ティックに固定します。

note(C4, du=-30) : 演奏時音長をL属性値より30ティック少ない値に設定し、音符間のギャップを30ティックに保ちます。

Type:: ticks

dr

演奏時音長の音価に対する百分率を表しています。 読み出すと durate 属性の値が得られます。 値を書き込むと、その値を durate にセットするのと同時に、duoffset を 0 に設定します。

使用例:

note(C4, dr=50) : 演奏時音長を音価の50%に設定します (いわゆるスタッカート演奏に相当します)。

Type:: int or float

コンストラクタ引数

Parameters:
  • dt – 同名の属性値を指定します。

  • L – 同名の属性値を指定します。

  • v – 同名の属性値を指定します。

  • nv – 同名の属性値を指定します。

  • duoffset – 同名の属性値を指定します。

  • durate – 同名の属性値を指定します。

  • tk – 同名の属性値を指定します。

  • ch – 同名の属性値を指定します。

  • o – 同名の属性値を指定します。

  • key – 同名の属性値を指定します。

  • effectors – effector属性の値を指定します。 属性にはリストのコピーが格納されます。

  • kwargs – コンテキストに対する追加の属性を指定します。


copy() Context

複製されたコンテキストを返します。effectors 属性値についてはリスト の複製が行われます。それ以外の属性については浅いコピーとなります。

property du
property dr
addattr(name, value=None) None

コンテキストに新たな属性を追加します。

Parameters:
  • name (str) – 属性の名前

  • value (any) – 属性の初期値

has_attribute(name) bool

name がコンテキストの属性(疑似属性を含む)であれば真を返します。 メソッド名は対象にしない点において、hasattr(self, name)とは異なります。

Parameters:

name (str) – 属性の名前

reset() None

すべての属性値を初期値 (デフォルトのコンストラクタ引数値) へ 戻します。

keys() List[str]

属性名のリストを返します。

items() List[Tuple[str, Any]]

属性名とその値の組のリストを返します。

update(**kwargs) Context

kwargs の代入記述に従って属性値を変更します。

Returns:

self

do(func, *args, **kwargs) Any

このコンテキストにおいて関数 func を実行し、その戻り値を 返します。

Parameters:
  • argsfunc へ渡す引数。

  • kwargsfunc へ渡す引数。

Examples

somecontext.do(lambda: note(C4) + note(D4))

attach(func) Context

effectors属性が持つリストの先頭にスコア変換関数 func を挿入します。

Returns:

self

Examples

>>> horn_in_F = newcontext().attach(Transpose(-Interval('P5')))
>>> horn_in_F.note(C4)
EventList(duration=480, events=[
    NoteEvent(t=0, n=F3, L=480, v=80, nv=None, tk=1, ch=1)])
detach() Context

effectors属性が持つリストの先頭要素を削除します。

Returns:

self

context() Context

現在有効になっているコンテキストを返します。

newcontext(**kwargs) Context

現在有効になっているコンテキストをコピーし、kwargs の代入記述に従って 属性値を変更したものを返します。context().copy().update(**kwargs) と 等価です。