File size: 1,927 Bytes
ec5d950
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""Render existing SheetSage2 MIDI and ABC outputs without loading a model."""
import argparse
import json
from pathlib import Path
import sys

SCRIPT_DIR = Path(__file__).absolute().parent
sys.path.insert(0, str(SCRIPT_DIR))

from rendering_sheetsage2 import render_outputs


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--input", help="Transcription output directory.")
    parser.add_argument("--midi", help="MIDI file with original note timing.")
    parser.add_argument("--abc", help="ABC score file.")
    parser.add_argument("--output", help="Output directory; defaults to --input or rendered/.")
    parser.add_argument("--audio", action="store_true", help="Render piano WAV.")
    parser.add_argument("--score", default="", help="Comma-separated pdf,svg,png.")
    parser.add_argument("--parts", default="mix", help="Comma-separated mix,melody,vocal,instrumental,chords, or all (audio only).")
    parser.add_argument("--duration", type=float, help="Minimum audio duration in seconds; preserves trailing silence.")
    args = parser.parse_args()
    audio = args.audio
    score = args.score
    if not audio and not score:
        if args.input:
            audio, score = True, "pdf"
        else:
            audio, score = bool(args.midi), "pdf" if args.abc else ""
    if not args.input and not args.midi and not args.abc:
        parser.error("Provide --input, --midi, or --abc.")
    try:
        result = render_outputs(args.input, midi=args.midi, abc=args.abc,
                                output_dir=args.output, audio=audio, score=score,
                                parts=args.parts, duration=args.duration)
    except (ValueError, OSError, RuntimeError) as exc:
        print(f"Rendering failed: {exc}", file=sys.stderr)
        return 1
    print(json.dumps(result, indent=2))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())