Add files via upload

dx5_performances
probonopd 6 months ago committed by GitHub
parent cba3666af9
commit 455f9788be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 228
      performance_dx5.py

@ -0,0 +1,228 @@
import os
performance_names = ["DOUBLE HORN SECTION (DETUNED)",
"FANFARE TRUMPETS 1-2",
"FULL SYNTH BRASS (DETUNED)",
"TIGHT BRASS SECTION",
"SYNTH BRASS",
"SYNTH BRASS [F/C CHORUS]",
"С580 BRASS [F/C VIBRATO]",
"STRINGS & BRASS ENSEMBLE",
"CELLO QUARTET",
"VIOLIN ENSEMBLE",
"ENSEMBLE [L]/SOLO VIOLIN [R]",
"STRING ORCHESTRA",
"HIGH STRINGS (ANALOG TYPE)",
"CELLOS & VIOLINS",
"STRING ENSEMBLE [F/C VIBRATO]",
"STRINGS & VELOCITY TRUMPETS",
"ACOUSTIC GRAND PIANO 1",
"ACOUSTIC GRAND PIANO 2",
"ELECTRIC GRAND PIANO",
"ELECTRIC PIANO [M/W TREMOLO]",
"ELECTRIC PIANO (BRIGHT TINE}",
"DIRTY ELECTRIC PIANO",
"CLAV.ENSEMBLE",
"GRAND HARPSICHORD",
"PIPE ORGAN",
"JAZZ ORGAN",
"ROCK ORGAN WITH OLD TONE CAB",
"E.PIANO [L]/JAZZ GUITAR [R]",
"ELEC. BASS",
"DOUBLE HARPS",
"AFRICAN MALLETS",
"VIBRAPHONE",
"ELECTRIC PIANO & BRASS [BC1]",
"ELECTRIC GRAND & BRASS [BC1]",
"ELECTRIC PIANO & SAX [ВС1]",
"ELEC. PIANO & CLAV ENSEMBLE",
"ELECTRIC PIANO & STRINGS",
"HARPSICHORD & STRING ENSEMBLE",
"FULL ORCHESTRA",
"RIDE CYMBAL",
"KICK DRUM [L]/SNARE [R]",
"НІ-НАТ CLOSING: [L/CYMBAL [R]",
"НАND CLAPS [L]/TOM TOMS [R]",
"LOG DRUMS [LI/ROTO TOMS [9]",
"TAMBOURINE [L]/TIMBALI [R]",
"COWBELL [L]/WOOD BLOCK [R]",
"FRETLESS BASS [L]/SAX [ВС1] [R]",
"ACOUSTIC PIANO [L]/FLUTE [R]",
"SYNTHESIZER UPRISING",
"SAMPLE 8 HOLD [L]/LEAD LINE [R]",
"POLY SYNTH [L]/LEAD SYNTH [R]",
"PERCUSSIVE SYNTH",
"TOY MUSIC BOX",
"FM ENSEMBLE",
"PLANET OF ICE",
"MALE & FEMALE CHOIR",
"\"BIG BEN\" [L]/TUNED BELLS [R]",
"GLASS WIND CHIMES",
"JUNGLE NOISE (GROWL/BIRDS)",
"SIDE TO SIDE",
"TRAFFIC",
"FLOATING CLOUDS",
"COMBAT (EXPLOSION [L]; GUNS [R])",
"BOMBS AWAY!!"]
filename_a = "/tmp/user/_home_user_Downloads_DX5 Carts.zip/DX5A1.SYX"
with open(filename_a, "rb") as file:
data_a = file.read()
basename_a = filename_a.split("/")[-1]
filename_b = "/tmp/user/_home_user_Downloads_DX5 Carts.zip/DX5B1.SYX"
with open(filename_b, "rb") as file:
data_b = file.read()
basename_b = filename_b.split("/")[-1]
# Remove the first 6 bytes (the header) from the data, this is the sysex header
data_a = data_a[6:]
data_b = data_b[6:]
# Put the data into a list of 128-byte ones, but only the first 32 ones
voices_a1 = [data_a[i:i+128] for i in range(0, 128*32, 128)]
voices_b1 = [data_b[i:i+128] for i in range(0, 128*32, 128)]
voicenames_a = []
voicenames_b = []
i = 0
for voice_a in voices_a1:
i += 1
voicenames_a.append(voice_a[-10:].decode("ascii"))
for voice_b in voices_b1:
i += 1
voicenames_b.append(voice_b[-10:].decode("ascii"))
for i in range(0, 32):
print("* %i `%s`: `%s` `%s` + `%s` `%s`" % (i+1, performance_names[i], basename_a, voicenames_a[i], basename_b, voicenames_b[i]))
filename_a = "/tmp/user/_home_user_Downloads_DX5 Carts.zip/DX5A2.SYX"
with open(filename_a, "rb") as file:
data_a = file.read()
basename_a = filename_a.split("/")[-1]
filename_b = "/tmp/user/_home_user_Downloads_DX5 Carts.zip/DX5B2.SYX"
with open(filename_b, "rb") as file:
data_b = file.read()
basename_b = filename_b.split("/")[-1]
# Remove the first 6 bytes (the header) from the data, this is the sysex header
data_a = data_a[6:]
data_b = data_b[6:]
# Put the data into a list of 128-byte ones, but only the first 32 ones
voices_a2 = [data_a[i:i+128] for i in range(0, 128*32, 128)]
voices_b2 = [data_b[i:i+128] for i in range(0, 128*32, 128)]
voicenames_a = []
voicenames_b = []
i = 0
for voice_a in voices_a2:
voicenames_a.append(voice_a[-10:].decode("ascii"))
for voice_b in voices_b2:
voicenames_b.append(voice_b[-10:].decode("ascii"))
for i in range(0, 32):
print("* %i `%s`: `%s` `%s` + `%s` `%s`" % (i+33, performance_names[i+32], basename_a, voicenames_a[i], basename_b, voicenames_b[i]))
# Create the performances based on the data from the syx
for i in range(0, 63):
output_lines = []
if i < 32:
voice_data_a = voices_a1[i].hex().upper()
else:
voice_data_a = voices_a2[i-32].hex().upper()
# Add a blank space after every 2 characters
voice_data_a = " ".join(voice_data_a[i:i+2] for i in range(0, len(voice_data_a), 2))
print("voice_data_a: %s" % voice_data_a)
if i < 32:
voice_data_b = voices_b1[i].hex().upper()
else:
voice_data_b = voices_b2[i-32].hex().upper()
# Add a blank space after every 2 characters
voice_data_b = " ".join(voice_data_b[i:i+2] for i in range(0, len(voice_data_b), 2))
print("voice_data_b: %s" % voice_data_b)
# output_lines.append("[Performance]")
# output_lines.append("Name=" + performance_names[i])
output_lines.append("BankNumber1=1")
output_lines.append("VoiceNumber1=1")
output_lines.append("MIDIChannel1=1")
output_lines.append("Volume1=49")
output_lines.append("Pan1=0")
output_lines.append("Detune1=-3")
output_lines.append("Cutoff1=99")
output_lines.append("Resonance1=0")
output_lines.append("NoteLimitLow1=0")
output_lines.append("NoteLimitHigh1=127")
output_lines.append("NoteShift1=0")
output_lines.append("ReverbSend1=99")
output_lines.append("PitchBendRange1=2")
output_lines.append("PitchBendStep1=0")
output_lines.append("PortamentoMode1=0")
output_lines.append("PortamentoGlissando1=0")
output_lines.append("PortamentoTime1=0")
output_lines.append("VoiceData1=" + voice_data_a)
output_lines.append("MonoMode1=0")
output_lines.append("ModulationWheelRange1=99")
output_lines.append("ModulationWheelTarget1=1")
output_lines.append("FootControlRange1=99")
output_lines.append("FootControlTarget1=0")
output_lines.append("BreathControlRange1=99")
output_lines.append("BreathControlTarget1=0")
output_lines.append("AftertouchRange1=99")
output_lines.append("AftertouchTarget1=0")
output_lines.append("BankNumber2=2")
output_lines.append("VoiceNumber2=2")
output_lines.append("MIDIChannel2=1")
output_lines.append("Volume2=49")
output_lines.append("Pan2=127")
output_lines.append("Detune2=3")
output_lines.append("Cutoff2=99")
output_lines.append("Resonance2=0")
output_lines.append("NoteLimitLow2=0")
output_lines.append("NoteLimitHigh2=127")
output_lines.append("NoteShift2=0")
output_lines.append("ReverbSend2=99")
output_lines.append("PitchBendRange2=2")
output_lines.append("PitchBendStep2=0")
output_lines.append("PortamentoMode2=0")
output_lines.append("PortamentoGlissando2=0")
output_lines.append("PortamentoTime2=0")
output_lines.append("VoiceData2=" + voice_data_b)
output_lines.append("MonoMode2=0")
output_lines.append("ModulationWheelRange2=99")
output_lines.append("ModulationWheelTarget2=1")
output_lines.append("FootControlRange2=99")
output_lines.append("FootControlTarget2=0")
output_lines.append("BreathControlRange2=99")
output_lines.append("BreathControlTarget2=0")
output_lines.append("AftertouchRange2=99")
output_lines.append("AftertouchTarget2=0")
six_digits_number = "%06d" % (i+1+130)
performance_name = performance_names[i]
performance_name = performance_name.replace(" ", "_")
performance_name = performance_name.replace("(", "")
performance_name = performance_name.replace(")", "")
performance_name = performance_name.replace("/", "_")
performance_name = performance_name.replace("[", "")
performance_name = performance_name.replace("]", "")
performance_name = six_digits_number + "_" + performance_name.replace(" ", "_")[:10] + ".ini"
print("")
print("performance_name: %s" % performance_name)
for lines in output_lines:
print(lines)
if not os.path.exists("/tmp/performance"):
os.makedirs("/tmp/performance")
# Write the file
with open("/tmp/performance/" + performance_name, "w") as file:
file.write("\n".join(output_lines))
Loading…
Cancel
Save