File size: 1,449 Bytes
9fa389d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6fcf15f
 
9fa389d
 
6fcf15f
9fa389d
 
 
 
 
 
 
 
 
6fcf15f
 
9fa389d
 
 
6fcf15f
9fa389d
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
47
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}")