Here are al lot of notes after trying out what I got so far.
And I have been studying the manual carefully.
The Mirage is pretty complicated to use.
So I am in the process of understanding the thing properly.
-
- …there is a
Program dump request message
This command instruct the mirage to dump his current program for the upper or lower keyboard.
So maybe an option is to load upper, then request the program data …
Get lower program
F0h 0Fh 01h 03h F7h
return header is F0 0F 01 05 00 0D
Get upper program
F0h 0Fh 01h 13h F7h
return header is F0h 0Fh 01h 15h 03h 0Ah
Strangely when I keep resending them the message length differs a few bytes every time on the webapp.
Sometimes it just returns some weird data like cc messages.
But in midiox the returned dump is always 512 bytes.
Strange as the manual states the dump should be 625 bytes in nybbles.
But I get 512 byes. 113 missing… so it might be just one program… need to check.
01 05 00 0D 03 0B 0E 0D 03 0B 00 0E 03 0B 02 0E 03 0B 00 0E 00 00 04 00 0A 0F 0F 03 06 0C 40 00 05 00 00 00 00 0F 01 0E 01 0E 01 0F 0F 00 00 00 00 00 00 00 00 03 0B 0E 0F 04 0B 00 00 04 0B 40 00 00 04 0B 00 00 00 00 03 00 0A 0F 0F 03 0C 03 06 0C 01 00 00 02 05 02 04 02 04 02 0F 0F 00 00 40 00 00 00 00 00 00 04 0B 0E 01 04 0B 02 02 04 0B 0E 01 04 0B 02 02 00 00 06 00 00 08 0F 03 00 00 40 06 0C 04 00 0F 02 00 03 0F 02 0F 02 0F 0F 00 00 00 00 00 00 00 00 04 0B 0E 03 04 0B 02 04 04 0B 40 0E 03 04 0B 02 04 00 00 03 00 0A 0F 0F 03 0C 03 06 0C 0A 00 00 05 0F 06 0E 06 0E 06 0F 0F 00 00 40 00 00 00 00 00 00 04 0B 0E 05 04 0B 02 06 04 0B 0E 05 04 0B 02 06 00 00 03 00 0A 0F 0F 03 0C 03 40 06 0C 00 01 00 07 0F 08 0E 08 0E 08 0F 0F 00 00 00 00 00 00 00 00 04 0B 0E 07 04 0B 02 08 04 0B 40 0E 07 04 0B 02 08 00 00 01 00 0A 0F 0F 03 0C 03 06 0C 03 01 00 09 0F 0A 0E 0A 0E 0A 0F 0F 00 00 40 00 00 00 00 00 00 04 0B 0E 09 04 0B 02 0A 04 0B 0E 09 04 0B 02 0A 00 00 01 00 0A 0F 0F 03 0C 03 40 06 0C 06 01 00 0B 0F 0C 0E 0C 0E 0C 0F 0F 00 00 00 00 00 00 00 00 04 0B 0E 0B 04 0B 02 0C 04 0B 40 0E 0B 04 0B 02 0C 00 00 01 00 0A 0F 0F 03 0C 03 06 0C 0C 01 00 0D 0F 0F 0E 0F 0E 0F 0F 0F 00 00 40 00 00 00 00 00 00 00 00 0F 03 00 08 0F 03 04 00 02 01 08 00 0B 01 00 01 04 02 00 02 0D 02 00 04 40 06 03 00 08 0F 03 00 0C 06 03 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 40 0F 0F 0F 0F 0F 0F 00 02 0D 02 01 02 00 00 02 02 09 00 08 01 0B 01 00 02 0D 02 00 04 06 03 00 08 40 0F 03 00 08 0F 03 00 00 00 00 00 00 00 00 00 00 00
-
- Programs are assign to Upper or Lower half.
Called U+n or L+n, so U1 is Upper keyboard using program 1
A program is like a patch, contains envelops, filter parameter data…
‘Program / 0’ button + N
Display shows L1, so here we select program 1, 2, 3, and 4
L3 = lower keyboard half uses program 3
Erich has been helpful a lot. He documented the coding of his Wavsyn editor.
If needed I can ask him for advise.
To switch to upper program we have to double select ‘Program / 0’ button without N
sending:
F0h 0Fh 01h 01h 00h 7Fh F7h
00h
is program 00
key,
switch between upper and lower by sending 2 program 00
keys. But you do not know where you started so hard to say if you are on the upper or lower program, keyboard
So it looks we can just send a parameter request like
F0h 0Fh 01h 01h 0Ch 03h 07h 0Dh 7Fh F7h
03h 07h
is Parameter [37] for Resonance
returns F0 0F 01 0D 10 25 08 04 F7
[25] is hex [37]…
And now we know which program we are on.
Erich wrote this on this:
A Few SYSEX Tidbits
Program numbers are 1-4 in the Mirage display, but stored internally as 0-3. when sending a sysex command to change them, you specify 0-3, but what is returned depends on whether it is a lower or upper program. If an upper program, bit 5 is set so you can get hex 10 for upper 0, hex 11 for upper 1, an so on.
Setting a program is horrible. You can’t just set “upper 1”. You have to know what you are starting from. If in upper, then you CAN just send a 0-3, but if in lower, you have to SWITCH to upper first, just like when using the front panel.
Reading a parameter will give you the program (upper or lower). This is handy.
select the resonance parameter: F0 0F 01 01 0C 03 07 0D 7F F7
0c means parameter number follows; 03 07 is 37. 0D means return the value.
returns F0 0F 01 0D 10 25 08 04 F7
Here is how to interpret the response string:
0D – returning a parameter value
10 – upper 1 program
25 – parameter 37
08 04 is the value, but sent as nibbles and in reverse order (common Mirage trick). 04 is upper half >byte, which means 64. 08 is just 8. 8 + 64 is 72, but resonance only goes to 40! That is, in the display. Internally it goes to 160, so you divide it by 4 to get the display value of 72/4 = 18.
-
- Every parameter with a range higher then 31 should be buffered.
Other get out of sync. max 63
works but skips sometimes and 00-FF
0-255
are unusable.
I have been playing with the parameter
sample start [60]
sample end [61]
loop start [62]
loop end [63]
And I am a bit brainstorming how to do this.
value of 1 means 1 page, 1 page is 256 bytes and there are 256 pages per kb half. 256 pages * 256 = 65536 bytes aka 64KB.
the Mirage has 2x 64KB and 1x64KB can be allocated per keyboard half which can have 8 wave samples assigned.
Page 0 = first page
These values have a range from 0 to 255
, 00 - FF
and turning the knob doesn’t work well.
It looks the Mirage is getting busy and skips incoming messages.
These 4 parameters are related to each other.
What I found is
-1. Sample end [61] cannot be before Sample start [60] and is always at least 1 page more then [60]
-2. loop end [63] can be the same as loop start [62] which I think means a 1 page loop
parameter wave sample select [26]
sets which wave sample you can edit.
But it looks I can let all the wave samples start at 00
. have to test further what this does.
[SEQ REC] + [number] = upper wavesample select ( 1 - 8 )
[SEQ PLAY] + [number] = lower wavesample select ( 1 - 8 )
-
- MIX Mode / Chorus / single osc
mode |
|
|
|
|
Single osc = |
mix mode [28] off |
DETUNE [33] = — |
mix [34] = 0 |
mix vel mod [35]= 1 |
chorus osc = |
mix mode [28] off |
DETUNE [33] = 1-20 |
mix [34] = 32 |
mix vel mod [35]= 1 |
vel mixing = |
mix mode [28] on |
DETUNE [33] = 0 |
mix [34] = 0 |
mix vel mod [35]= 1-13 |
wheel mix = |
mix mode [28] on |
DETUNE [33] = 0 |
mix [34] = — |
mix vel mod [35]= 0 |
- 6.Wave sample assignment order: first lower 1 - 8, upper 1 - 8
Key assignment is further influenced by [28] mix mode and initial wave sample [27]
Mix Mode [on] osc 2 uses wave sample of osc 1 + 1
Wave samples are paired 1-2, 3-4, 5-6, 7-8 and only one top key per pair is honored.
-Topkey only 1, 3, 5, 7
-
- [27] initial wave sample = the first sample used in the sample assignment process.
if [27] initial wave sample = 3, topkey 1 and 2 are ignored.
So assignment = 3,5,5,6,7 and then 8
-
- wave sample start [60],wave sample end [60]
For each 8 wave sample per keyboard half
[60] wave sample start
[61] wave sample end
[62] loop start
[63] loop end
[64] loop end fine adj.
[65] loop OFF/ON
[69] relative amplitude
[72] top key
[66] wave sample rotate
[19] rotate current wave sample left by .n.
[20] rotate current wave sample right by .n.
[17] copy current wave sample to lower .n.
[18] copy current wave sample to upper .n.
-
- played pitch
original pitch of the sample
A keys is original pitch
input sampling rate
For this we can add overlay list to display the nearest notes and the pitch offset etc.
-
LOAD SEQ
= Masos function key + n
function = n
1 Cd Copy data from Source to destination
2 Fi Fade In from source start to Source End
3 Fo Fade Out from source start to Source End
4 Sc Scale the Source Data with a linear ramp function which ramps between Scale Start Factor and
Scale end Factor
5 Ad add source data to destination data, leave data in destination
6 In invert the source data
7 Rd reverse data from source start to source end
8 rP Replicate the first page of the source data on every page of the source data.
System reset = LOAD ALL ) = load upper + load lower + 0 + enter
#Midi cc
sustain on/off [89] sustain pedal mode
mod wheel 0…127 [84] midi controller enabled
Pitchbend 0…127 64 is center, [84] midi controller enabled
-
- Sysex message types
front panel commands
program dump request, n0 lower, n1 upper
configuration dump request
wave sample dump request [26] wave sample select
wave sample dump request absolute – memory address
wave sample manipulation commands
So this is enough for today 