pytakt.text module

このモジュールには、可読かつPythonで評価可能なテキスト形式のスコアに ついての関数が定義されています。

showtext(score, rawmode=False, time='measures', resolution=480, limit=2000000.0, bar0len=None, file=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, timereprfunc=None) None

スコアの内容を、トラックごと、時間順に音符、休符およびその他の 情報を並べたPythonによって評価可能なテキストに変換して表示します。 この表示には、スコアが持っているすべての情報が含まれています。 デフォルトでは、各行に note, rest, ctrl, tempo, timesig, keysig, sysex などのコマンドが、小節番号、小節内ティック数とともに表示されます。 このテキストは eval することによって元とコンパチブルなスコアを生成する ことができます(ただし、スコアの構造は一般に異なります)。

Parameters:
  • score (Score) – 入力スコア

  • rawmode (bool, optional) –

    True にすると、各行にコマンドではなく イベントが表示されるようになります。 このモード (raw モード) では、下のように、pair_note_events=False として標準MIDIファイルから読んだスコアに対して、テキストに変換した 後にそれをevalすると、Tracksが持つ属性情報を除き、完全に同じスコア に戻ります。

    >>> buf = io.StringIO()
    >>> score = readsmf('a.mid', pair_note_events=False)
    >>> score.showtext(rawmode=True, file=buf)
    >>> print(list(score) == list(eval(buf.getvalue())))
    True
    

  • time (str, optional) –

    次のいずれかにより、各行先頭の時刻表示の形式を 決めます。

    • ’measures’ (デフォルト): 小節番号と小節内ティック数を表示します。

    • ’mbt’: 小節番号、拍番号、拍内ティック数を表示します。

    • ’ticks’: スコア先頭からのティック数を表示します。

    • ’all’: ‘mbt’ と ‘ticks’ で表示されるものをすべて表示します。

    • ’none’: 表示をしません。

  • resolution (int or float, optional) – 表示における4分音符当たりのティック数を指定します。

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

  • bar0len (ticks, optional) – 小節番号 0 の小節の長さを指定します。各行先頭の時刻表示にのみ 影響を与えます。

  • file (file object) – 出力先のファイルオブジェクトを指定します。 デフォルトでは sys.stdout (標準出力) です。

  • timereprfunc (function) – 時間の値を文字列に変換する関数を指定します。 デフォルトでは、rawモードならばrepr関数、そうでないなら frac_time_repr() に設定されます。

writepyfile(score, filename, rawmode=False, time='measures', resolution=480, limit=2000000.0, bar0len=None, end_score_args={}) None

showtext() によって変換されたテキストを、ヘッダ、フッタとともに ファイルへ出力します。このファイルは Python のプログラムとして実行可能 であり、実行すると下の例のようにスコア内容の再生、表示、および SMFやJSON ファイルへの変換が可能です。

>>> score.writepyfile(‘sample.py’)
>>> <Ctrl-D>
$ python sample.py
Usage: /usr/bin/python sample.py (play|show|write) [WRITE_FILE] [PARAM=VALUE ..]
$ python sample.py play  # 再生する。引数はあれば play() へ渡される。
$ python sample.py show velocity=True  # ピアノロール表示を行う。引数は show() へ渡される。
$ python sample.py write sample.mid “encoding=’sjis’”  # SMFへ書き出す。引数は writesmf() へ渡される。
$ python sample.py write sample.json indent=4  # 拡張子が’.json’ならば、JSONファイルへ書き出される。引数は writejson() へ渡される。
Parameters:
  • filename (str) – 出力ファイル名 (‘-’ なら標準出力)

  • end_score_args (dict, optional) – end_score関数へ渡される追加の引数

他の引数の意味は showtext() と同じです。

evalpyfile(filename, supply_tempo=True) Score

‘#pytakt’ シグニチャと end_score() を含んだ Python ファイル (これは、 writepyfile() によって生成されたものでも、ユーザによって書かれたも のでも構いません) を実行し、その中に記述されているスコアを返します。

注意: この関数はファイルの内容をPythonプログラムとして実行するため セキュリティ上の重大なリスクがあります。インターネット等外部から取得した ファイルに対してこの関数を適用する場合には、細心の注意を払ってください。

Parameters:
  • filename (str) – ファイル名

  • supply_tempo (bool, optional) – Trueであると、時刻 0 にテンポイベントが ない場合に、end_score()default_tempo 引数に指定され ている値のテンポイベントが補われます。 有効なテンポ値(BPM)を指定すると、時刻 0 にテンポイベントがない 場合に、その値のテンポイベントが補われます。 Falseの場合、テンポイベントは補われません。

Returns:

end_score() に引数として渡されたスコア。このスコア オブジェクトには属性として、default_tempo, smf_format, および smf_resolution が追加されていて、それぞれの値は、end_score()default_tempo, format, および resolution 引数の値に設定されて います。

end_score(score, default_tempo=125.0, format=1, resolution=480) None

Python を起動したときのコマンドライン引数に応じて、score の内容を 再生、表示、あるいはファイルに出力します。この関数は、スコアを記述した Python ファイルにおいて、その終了処理として使用すること想定しています。 writepyfile() によって生成されたファイルには末尾にこの関数が 置かれています。コマンドライン引数の使い方については writepyfile() を見てください。

Parameters:
  • score (Score) – 出力となるスコア

  • default_tempo (float or int, optional) – 時刻 0 にテンポイベントがないときのテンポを指定します。

  • format (int, optional) – 0, 1, 2いずれかの整数で、SMFのフォーマットを 指定します。write操作でSMFに書き出すときに参照されます。

  • resolution (int, optional) – SMFにおける分解能(四分音符あたりの ティック数)を指定します。write操作でSMFに書き出すとき に参照されます。

writejson(score, filename, **kwargs) None

score の内容をJSON形式によるPytakt独自のファイルに書き出します。 このファイルを readjson() で読むと、元と等価な(つまり、 ‘==’ で比較したときに真となる)オブジェクトが得られます。 ただし、score に下のクラス以外のオブジェクトが含まれている場合は 使用できません。

int, float, str, bool, None, Fraction, Pitch, Interval, Key, list, tuple, dict (キーは文字列に限る), bytes, bytearray, Event とそのサブクラス, EventList, Tracks, Chord

EventStreamを除くスコアは、通常、上のオブジェクトのみで構成されています ので、この関数によってスコア情報をファイルへ保存できます。異名同音の情報、 楽譜上と演奏上の両方の時刻、あるいは、追加のイベント属性を含められる点に おいて、標準MIDIファイルより有利です。

Parameters:
  • filename – 出力ファイル名 (‘-’ なら標準出力)

  • kwargs – json.dump へ渡されるその他の引数

Examples

>>> writejson(note(C4), '-', indent=4)
{
    "__event_list__": true,
    "duration": 480,
    "events": [
        {
            "__event__": "NoteEvent",
            "t": 0,
            "n": {
                "__pitch__": "C4"
            },
            "L": 480,
            "v": 80,
            "nv": null,
            "tk": 1,
            "ch": 1
        }
    ]
}>>>
>>> s = mml("C C# Db> D")
>>> writejson(s, 'a.json')
>>> s == readjson('a.json')
True
readjson(filename) Score

writejson() で書き出されたJSON形式のファイルを読んで 記述されているオブジェクトを返します。

Parameters:

filename – 入力ファイル名 (‘-’ なら標準入力)

showsummary(score, default_tempo=125.0) None

スコアに関して、演奏長、小節数、音域、イベント数などのサマリー情報を表示 します。

Parameters:
  • score (Score) – 入力スコア

  • default_tempo (float) – スコア冒頭部分にテンポイベントがない区間が 存在する場合、その区間のテンポはこの値であると仮定されます。