VOGONS


First post, by Deunan

User metadata
Rank l33t
Rank
l33t

I know there are several threads about this already but I have not found any simple solutions to figure out what exact version of SC-55 is emulated by my CM-300.

There are various manufacture dates, serial number ranges and chip IDs given. Most of these do not apply to CM series, and also the particular chips that would be different are not visible unless the sound module PCB is desoldered from the main PCB on CM-300 (and CM-500), which I don't want to do if it can be avoided. There are also MID files mentioned, but hunting them down after all these years, and then finding a good source to compare with, is difficult. YT videos are often lacking the exact HW version info, not to mention all the other instruments playing so unless one knows exactly what to expect, it's kinda useless.

So, I've written a simple Python script that does what I need, and figured it might be useful to some other people as well:

import sys, mido, time

midi_tests = [
['Breath Noise', 122, 0],
['Fl. Key Click', 122, 1],
['Square Wave', 81, 0],
['Sine Wave', 81, 8]]

names = mido.get_output_names ()

if len (sys.argv) > 1:
index = int (sys.argv [1])
else:
for i in range (len (names)):
print ("{:d}: {:s}".format (i, names [i]))
exit (0)

print ("Selected device: " + names [index])

midi_out = mido.open_output (names [index])
# Reset GS
midi_out.send (mido.Message ('sysex', data=[0x41,0x10,0x42, 0x12, 0x40,0x00,0x7F, 0x00, 0x41]))

for test in midi_tests:
midi_out.send (mido.Message ('control_change', channel=2, control=0, value=test [2], time=0))
midi_out.send (mido.Message ('program_change', channel=2, program=test [1]-1, time=0))

print ("Testing " + test [0])

midi_out.send (mido.Message ('note_on', channel=2, note=60, velocity=100, time=0))
time.sleep (2)
midi_out.send (mido.Message ('note_off', channel=2, note=60, velocity=100, time=0))
time.sleep (0.5)

Tested in Windows 10 using E-MU XMidi1X1. Python 3.11 with mido and python-rtmidi installed via pip. You might need to change the [1] index in call to open_output to select the device you want.
I'm happy to report I hear all the sounds so the ROM in my unit must be 1.20 or higher, and it's easy to compare with the built-in Microsoft GS Wavetable Synth, which does not support Key Click or Sine Wave it seems. Breath Noise is also audibly different between MS synth and the Roland hardware.

EDIT: Correction, MS synth needs a Reset GS, otherwise it defaults to GM mode I guess. The script now needs an argument to select the output device you want, without it'll list all the devices in the system and quit. I also added CTF tests but since I'm not 100% sure I got that right, I will not post this code to avoid confusion. If anyone familiar with the CTF issue wants to test it, please message me.