pytakt.text module¶
This module defines functions for text format scores that are readable and can be evaluated in 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 ¶
This function displays the contents of the score in a Python-evaluatable text, with notes, rests, and other information in chronological order for each track. This display contains all the information the score has. By default, each line displays a note, rest, ctrl, tempo, timesig, keysig, sysex, and other command, along with the measure number and number of ticks in the measure. This text can be eval’d to generate a score compatible with the original (although the structure of the score will generally be different).
- Parameters:
score (Score) – Input score
rawmode (bool, optional) –
If True, events are displayed on each line instead of commands. In this mode (raw mode), for a score read from a standard MIDI file with pair_note_events=False as shown below, converting it to text and then eval’ing it will reproduce the exactly same score, except for the attribute information of the Tracks object.
>>> 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) –
One of the followings which determines the format of the time displayed at the beginning of each line.
’measures’ (default): displays the measure number and ticks within the measure.
’mbt’: displays measure number, beat number, and ticks within the beat.
’ticks’: displays ticks from the beginning of the score.
’all’: displays all the values displayed by ‘mbt’ and ‘ticks’.
’none’: no display.
resolution (int or float, optional) – Specifies ticks per quarter note in the display.
limit (ticks, optional) – Limits the length of the score. For details on limit, see the same name argument of
Score.stream()
.bar0len (ticks, optional) – Specifies the length of the initial measure (Bar 0). Affects only time display at the beginning of each line.
file (file object) – Specifies the file object to output to. The default is sys.stdout (standard output).
timereprfunc (function) – Specifies the function to convert a time value to a string. By default, it is set to the ‘repr’ function for the raw mode and
frac_time_repr()
otherwise.
- writepyfile(score, filename, rawmode=False, time='measures', resolution=480, limit=2000000.0, bar0len=None, end_score_args={}) None ¶
Output the text converted by
showtext()
to a file with a header and footer. This file is executable as a Python program, and when executed, it can play the score, show the score content, and convert it to a standard MIDI or JSON file, as shown in the example below.>>> 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 the score. Parameters, if any, are passed toplay()
.$ python sample.py show velocity=True # Show the piano roll. Parameters are passed toshow()
.$ python sample.py write sample.mid “encoding=’sjis’” # Write to SMF. Parameters are passed towritesmf()
.$ python sample.py write sample.json indent=4 # If the file name extension is ‘.json’, it is written to a JSON file. Parameters are passed towritejson()
.- Parameters:
filename (str) – name of output file (‘-’ for standard output)
end_score_args (dict, optional) – additional arguments passed to the end_score function
The meaning of the other arguments is the same as
showtext()
.
- evalpyfile(filename, supply_tempo=True) Score ¶
Execute a Python file containing the ‘#pytakt’ signature and
end_score()
(which can be generated bywritepyfile()
or written by a user) and return the score described in it.Caution: This function executes the contents of a file as a Python program, and therefore poses a significant security risk. Use extreme caution when applying this function to files obtained from outside such as the Internet.
- Parameters:
filename (str) – file name
supply_tempo (bool or float, optional) – If True, a tempo event of the value specified in the default_tempo argument of
end_score()
is supplied if there is no tempo event at time 0. If a valid tempo value (BPM) is specified, a tempo event of that value is inserted if there is no tempo event at time 0. If False, no tempo event is added.
- Returns:
The score passed as an argument to
end_score()
. This score object has the additional attributes ‘default_tempo’, ‘smf_format’, and ‘smf_resolution’, whose values are set to the values of the default_tempo, format, and resolution arguments ofend_score()
.
- end_score(score, default_tempo=125.0, format=1, resolution=480) None ¶
Depending on the command line arguments when Python is invoked, this function plays, displays, or outputs the contents of score to a file. This function is intended to be used for final processing in a Python file that describes a score. Files generated by
writepyfile()
will have this function at the end. Seewritepyfile()
for the usage of command line arguments.- Parameters:
score (Score) – the output score
default_tempo (float or int, optional) – Specifies the tempo when there is no tempo event at time 0.
format (int, optional) – Specifying the SMF format by one of the integers 0, 1, and 2. This is referenced when writing to SMF with the write operation.
resolution (int, optional) – Specifies the resolution (ticks per quarter note) in SMF. This is referenced when writing to SMF with the write operation.
- writejson(score, filename, **kwargs) None ¶
Writes the contents of score to Pytakt’s original file in JSON format. Reading this file with
readjson()
yields an object that is equivalent to the original (i.e., true when compared with ‘==’). It cannot be used if score contains objects other than those of the classes below.int, float, str, bool, None, Fraction, Pitch, Interval, Key, list, tuple, dict (each key must be a string), bytes, bytearray, Event and its subclasses, EventList, Tracks, and Chord
Scores, except for EventStreams, usually consist of only the above objects, so this function is useful for saving score information to a file. It has the advantage over standard MIDI files in that it can include information about enharmonics, both notated and played times, and additional event attributes.
- Parameters:
filename – Output filename (‘-’ for standard output)
kwargs – Other arguments passed to 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 ¶
Reads a file in JSON format written by
writejson()
and returns the object described.- Parameters:
filename – Input file name (‘-’ for standard input)
- showsummary(score, default_tempo=125.0) None ¶
Displays summary information about the score, including length, number of measures, pitch range, and number of events.
- Parameters:
score (Score) – Input score
default_tempo (float) – If there is a section at the beginning of the score with no tempo events, the tempo of that section is assumed to be this value.