hexachords / working_version.py
pachet's picture
created working versions folder with a working version with piano rolls.
9fa389d
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}")