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.pyUsage: /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 – 入力ファイル名 (‘-’ なら標準入力)