pytakt.score module

このモジュールには、Scoreおよびその派生クラスが定義されています。

class Score

Bases: object

Scoreクラスはスコアの抽象クラスです。 スコアはイベントリスト (EventListクラスのオブジェクト) か、 イベントストリーム (EventStreamクラスのオブジェクト) か、 Tracks コンテナのいずれかです。 イベントリストは、0個以上のイベントを要素とするリストに、後述する演奏長 についての属性を付加したものです。 イベントストリームは、ジェネレータの仕組みを利用してイベントを順に生成する オブジェクトで、無限長スコアの表現を可能にします。 Tracks コンテナは 0個以上のイベントリストまたは他の Tracks コンテナを要素 とするリストで、すべての要素を同時並行で演奏するという構造を表します。

演奏長

スコアには演奏長という概念があり、これはティック単位でのスコアの長さを 表します。逐次結合において、あるスコアの演奏開始時刻は、 1つ前のスコアの演奏開始時刻にこの値を加えたものとなります。 スコアが EventList の場合はそのduration属性の値、Tracks の場合は その構成要素の演奏長の最大値、EventStream の場合は StopIteration例外が持つ value属性の値が演奏長となります。 演奏長は非負の値で、スコアに含まれるイベントの時刻の最大値と等しいとは 限らず、それより大きくても、また小さくても構いません。

演算規則

  • ‘+’ 演算子: s1, s2 をScoreオブジェクトとしたとき、s1 + s2 は 逐次結合を意味し、2つのスコアを逐次的に演奏する新たなスコアを返します。 結果は、s2 が EventStream なら EventStream、それ以外なら EventList に なります。s1 は EventStream であってはなりません。 s2 における各イベントはコピーされた上で、s1 の演奏長の分だけ時刻が ずらされます。 結果となるスコアの演奏長は、2つのスコアの演奏長の和になります。

  • ‘+=’ 代入演算子: s1 += s2 においては、s1 が EventList でかつ s2 が EventStream以外のスコアならば、s2 に含まれるイベントが (コピーされ時刻 がずらされた上で) インプレースに s1 に追加されます。 そうでなければ、s1 = s1 + s2 と等価です。

  • ‘&’ 演算子: s1, s2 をScoreオブジェクトとしたとき、s1 & s2 は、 並列結合を意味し、2つのスコアを同時に演奏する新たなスコアを返します。 結果は、s1s2 の一方または両方が EventStream なら EventStream、 それ以外なら EventList になります。イベントのコピーは行われません。 結果となるスコアの演奏長は、2つのスコアの演奏長のうちより大きい方になり ます。

  • ‘&=’ 代入演算子: s1 &= s2 においては、s1 が EventList でかつ s2 が EventStream以外のスコアならば、s2 に含まれるイベントがインプレースに s1 に追加されます。そうでなければ、s1 = s1 & s2 と等価です。

  • ‘*’ 演算: Scoreオブジェクトと整数の積は、元のスコアを整数の値の分だけ 繰り返し演奏するスコアになります。Scoreオブジェクトは EventStream で あってはなりません。結果は常に EventList になります。

Examples

(note(C4) + note(D4) + note(E4)).play()

(note(C4) & note(E4) & note(G4)).play()

(note(C4) * 16).play()


tostr(timereprfunc=<function std_time_repr>) str

文字列に変換したものを返します。

Parameters:

timereprfunc (function) – 時間の値を文字列に変換する関数。 デフォルトでは小数点以下5桁に丸められた表現を返す 関数になります。

get_duration() Union[int, float, Fraction]

スコアの演奏長を返します。EventStream に対しては使えません。

tee() Score

スコアが EventStream である場合、元のジェネレータの読み取り状態を 変えることなく独立に読み出しできるような、新たな等価ジェネレータを 返します。それ以外の型のスコアの場合は、self をそのまま返します。

count() int

スコア中のイベント数を返します。EventStream に対しては使えません。

mapev(func, durfunc=None) Score

スコア中の各イベントに対して関数 func を呼び、その戻り値で 置き換えた新しいスコアを返します。スコアの型、およびスコア内の イベントの順序は変わりません。

関数 func はイベントのスコアにおける出現順で呼ばれます。必ずしも 時刻順とは限りません。

関数 func は単一のイベントだけなく、Noneやイベントのリストを返すこと ができ、これによりイベントの挿入や削除が可能です。

注意: EventStreamに対して、func でイベントの時刻順が入れ替わる ような t属性値の変更をしてはいけません。

Parameters:
  • func (function) – 各イベント ev に対して func(ev) の形式で この関数が呼ばれます。この関数の戻り値は Event型、None、 もしくは Eventのイテラブルでなければなりません。

  • durfunc (function, optional) – 演奏長を変換する関数を指定します。 元スコアの演奏長 d に対して durfunc(d) の形式でこの関数が 呼ばれ、その戻り値が新しいスコアの演奏長になります。デフォルト では元の演奏長がそのまま使われます。

Examples

score.mapev(lambda ev: ev.update(tk=0))

すべてのイベントのトラック番号を0にしたスコアを返します。 元のイベントが書き換えられます。

score.mapev(lambda ev: ev.copy().update(ch=3) if hasattr(ev, 'ch') else ev)

チャネル番号を3に変更したスコアを返します。 (これは、Modify を用いた Modify('ch=3') と 等価の変換です。)

score.mapev(lambda ev: None if hasattr(ev, 'ch') and ev.ch==2 else ev)

チャネル番号が2のイベントを削除したスコアを返します。

score.mapev(lambda ev: ev.copy().update(t=ev.t * 2), durfunc=lambda d: d*2)

時間を2倍に伸張したスコアを返します。

chord_mapev(func, time_tolerance=None) Union[EventList, EventStream]

スコア中の各イベントに対して、同時に発音されている音の数や、その 中で何番目に低い音かの情報とともに関数 func を呼び、その戻り値で 置き換えた新しいスコアを返します。元のスコアが Tracks である場合、 結果は EventList になります。それ以外のスコアでは型は変わりません。

関数 func はイベントの時刻順(t属性値の昇順。同時刻の場合はスコア での出現順)に呼ばれます。

関数 func は単一のイベントだけなく、Noneやイベントのリストを返すこと ができ、これによりイベントの挿入や削除が可能です。

Parameters:
  • func (function) – 各イベント ev に対して func(i, m, ev) の 形式で、この関数が呼ばれます。i は、同時に発音されている 音の中での音高の順番(0 <= i < m`で、0が最低音)、`m は 同時に発音されている音の数を表します。 NoteEventClass に属さないイベントでは im も 0 になります。 この関数の戻り値は Event型、None、もしくはEventのイテラブル でなければなりません。

  • time_tolerance (float, optional) – chord_iterator() の同名の引数を参照。

Examples

score.chord_mapev(lambda i, m, ev: ev.copy().update(v=ev.v + (i==m-1)*10) if hasattr(ev, 'v') else ev)

和音の最高音に対してベロシティを10加算したスコアを返します。

mapstream(func, *, sort_by_ptime=False) Score

スコア中のイベントリストやイベントストリームに対して、 ストリームに対する変換関数 func を呼び、それが生成するストリーム で置き換えた新しいスコアを返します。 スコアの型は変わりません(イベントリストはストリームに変換されて func を適用した後、再びイベントリストに戻されます)。 各イベントは、変換関数内で明示的に行わない限りコピーされません。

Parameters:
  • func (function) – イベント列を変換するジェネレータ関数。入力 ストリーム stream に対して func(stream) の形式でこの関数 が呼ばれます。stream はイベントリストの場合 stream() で変換されたもの、イベントストリームの場合はそれ自身に なります。入力ストリームが発する StopIteration の value 属性 には、スコアの演奏長が格納されます。 ジェネレータ関数 func は、StopIteratoinに 変換後の演奏長を持つようなイベントのイテレータを返す必要 があります (関数内で、変換後のイベントを順に yield し、変換後 の演奏長を return すれば、そのような関数になります)。

  • sort_by_ptime (bool) – Trueの場合、func に引数として渡されるイベントストリームが、 演奏上の時刻(t属性値とdt属性値の和) でソートされたものに なります。func が yield するイベントの順序も演奏上の時刻順 であることを前提としています。

evlist(*, limit=2000000.0) EventList

スコアを、イベントが時刻順にソートされた新たなイベントリストへ 変換します。score.evlist()EventList(score) と等価です。

Parameters:

limit (ticks, optional) – スコアが EventStream であるときにスコアの長さを制限します。 詳細については、Score.stream() の同名の引数の項目を ご覧ください。

stream(copy=False, *, limit=None) EventStream

スコアをイベントストリームへ変換します。返される EventStream オブジェクトは、スコアに含まれるイベントを時刻順 (t属性値の昇順) に yieldします。 同時刻のイベントについては、スコアでの出現順でyieldされます。 また、返される EventStream は、スコアの最後に到達すると StopIteration 例外を送出しますが、この例外オブジェクトのvalue属性には、スコアの演奏長 (ただし、limit に達した場合は limit の値)が格納されます。

Parameters:
  • copy (bool, optional) – Trueならばコピーされたイベントが yieldされます。

  • limit (ticks, optional) – 与えた場合、self が EventStream であるときにスコアの長さを 制限し、この値以上の時刻を持つイベントを観測した時点で、 警告を出すともに StopIteration 例外を送出します (その観測 されたイベントは yield されません)。 EventStream 以外のスコアに対しては効果がありません。

chord_iterator(time_sequence=None, *, cont_notes=True, copy=False, time_tolerance=None, limit=None) Generator[EventList, None, Union[int, float, Fraction]]

スコアを時間区間ごとに区切って各区間の情報を時刻順に yield する ジェネレータ関数です。 yield されるのは EventList で、当該区間内に存在するイベント、および オプションで、前の区間から継続して発音されている音のイベントを含んで います。 この EventList には start という属性が追加されていて、そこに区間の 開始時刻が格納され、更に、duration属性には区間の終了時刻が格納されて います。 EventList 内でのイベントの順序は stream() に準じます。

Parameters:
  • time_sequence (None, ticks, or iterable of ticks, optional) – 区間の区切り方を指定します。None(デフォルト)の場合、 ノートオンまたはノートオフの存在する時刻(これは NoteEvent のノートオフ時刻、つまりt属性とL属性の和の時刻も含みます) が区切り位置となります。 intまたはfloatの場合は、その値を周期として一定間隔に 区切られます。intまたはfloatのiterableならば、その各要素 が区切り位置の時刻になります。各区間は、ある区切り位置の時刻 以上、次の区切り位置の時刻未満で定義されます。

  • cont_notes (bool, optional) – Trueの場合、前の区間から継続して発音されている音 (continued notes) について、その NoteEvent または NoteOnEvent への 追加参照が EventList に挿入されます。 なお、これらのイベントが追加参照であるかどうかは、イベントの 時刻が区間の開始時刻より小さいかどうかで判別できます (すなわち、yield されたイベントリストを evlist、 判別すべきイベントを ev としたとき、 ev.t < evlist.start なら追加参照です)。

  • copy (bool, optional) – Trueならば、yield されるイベントリストには コピーされたイベントが格納されます。cont_notes が True のときの追加参照は、コピーへの参照となります。

  • time_tolerance (float, optional) – time_sequenceがNoneのときに意味を持ち、時刻差がこの値以内の ノートオン、ノートオフを同一時刻とみなして区切りを1つとします。 省略された場合、self が RealTimeStream であれば 50ティック、 そうでなければ 10-6 に設定されます。

  • limit (ticks, optional) – stream() のlimit引数と同じ意味を持ちます。

Yields:

EventList

Raises:

StopIteration – スコアの最後に到達するとraiseされます。 この例外オブジェクトのvalue属性には、スコアの演奏長が 格納されます。また、limit に達した場合も raiseされ、その ときは value属性に limit の値が格納されます。

Tip

chord_iterator() の出力列から次のようにして元と同じ演奏のスコアを 得ることができます (ただし、演奏長は異なる場合があります):

par(EventList((ev for ev in evlist if ev.t >= evlist.start),
              evlist.duration)
    for evlist in score.chord_iterator())

または:

par(score.chord_iterator(cont_notes=False))

Examples

下のプログラムは、空でないスコア s について最大同時発音数を計算 します:

max(sum(isinstance(ev, (NoteEvent, NoteOnEvent)) for ev in evlist)
    for evlist in s.chord_iterator())

下のプログラムは、16分音符ごとに発音中の音のリストを表示します:

for evlist in s.chord_iterator(L16):
    print(evlist.start,
          [ev.n for ev in evlist if isinstance(ev, (NoteEvent, NoteOnEvent))])

下のプログラムは、小節ごとにイベントリストを表示します:

tm = TimeMap(s)
for m, evlist in enumerate(s.chord_iterator(tm.iterator())):
    print(f'Measure {m + tm.ticks2mbt(0)[0]}:', evlist)
active_events_at(time, event_type=<class 'pytakt.event.Event'>, cache=True) List[Event]

時刻 time においてアクティブな(効いている)イベントのリストを 返します。アクティブなイベントとは具体的には次のようなイベントを 意味します。

  • time において発音中の音に対する NoteEvent または NoteOnEvent。 time でちょうど発音が終わるものは含みません。一方、time から 発音を開始するものは、zero-durationである場合 (L属性が0である NoteEvent、もしくはノートオフが同時刻にある NoteOnEvent) を除いて、 含まれます。

  • time における調を表す KeySignatureEvent。ちょうど time に存在 するものを含みます。

  • time における拍子を表す TimeSignatureEvent。ちょうど time に存在 するものを含みます。

  • time におけるテンポを表す TempoEvent。ちょうど time に存在 するものを含みます。

  • 各コントローラ番号、各トラック番号、各MIDIチャネル番号において、 time 以前に存在する最後の CtrlEvent。モードチェンジ(コントローラ 番号124〜127) は対象外です。RPCはパラメータ番号ごとにその値の設定に 必要なCtrlEventが含められます。

  • 各トラック番号、各MIDIチャネル番号、各MIDIノート番号において、 time 以前に存在する最後の KeyPressureEvent。

アクティブなイベントは、楽譜上の時刻を基準にして(つまり、dt属性や du属性は考慮されずに)求められます。 演奏上の時刻を基準にしたい場合には、予め Render エフェクタを 適用した上で呼んで下さい。

Parameters:
  • time (ticks) – 対象となる時刻

  • event_type (class, int, or tuple of class or int) – クラスを指定 すると、調べるイベントの種類を、そのクラスまたはそのサブクラス のイベントに限定します (なお、NoteEvent, NoteOnEvent, NoteOffEventはどれも NoteEventClassと同じ意味になります)。 整数を指定すると、そのコントローラ番号のCtrlEventに限定します。 クラスおよび整数のタプルの場合は、そのいずれかに該当する イベントを対象とします。 なお、RPC関連のコントローラ番号(6,38,98-101)を指定する場合には これらをすべて同時に指定してください。

  • cache (bool) – True (デフォルト) の場合、キャシュを使用して同じ スコアに対する複数の問い合わせを高速化します。ただし、 このメソッドを使用した後にスコアが書き換えられた場合は、それ 以降正しい結果を返さなくなりますので、このような場合はFalseに して使用してください。

Returns:

アクティブなイベント(スコア中のイベントへの参照)の リスト。イベントの順序は時刻順 (同時刻の場合は出現順)になります。

Return type:

list of Event

Notes

キャシュを使用しない場合、イベント数Nのスコアに対するM個の問い合わ せの計算量は O(NM) になります。キャシュを使用した場合、最悪の 計算量は O(MN) のままですが、通常のスコアに対しては O(N+MlogN) に 削減されます。

show(*args, **kwargs) None

pianoroll.show() を与えられた引数と ともに呼び、ピアノロールウィンドウを表示します。

showtext(*args, **kwargs) None

text.showtext() を与えられた引数と ともに呼び、このスコアをpythonで評価可能なテキストに変換して 出力します。

summary(*args, **kwargs) None

text.showsummary() を与えられた引数と ともに呼び、統計情報を出力します。

play(*args, **kwargs) None

midiio.play() を与えられた引数と ともに呼び、このスコアを演奏します。

writesmf(*args, **kwargs) None

smf.writesmf() を与えられた引数と ともに呼び、このスコアを標準MIDIファイルに書き出します。

writepyfile(*args, **kwargs) None

text.writepyfile() を与えられた引数と ともに呼び、このスコアをpythonで評価可能なテキストに変換して ファイルに出力します。

writejson(*args, **kwargs) None

text.writejson() を与えられた引数と ともに呼び、このスコアをJSON形式に変換してファイルに出力します。

music21(min_note=60, bar0len=None, *, allow_tuplet=True, limit=500000.0) music21.stream.Score

Pytakt の Score オブジェクトを music21 のスコアオブジェクトへ変換 します。変換において、Pytakt におけるトラック0を除くそれぞれの トラックに対して、music21 のパート (五線譜の1段)が割り当てられます。

Pytaktのスコアが持っている情報のうち下のものは music21 のスコアに 出力されません。

  • 演奏上の時刻の情報 (dt属性およびdu属性)

  • MIDIチャネル情報 (ch属性)

  • ノートオフベロシティ (nv属性)

  • CtrlEvent(およびそのサブクラス), SysExEvent に属するイベントの情報

  • 調号イベント、拍子イベント、テンポイベント、著作権情報イベント、 トラック名イベント、楽器名イベント、マーカーイベント以外の メタイベント (ただし、汎用テキストイベント(mtype=1)はトラック0に存在 するときのみ曲タイトル情報として出力されます。)

変換において、NoteEventが次の属性を持っている場合はその右に書かれている 意味を持ちます。

  • voice (int): ボイス(声部)番号を指定します。1以上の整数で、複数の 声部が存在する場合にこの番号に従ってmusic21のVoiceストリーム群を 構築します。この属性がない場合は、同時刻において指定に使われていない ボイス番号の中から自動で選ばれます。

  • mark (str or tuple of str): 音符ごとに付加される記号( スタッカート、アクセント、指番号、トリルなど)を文字列で指定します。 タプルによって複数指定することも可能です。使用できる文字列の一覧 は pytakt.m21conv のソースコードの冒頭で確認できます。

現在のところ、スラーなどの Spanner や歌詞には対応していません。

Parameters:
  • min_note (ticks, optional) – 変換後のスコアで使用される可能性のある 最も短い音符の音価。この値が小さいほど、Pytakt のスコアを より正確に表現できるようになりますが、五線譜にしたときに 見づらい楽譜になることがあります。

  • bar0len (ticks, optional) – 小節番号 0 の小節の長さを指定します。

  • allow_tuplet (bool, optional) – デフォルトでは13連符までの連符を 自動認識しますが、この引数を False にすると連符を一切使用 しなくなります。

  • limit (ticks, optional) – スコアの長さを制限します (詳細については、Score.stream() を参照)。

pretty_midi(render=True, limit=2000000.0) pretty_midi.PrettyMIDI

Pytakt の Score オブジェクトを pretty_midi のPrettyMIDIオブジェクトへ 変換します。音符、ピッチベンド、コントロールチェンジ、テンポ、拍子、 調号、(プログラムチェンジによる)プログラム番号、トラック名、歌詞、及び テキストイベントの情報が出力されます。 pretty_midi オブジェクトにおいて、トラック番号、MIDIチャネル番号、プロ グラム番号のどれかが異なれば、新しい Instrument が割り当てられます。 一方、トラック番号、MIDIチャネル番号そのものの情報は失われます。

Parameters:
  • render (bool, optional) – デフォルト(True)の場合、演奏上の時間を使用します。 Falseの場合は、楽譜上の時間を使用します。

  • limit (ticks, optional) – スコアの長さを制限します (詳細については、Score.stream() を参照)。

static from_music21(m21score) Tracks

music21 のスコアオブジェクト (music21.stream.Streamクラスの オブジェクト)を Pytakt の Score オブジェクトへ変換します。 変換において、music21 の各パートに対して Pytakt のトラックが割り当て られます。MIDIチャネル番号は常に1になります。 music21 のスコアにおいて Voice構造が使われていれば、各NoteEventに voice属性が設定されます。

現在のところ、スラーなどの Spanner や歌詞には対応していません。

static from_pretty_midi(pmscore) Tracks

pretty_midi のスコアオブジェクト (pretty_midi.PrettyMIDI クラスの オブジェクト)を Pytakt の Score オブジェクトへ変換します。 pretty_midi における各 Instrument が、1番以降のトラックに順に割り当て られます。MIDIチャネルは 10を除く 1〜16 が、各トラックに巡回的に 割り当てられます。MIDIチャネル10はドラムのフラグのついた Instrument へ 割り当てられます。

dump() None
EventEffector: Callable[[...], Score] = None
CompositeEffector: Callable[[...], Score] = None
Transpose: Callable[[...], Score] = None
Invert: Callable[[...], Score] = None
ApplyScale: Callable[[...], Score] = None
ConvertScale: Callable[[...], Score] = None
ScaleVelocity: Callable[[...], Score] = None
Repeat: Callable[[...], Score] = None
TimeStretch: Callable[[...], Score] = None
Retrograde: Callable[[...], Score] = None
Quantize: Callable[[...], Score] = None
TimeDeform: Callable[[...], Score] = None
Swing: Callable[[...], Score] = None
ToMilliseconds: Callable[[...], Score] = None
Randomize: Callable[[...], Score] = None
Clip: Callable[[...], Score] = None
RemoveInitialSilence: Callable[[...], Score] = None
Arpeggio: Callable[[...], Score] = None
Filter: Callable[[...], Score] = None
Reject: Callable[[...], Score] = None
Cond: Callable[[...], Score] = None
Modify: Callable[[...], Score] = None
Product: Callable[[...], Score] = None
Apply: Callable[[...], Score] = None
ToTracks: Callable[[...], Score] = None
Render: Callable[[...], Score] = None
Tie: Callable[[...], Score] = None
EndTie: Callable[[...], Score] = None
ConnectTies: Callable[[...], Score] = None
Dump: Callable[[...], Score] = None
Voice: Callable[[...], Score] = None
Mark: Callable[[...], Score] = None
PairNoteEvents: Callable[[...], Score] = None
UnpairNoteEvents: Callable[[...], Score] = None
RetriggerNotes: Callable[[...], Score] = None
Microtone: Callable[[...], Score] = None
MT: Callable[[...], Score] = None
Temperament: Callable[[...], Score] = None
class EventList(events=[], duration=None, *, limit=2000000.0, **kwargs)

Bases: Score, list

EventListはイベントリストのクラスで、Scoreクラスとlistクラスの両方を 継承しています。 イベントリストとは、0個以上のイベントのリストに、durationと 呼ばれる演奏長の情報を付加したものです。 なお、リスト内のイベントは必ずしも時刻順に並んでいるとは限りません。

インスタンスの属性

duration

演奏長 (ティック単位)。負であってはなりません。

Type:

ticks

演算規則

  • bool値は、通常のリストと同様、要素数が0なら False となります。 duration属性値が0以外でも要素数が0ならFalseとなる点に注意してください。

  • イベントリストどうしの等価比較 (‘==’) は、クラスが一致し、リスト長が 一致し、リスト要素のすべてが等価であり、かつイベントリストのすべての 属性値が等価であるときのみ真となります。

  • 文字列を左オペランド、イベントリストを右オペランドにして ‘|’ 演算子を 用いると、左オペランドは無視され、イベントそのものの値となります。 これは、showtext() で ‘|’ の 左側にある小節番号等を無視するのに利用されます。

コンストラクタ引数

Parameters:
  • events (Score or iterable of Event) –

    • Score型である場合(EventListの場合を含む)、 そのスコアが時刻順にソート済みのイベントリストへ変換されます。 各イベントはコピーされません。 duration属性の値は、duration 引数があればその値、そうでな ければ、スコアの演奏長(ただし、EventStream が limit の制限で 打ち切られたときは limit の値)になります。

    • Eventのイテラブルである(しかし、EventList や EventStream ではない)場合、そのままの順序でイベントリストが作成されます。 各イベントはコピーされません。 duration属性の値は、次の順で決定されます。(1) duration 引数が あればその値、(2) events が StopIteration に value属性値を 持つイテレータならその値、(3) 空のイテラブルならば 0。どれに も該当しなければ例外を送出します。

  • duration (ticks, optional) – duration属性の値を指定します。

  • limit (ticks, optional) – events が EventStream型のスコアである場合に、スコアの長さを 制限します。詳細については、Score.stream() の同名の 引数の項目を見てください。

  • kwargs – イベントリストに対して追加の属性を指定します。


tostr(timereprfunc=<function std_time_repr>) str

文字列に変換したものを返します。

Parameters:

timereprfunc (function) – 時間の値を文字列に変換する関数。 デフォルトでは小数点以下5桁に丸められた表現を返す 関数になります。

copy() EventList

複製されたイベントリストを返します(浅いコピー)。

deepcopy() EventList

各イベントが複製された新しいイベントリストを返します。

sort(*, key=None) None

イベントを(デフォルトではt属性の時刻順に)ソートします。 list.sort() と同様に安定なソートアルゴリズムを使用します。

Parameters:

key (function, optional) – list.sort() の key引数と同じ意味を 持ちます。

sorted(*, key=None) EventList

イベントを(デフォルトではt属性の時刻順に)ソートした新しい イベントリストを返します。 list.sort() と同様に安定なソートアルゴリズムを使用します。

Parameters:

key (function, optional) – list.sort() の key引数と同じ意味を 持ちます。

add(ev) None

イベントリストの末尾にイベント ev を追加します。更に、 イベントリストの duration 属性値を、その値と ev の t属性値(ただし NoteEvent の場合は t属性値とL属性値の和) の大きい方に更新します。

Parameters:

ev (Event) – 追加するイベント

merge(other, time=0) None

イベントリスト self の末尾に、別のイベントリスト other に含まれる すべてのイベントを追加します。その際、追加するイベントの時刻には time の値が加えられます。mergeの結果、 イベントリスト self の duration 属性値は、その値と、other の duration属性値に time を加えたものうちで、より大きい方となります。

Caution

time が0以外の場合、デフォルトでは other に含まれるイベント が破壊されます。これを避けるには merge を呼ぶ前に other を deepcopy して下さい。

Parameters:
  • other (EventList) – 併合するイベントリスト

  • time (ticks, optional) – 時刻の加算値

get_duration() Union[int, float, Fraction]

スコアの演奏長として、duration属性の値を返します。

tee() EventList

self をそのまま返します。

count() int

スコア中のイベント数を返します。

class Tracks(elms=[], **kwargs)

Bases: Score, list

同時並行で演奏する構造を表現するためのコンテナクラスです。 Scoreクラスとlistクラスの両方を継承しています。 構成要素は EventList または他の Tracksコンテナに限られ、 EventStream は要素にできません。 全体の演奏長は、要素の演奏長の最大値になります。

演算規則

  • Tracksオブジェクトどうしの等価比較 (‘==’) は、クラスが一致し、リスト長が 一致し、リスト要素のすべてが等価であり、かつTracksオブジェクトのすべての 属性値が等価であるときのみ真となります。

コンストラクタ引数

Parameters:
  • elms (iterable of Score) – 要素となるスコア群

  • kwargs – Tracksオブジェクトに対して追加の属性を指定します。


tostr(timereprfunc=<function std_time_repr>) str

文字列に変換したものを返します。

Parameters:

timereprfunc (function) – 時間の値を文字列に変換する関数。 デフォルトでは小数点以下5桁に丸められた表現を返す 関数になります。

copy() Tracks

複製されたオブジェクトを返します(浅いコピー)。

get_duration() Union[int, float, Fraction]

スコアの演奏長として、構成要素の演奏長の最大値を返します。

tee() Tracks

self をそのまま返します。

count() int

スコア中のイベント数を返します。

sort(*, key=None) None

すべての構成要素に対して sortメソッドを適用します。

Parameters:

key (function, optional) – list.sort() の key引数と同じ意味を 持ちます。

class EventStream(iterator, **kwargs)

Bases: Score

イベントを時刻順に yield するジェネレータ(ジェネレータイテレータ)の クラスです。 これによって無限長のスコアを構築することが可能となります。

コンストラクタ引数

Parameters:
  • iterator (iterator of Event) – イベント列を出力する元となるイテレータ。 イベントの出力順序は、時刻 (t属性) の昇順でなければなりません。 また、イベント列が有限の場合にイベント列の終わり送出される StopIterationオブジェクトは、演奏長を値とした value属性を持つ 必要があります。 この演奏長は最後のイベントの時刻より小さくても構いません。

  • kwargs – EventStream オブジェクトに対して追加の属性を指定します。


is_consumed()

このストリームに対して過去にnextを実行したことがあればTrue、 そうでなければFalseを返します。

tostr(timereprfunc=<function std_time_repr>) str

文字列に変換したものを返します。

Parameters:

timereprfunc (function) – 時間の値を文字列に変換する関数。 デフォルトでは小数点以下5桁に丸められた表現を返す 関数になります。

get_duration() Union[int, float, Fraction]

例外を送出します。

count() int

例外を送出します。

tee() EventStream

元のジェネレータの読み取り状態を変えることなく独立に読み出しできる ような、新たな等価ジェネレータを返します。

merged(other, time=0) EventStream

selfother の2つのイベント列を併合した新たな EventStream を 返します。

返される EventStream の演奏長は、self の演奏長と、other の 演奏長に time を加えたものうちで、より大きい方となります。

Parameters:
  • other (EventStream) – 併合するイベント列。

  • time (ticks, optional) – 時刻の加算値。 other が出力するイベントの時刻にはこの値が加えられます。 この際、イベントのコピーは行われずに元のイベントが書き換え られます。

noteoff_inserted() EventStream

イベント列中の各 NoteEvent に対して NoteOffEvent を追加した新たな EventStream を返します。 追加される NoteOffEvent の t属性値は NoteEvent の t属性とL属性の 値の和に設定され、ストリーム中の適切な位置に挿入されます。 この NoteOffEvent には ‘noteon’ という属性が追加されており、その値は 元となった NoteEvent です。主に、stream() の戻り値に 対して使用し、ノートオフのタイミングで何らかの処理を行う必要がある 場合に便利です。

class RealTimeStream(iterator, starttime, **kwargs)

Bases: EventStream

入力デバイスからのイベントストリームを表す、EventStream のサブクラスです。


queue_event(ev, time=None, devnum=None)
seq(elms=[], **kwargs) EventList

elms に指定されたスコアの列をすべて逐次結合した EventList を返します。 例えば、seq([note(C4), note(D4), note(E4)]) は、 EvenList() + note(C4) + note(D4) + note(E4) と等価です。 無限長スコアに対しては使用できません。

Parameters:
  • elms (iterable of Score) – 結合するスコアの列

  • kwargs – 結果の EventList に対して追加の属性を指定します。

Examples

seq(note(i) for i in range(C4, C5)).show()

par(elms=[], **kwargs) EventList

elms に指定されたスコアの列をすべて併合した EventList を返します。 例えば、par([note(C4), note(D4), note(E4)]) は、 note(C4) & note(D4) & note(E4) と等価です。

Parameters:
  • elms (iterable of Score) – 併合するスコアの列

  • kwargs – 結果の EventList に対して追加の属性を指定します。

Examples

par(note(i) for i in range(C4, C5, 2)).show()

genseq(elms=[], **kwargs) EventStream

elms に指定されたスコアの列をすべて逐次結合した EventStream を返します。 elms は無限にスコアを生成するジェネレータであっても構いません。

Parameters:
  • elms (iterable of Score) – 結合するスコアの列。 各スコアは EventList または Tracks でなくてはなりません。

  • kwargs – 結果の EventStream に対して追加の属性を指定します。

Examples

>>> from itertools import count
>>> genseq(note(C4) for i in count()).play()
>>> genseq(note(C4 + (i % 4)) for i in count()).play()
>>> from random import randrange
>>> genseq(note(randrange(C4, C5)) for i in count()).play()
empty() EventList

空のスコアとして、空のEventListを返します。