Download Python from python.org. During installation, make sure to check the box Add Python to PATH.
Open Command Prompt (CMD) and run this command:
pip install mido
HEROS_Converter.py.music.mid.python HEROS_Converter.pymusic_print.gcode file using Notepad.import mido
import os
def convert_midi_to_gcode(midi_path, gcode_path):
print(f"Starting conversion: {midi_path} -> {gcode_path}")
try:
mid = mido.MidiFile(midi_path)
except Exception as e:
print(f"Error loading MIDI file: {e}")
return
gcode_lines = [
"; Generated by MIDI -> G-code converter",
"M17",
"M400 S1",
"M1006 S1"
]
active_notes = {}
accumulated_time = 0.0
SPEED_MULTIPLIER = 100
print("Analyzing notes...")
for msg in mid:
accumulated_time += msg.time
if msg.type not in ['note_on', 'note_off']:
continue
if accumulated_time > 0.01:
duration_units = int(accumulated_time * SPEED_MULTIPLIER)
if duration_units > 0:
if active_notes:
notes = list(active_notes.items())[:3]
channels = ['A', 'C', 'E']
durs = ['B', 'D', 'F']
vels = ['L', 'M', 'N']
line = "M1006"
for i, (note, vel) in enumerate(notes):
gcode_vel = int((vel / 127) * 99)
line += f" {channels[i]}{note} {durs[i]}{duration_units} {vels[i]}{gcode_vel}"
gcode_lines.append(line)
else:
gcode_lines.append(f"M1006 A0 B{duration_units} L0")
accumulated_time = 0.0
if msg.type == 'note_on' and msg.velocity > 0:
active_notes[msg.note] = msg.velocity
elif msg.type == 'note_off' or (msg.type == 'note_on' and msg.velocity == 0):
if msg.note in active_notes:
del active_notes[msg.note]
gcode_lines.append("M1006 W")
gcode_lines.append("M18")
with open(gcode_path, 'w', encoding='utf-8') as f:
f.write("\n".join(gcode_lines))
print(f"Done! Created file: {gcode_path}")
if __name__ == "__main__":
input_midi = "music.mid"
output_gcode = "music_print.gcode"
if os.path.exists(input_midi):
convert_midi_to_gcode(input_midi, output_gcode)
else:
print(f"File '{input_midi}' not found in the current folder!")
input("\nPress Enter to exit...")
;============printer start sound ==============
; Can’t Stop RHCP Generated by HEROS Engineering
M17
M400 S1
M1006 S1
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A50 B17 L50
M1006 A0 B17 L0
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A50 B17 L50
M1006 A50 B17 L50
M1006 A50 B17 L50
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A50 B17 L50
M1006 A50 B17 L50
M1006 A50 B17 L50
M1006 A47 B17 L50
M1006 A0 B17 L0
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A47 B17 L50
M1006 A47 B17 L50
M1006 A47 B17 L50
M1006 A62 B17 L50
M1006 A59 B17 L50
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A47 B17 L50
M1006 A47 B17 L50
M1006 A47 B17 L50
M1006 A48 B17 L50
M1006 A0 B17 L0
M1006 A62 B17 L50
M1006 A0 B17 L0
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A48 B17 L50
M1006 A48 B17 L50
M1006 A48 B17 L50
M1006 A62 B17 L50
M1006 A59 B17 L50
M1006 A64 B17 L50
M1006 A0 B17 L0
M1006 A48 B17 L50
M1006 A48 B17 L50
M1006 A48 B17 L50
M1006 A52 B17 L50 C35 D17 M50
M1006 A35 B17 L50 C52 D17 M50
M1006 A62 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A64 B17 L50 C38 D17 M50
M1006 A38 B17 L50
M1006 A52 B17 L50 C35 D17 M50
M1006 A52 B17 L50 C38 D17 M50
M1006 A38 B17 L50 C52 D17 M50
M1006 A62 B17 L50 C38 D17 M50
M1006 A35 B17 L50
M1006 A35 B17 L50 C64 D17 M50
M1006 A38 B17 L50
M1006 A38 B17 L50 C52 D17 M50
M1006 A52 B17 L50
M1006 A52 B17 L50
M1006 A50 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A62 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A64 B17 L50 C38 D17 M50
M1006 A38 B17 L50
M1006 A50 B17 L50 C35 D17 M50
M1006 A50 B17 L50 C38 D17 M50
M1006 A38 B17 L50 C50 D17 M50
M1006 A62 B17 L50 C38 D17 M50
M1006 A35 B17 L50
M1006 A35 B17 L50 C64 D17 M50
M1006 A38 B17 L50
M1006 A38 B17 L50 C50 D17 M50
M1006 A50 B17 L50
M1006 A50 B17 L50
M1006 A47 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A62 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A64 B17 L50 C38 D17 M50
M1006 A38 B17 L50
M1006 A47 B17 L50 C35 D17 M50
M1006 A47 B17 L50 C38 D17 M50
M1006 A38 B17 L50 C47 D17 M50
M1006 A62 B17 L50 C38 D17 M50
M1006 A59 B17 L50 C35 D17 M50
M1006 A35 B17 L50 C64 D17 M50
M1006 A38 B17 L50
M1006 A38 B17 L50 C47 D17 M50
M1006 A47 B17 L50
M1006 A47 B17 L50
M1006 A48 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A62 B17 L50 C35 D17 M50
M1006 A35 B17 L50
M1006 A64 B17 L50 C38 D17 M50
M1006 A38 B17 L50
M1006 A48 B17 L50 C35 D17 M50
M1006 A48 B17 L50 C38 D17 M50
M1006 A38 B17 L50 C48 D17 M50
M1006 A62 B17 L50 C38 D17 M50
M1006 A59 B17 L50 C35 D17 M50
M1006 A35 B17 L50 C64 D17 M50
M1006 A38 B17 L50
M1006 A38 B17 L50 C48 D17 M50
M1006 A48 B17 L50 C46 D17 M50
M1006 A46 B17 L50 C48 D17 M50
M1006 W
;=====printer start sound ===================