How to ignore Program Numbers?

In the Sysex Message Structure of AKAI S-3000 there are two bytes to indicate the Program Number. While editing I want to control the parameters of the program selected on the AKAI not of the program the number of which is written in the Sysex String. How can I make the AKAI ignore that byte and use the parameter changes that ELECTRA sends on the actual selected Program regardless of its number? In the Sysex Message Structure there is also a byte for “Operational Code” which indicates if it is a request or a receive and it also distinguishes the parameters for Programs, Samples and Keygroups.

Operation codes

0x27 Request for Program Header bytes
0x28 Program Header bytes
0x29 Request for Keygroup Header bytes
0x2A Keygroup Header bytes
0x2B Request for Sample Header bytes
0x2C Sample Header bytes
0x2D Request for FX/Reverb bytes
0x2E FX/Reverb bytes
0x2F Request for Cue-List bytes
0x30 Cue-List bytes
0x31 Request for Take List bytes
0x32 Take List bytes
0x33 Request for Miscellaneous bytes
0x34 Miscellaneous bytes
0x35 Request Volume List item
0x36 Volume List item (only used in response to request)
0x37 Request Harddisk Directory entry
0x38 Harddisk Directory entry (only used in response to request)

So maybe there is a certain value for that byte that should be used when not doing a Sysex dump but changing parameters remotely via sysex…?
Would be much easier if there was a proper sysex implementation chart :frowning: but all the searches in the www gave very little success.

I have no idea ! Or better I have two ones:
Check if the instrument can be configured to enable SysEx transmit.
Then verify if the Sampler by itself sends out parameter edits when you tweak a knob or you jump to another parameter in the menu of the synth itself. If it does, review them via Midi-ox or similar. If you’re lucky you might find a way to create parameters edits without the Program Number.

From a very different angle: are you able the send a program change from synth to E1 or vice versa? And if you do, do you know/can you discover the relationship between the chosen program and the two bytes? Because then you can reconstruct those two bytes and insert them in the Sysex. This way your akai does not need to ignore them and you don’t hem to take care of them yourself.

This being said : be careful ! Usually parameters changes only change settings in a buffer memory. As long as you do not write the edit into a patch memory, all changes are temporary.
But if Akai expects parameter changes to contain program numbers, it might indicate it will perform undesired changes to your patches without asking permission…

Yes, by sending sysex from the AKAI it has the Program number included. As I´m just starting with some tests I´m still not shure if the problem remains… On the first day it looked like I described earlier, but yesterday I could manipulate a Program on the Akai regardless of its Programm number, but there was only one Program in the internal memory. So I still have to figure out if it is really a problem or not. But apart from that there are some other issues to solve. The value data is transmitted in a nibbled format in 2 bytes. After some experimenting it seems that I found the right way to adress the values but a lot of the AKAIs parameters have a range -50/+50 and until now I havn´t found a way that MIDI “0” adresses the negative part (-50) to have MIDI 0-100 = AKAI -50 → +50. Also I would love to use the DX7 ENV, but how did you manage it in your blofeld preset to invert the 99-0 Time parameters to 0-99?

Ha, you noticed :grin: that’s nice.

Well I added a function “changeRate” to the time parameters of the EG. The EG control is virtual in nature, not the CC-control itself, and uses (in my case) a parameter Number 4098 that is exactly 4000 higher in value than the CC value 98 I want to send.

The function is as follows:

function changeRate(valueObject,value) ---- converts DX7 style rates into ADSR style times for CC use
  local message = valueObject:getMessage ()
  local deviceId =  message:getDeviceId()
  local device = devices.get (deviceId)
  local paramNum = message:getParameterNumber()
  midi.sendControlChange (device:getPort (), device:getChannel (), paramNum-4000, 127-value)
end

So I invert the value and transmit that value as a control change to CC 98

Be aware ; if you look at the lua code of the Blofeld , it is a bit overloaded. It’s one of my first presets so not quite as clean when I look at it now. Will need to work on it.

1 Like

So it seems the “Program Number” issue is still there.

Receive Program Header bytes

0xF0 MIDI System Exclusive identifier
0x47 Akai Manufacturer code
cc MIDI Exclusive channel
0x28 Operation code
0x48 S1000 Model identity
pp,PP Program number
0x00 Reserved
oo,oo Byte offset into header
nn,nn Number of bytes of data
ln,hn First byte (nibbled)
…,… further data
0xF7 End of Exclusive message

As listed above there are two bytes for Program Number in every Sysex-String which means that the programmed controls will affect only the Program of that certain number… and if I turn a control knob the AKAI display jumps to that Program regardless what program I was playing. But I want to edit always the program which is active for editing in the sampler. @martin any ideas??

1 Like

what are the valid program numbers in the Akai?
Sometimes developers will use 00 to indicate the edit buffer, or have a special program number for the current program. Scan the docs looking for a mention of edit buffer and if nothing, try jamming 00 for the program number.

Worst case is making it a two-step process - call up the program number you want to edit and pull that program data down to the E1.

In the controls you can make that value a variable so when you read the sysex data from the Akai and pull it into the E1, you can find that program number and use it.

1 Like

Well @oldgearguy , “00” is program Nr. 1 :frowning: . How do I use a variable in a sysex string that I can dial in and that is than beeing used by all the parameter knobs I have programmed? Can this be done by putting in a “value” byte in that particular position where the probram number bytes are and link it to another knob where I can select the desired pogram number??

Yes you can. Go have a look at my D-50 preset . I use a function in almost all sysex controls I call getChannelByte. In case of most Rolands, the sysex must have a reference to the midi channel. Different problem, but same kind of solution.

You can make a function like getProgramNumber in which you use parameterMap.get to read the program number from another fader’s value

1 Like

@Lobo I am sorry for being slow in responding on this one. I kind of agree with what was written here. If the program number is required in the SysEx message, you either need a way of find an active program number out (so that you can include it in the message) or Electra needs to take control over that. ie. it will set the program number and will use that in subsequent SysEx messages.