import requests from music21 import converter def midi_to_musicxml(midi_file): """Convert MIDI to MusicXML using music21.""" score = converter.parse(midi_file) musicxml_path = "temp.musicxml" score.write('musicxml', fp=musicxml_path) return musicxml_path def convert_musicxml_to_svg_online(musicxml_path): """Send MusicXML file to Verovio API and get SVG output.""" url = "https://verovio.humdrum.org/cgi-bin/verovio.cgi" with open(musicxml_path, "rb") as file: files = { "file": ("score.musicxml", file, "application/xml"), "format": (None, "svg"), # Request SVG format } response = requests.post(url, files=files) if response.status_code == 200: return response.text # SVG content else: return f"Error: {response.status_code}, {response.text}" def midi_to_svg(midi_file): """Convert MIDI to SVG using Verovio Web API.""" # Step 1: Convert MIDI to MusicXML musicxml_path = midi_to_musicxml(midi_file) # Step 2: Convert MusicXML to SVG via Verovio API svg_content = convert_musicxml_to_svg_online(musicxml_path) # Save SVG output_svg = "output.svg" with open(output_svg, "w") as f: f.write(svg_content) return output_svg # Example Usage midi_file_path = "base_chords.mid" # Replace with actual MIDI file svg_output = midi_to_svg(midi_file_path) print(f"SVG file generated: {svg_output}")