46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
"""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())
|