Ensoniq Mirage "ROMpler" #90
Replies: 6 comments 1 reply
-
An example collection for download can be found here: IMG files are available individually to check out, the Factory Library for example has semi-descriptive disk labels so you can make an informed choice; "B2" is "piano" on banks #1, "electric piano" on banks #2, and "drawbar organ" on banks #3 |
Beta Was this translation helpful? Give feedback.
-
Hi Marcel Refer to this old diagram to help come to grips with the following info, as it's a bit confusing without a visual reference Disks were originally a custom-formatted Single-Sided Double Density 3.5" floppy For the most part we can completely ignore the "Small" sectors, so they need to be skipped over / stripped out. An example read:
This gives 65,560 bytes; the first 1024 is the parameters, then 65,536 is the actual sound data for that "bank". Here's the other Sound Bank starting points: UpperSound1
LowerSound2
UpperSound2
LowerSound3
UpperSound3
I'm still figuring out exactly what the required parameters are and where they live, and also what comes under "configuration" rather than parameters (see final line). Further confusing is that there can be 8x sets of parameters for the waveforms in a bank (eg. start/stop locations, loop points), plus 4x sets of Bank parameters for the like of the VCF and VCA envelopes. A "parameter sheet" can be found here for reference: But I have tracked down quite a few; I will continue mapping out if you think it's a feasible way of getting good samples in? sound params for Lower Bank #1 d0 b3 de b3 e2 b3 e0 b3
Note that the Mirage's interface is usually in Hex (!!). As such, samples are referenced by 256 "rough" groups of 256 "fine" bytes. In the above loop parameters, only the "loop end fine adjustment" goes into byte-level, the others are referring to "pages" of 256 bytes eg. a "wavesample start" of "6B" would equate to the start of the 107th page of 256bytes in memory, = byte 27,392 wavesample 2 param starts 11,288 A note about "Top Key"; the wavesamples layer onto the keyboard There's probably a whole lot of detail that needs to be covered off to get fully operational, but the actual sample data and start / end / loop points should be relatively straightforward Configuration is found in Small sector (512byte) of track 11, starting 67072 |
Beta Was this translation helpful? Give feedback.
-
PS. You probably have a hex editor already and know what you're looking for, but for those playing along at home I'm using "Free Hex Editor Neo" to try to find the parameters, setting the view to "8 columns" and the left-hand view to "decimal". Note for example here the "09" (which is the Hex value for param 72 "top key") is repeated three lines later as it's also used for sample 2, then is replaced by "12" for the next two sets, then "1a", then "23" when converted to Binary and one added (keys in memory start at "0") they come out as Top Keys of 10 (hex 09), 19 (hex 12), 27 (hex 1a) and 36 (hex 23) The Mirage interface was a mix of Hex and Binary, some things were listed in Binary (most "human interface" settings like envelopes etc) and some (mostly to do with wavesamples) were in Hex. I've since found some text-file versions of the parameter cards, so listing them below. Some aren't required/relevant, but leaving them in for completeness. General Keyboard21 Master Tune 00-99 WaveSample26 Wavesample Select 01-08 Keyboard/Program29 Monophonic Mode On-Off Amplitude Envelope50 Attack 00-31 Amplitude Envelope Modulation55 Attack-Vel. Sens. 00-31 Filter Envelope40 Attack 00-31 Filter Envelope Modulation45 Attack-Vel. Sens. 00-31 Sampling Configuration73 Sample Time Adj. 30-99 Command11 Save Lower Kbd. Sound MIDI Configuration81 MIDI Omni Mode On-Off Wavesample26 Wavesample Select 01-08 |
Beta Was this translation helpful? Give feedback.
-
Hi Marcel It just takes a bit of study to comprehend, perhaps then certain elements can be simplified, eliminated, or incorporated? PS. the four Parameters per Bank can be seen as pre-sets; not only can they change the envelopes and mixes, but they can also change the sample selection within the bank itself. So for example, Bank #1 of the "B2" disk linked above has the capability, using the 4 presets, of doing two different acoustic pianos, a "honky-tonk" piano, and something that may perhaps be a koto? All with just 64kb of samples for the "lower half" of the keyboard |
Beta Was this translation helpful? Give feedback.
-
Or Program (Preset) #1 could just be loaded and ignore the others, at least for initial testing? |
Beta Was this translation helpful? Give feedback.
-
PPS. The actual synth structure is stock-standard 80s though, it's just the way the mixes / envelopes are done can by impacted by multiple factors |
Beta Was this translation helpful? Give feedback.
-
Hi Marcel
Following the "Grand Piano" discussion in the basic_synth section, I've been off investigating the disk image format of the ancient (~1984) Ensoniq Mirage sampler, to get some info together before putting forward a feature/project suggestion. I've gotten the major basics together, so before I go any deeper I'm seeing how feasible/useful the following is, what further info you'd need, etc.
The Ensoniq Mirage 8bit sampler had a massive(!) 64kb of memory for samples, but was used successfully on records for the likes of Janet Jackson, Skinny Puppy, Public Enemy, The Cure, etc., and is still held in high esteem by some. There are literally hundreds of professionally-sampled disk images floating around the internet, making it potentially a great candidate for an ESP32 / RP2040 "rompler", ie. sample player. Additionally it had 8x analogue VCFs and VCAs, so was more a sampling synthesizer than a straight sampler.
(it actually has TWO sets of 64kb memory, a "lower sound" and "upper sound" bank, but each loads independently, so can be treated as a separate entity if required for a new project.)
The available disk images, in EDM or IMG format (same structure, different name), are actually quite straight-forward to extract sample and parameter data from once you know the structure; you can import one in Audacity as "Raw Data -> unsigned 8bit, mono" and see the waveforms blatantly sitting there, but with "strips" of parameter and OS data interspersed.
So the question is, is it possible/feasible to be able to select an image from an SD card and load/extract either a single "bank", or both an upper and lower bank?
Image files are 440kb (450,560 bytes) and are uncompressed, so to my untrained mind it should be possible to read in a single bank directly from the file?
Each image ("disk") contains 3x lower banks and 3x upper banks; on a physical Mirage you would either "Load Lower: [1-3]", "Load Upper: [1-3]", or "Load Lower & Upper (Load All): [1-3])
Accompanying each bank are 8 sets of parameters, as each sound bank can be split into up to 8 different samples; these can be used as individual voices (single oscillator), or layered as two samples per voice with static or dynamic mixing (2 oscillators with different waveforms). Parameter data includes loop points, sample start/end locations, key assignments, etc. Sample data would be 65,536 bytes, and parameter data 1024 bytes.
I currently have figured out the data structure, where to start/stop reading for a bank and how to strip out the extraneous data, where parameters are located and what most of them are, and where general keyboard configuration parameters are stored; I can continue to track down exactly where every required parameter is located, but figured I'd see if the idea is technically feasible before mapping out every single piece.
If feasible, do you think a board with PSRAM would be a minimum requirement, or could it all happen with internal memory?
Some examples of "stock" sample disks in action:
https://www.youtube.com/watch?v=yPtTEzR3m-I
Sincerely, Lee
Beta Was this translation helpful? Give feedback.
All reactions