Module music_df.scripts.humdrum_export.make_legend

Functions

def main(humdrum_path,
output_path,
settings=Settings(font_size=20, padding=10, rect_width=40, width=800, font_path='/Library/Fonts/Arial Unicode.ttf'))
Expand source code
def main(humdrum_path, output_path, settings=Settings()):
    with open(humdrum_path) as inf:
        data = inf.read()
    # If colors have transparency values, then they will be 8 characters long, but
    #   we want to ignore the transparencies.
    matches = re.findall(r"!! color_key: ([^=]+)=(#[a-fA-F0-9]{6})", data)
    if not matches:
        print(f"No colors found!")
        sys.exit(1)

    img = Image.new("RGB", (settings.width, settings.get_height(matches)), "white")
    d = ImageDraw.Draw(img)
    font = ImageFont.truetype(settings.font_path, settings.font_size)

    y_position = settings.padding
    for key, color in matches:
        d.rectangle(
            (
                settings.padding,
                y_position,
                settings.padding + settings.rect_width,
                y_position + settings.font_size,
            ),
            fill=color,
        )
        d.text(
            (settings.padding + settings.rect_width + settings.padding, y_position),
            key,
            font=font,
            fill="black",
        )
        y_position += settings.font_size + settings.padding

    d.text(
        (settings.padding, y_position),
        "Notes are colored according to labels (correct/incorrect)",
        font=font,
        fill="black",
    )
    d.text(
        (settings.padding, y_position + settings.font_size + settings.padding),
        "Red text annotations show model's incorrect predictions",
        font=font,
        fill="black",
    )

    img.save(output_path)
def parse_args()
Expand source code
def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("humdrum_file")
    parser.add_argument("output_path")
    args = parser.parse_args()
    return args

Classes

class Settings (font_size: int = 20,
padding: int = 10,
rect_width: int = 40,
width: int = 800,
font_path: str = '/Library/Fonts/Arial Unicode.ttf')
Expand source code
@dataclass
class Settings:
    font_size: int = 20
    padding: int = 10
    rect_width: int = 40
    width: int = 800
    font_path: str = "/Library/Fonts/Arial Unicode.ttf"

    def get_height(self, data):
        return (len(data) + 2) * (self.font_size + self.padding) + self.padding

Settings(font_size: int = 20, padding: int = 10, rect_width: int = 40, width: int = 800, font_path: str = '/Library/Fonts/Arial Unicode.ttf')

Instance variables

var font_path : str
var font_size : int
var padding : int
var rect_width : int
var width : int

Methods

def get_height(self, data)
Expand source code
def get_height(self, data):
    return (len(data) + 2) * (self.font_size + self.padding) + self.padding