Lexicon PCM80 & PCM81 Questions, Tips, Tricks & Solutions

ctreitzell

Member
Messages
4,738
OK, let's get some context before anyone dips their toes into this ocean and faces a deluge of info.

The very first thing to realize is that there are only 14 Global SysEx IDs

A SysEx ID defines a target parameter of an Algorithm. Some algorithms have 70 parameters capable of SysEx remote control. More commonly, there are about 50 parameters per algo which can be remote controlled.

In their infinite wisdom, Lexicon did not use the same SysEx ID for like parameters from algo to algo.

That means that usually there are around 35 to 50 parameters per algo that can be accessed directly by SysEx; yet those IDs need to be looked up in a table. I have a massive spreadsheet with all the parameters in a vertical column and all the 43 algos in a horizontal row and the ID numbers in cells.

Next you need to know how many ticks per parameter. Some have two ticks....some have 40,000 ticks!

I'll come back to this...
 

pangea2003

Member
Messages
275
OK, let's get some context before anyone dips their toes into this ocean and faces a deluge of info.

The very first thing to realize is that there are only 14 Global SysEx IDs

A SysEx ID defines a target parameter of an Algorithm. Some algorithms have 70 parameters capable of SysEx remote control. More commonly, there are about 50 parameters per algo which can be remote controlled.

In their infinite wisdom, Lexicon did not use the same SysEx ID for like parameters from algo to algo.

That means that usually there are around 35 to 50 parameters per algo that can be accessed directly by SysEx; yet those IDs need to be looked up in a table. I have a massive spreadsheet with all the parameters in a vertical column and all the 43 algos in a horizontal row and the ID numbers in cells.

Next you need to know how many ticks per parameter. Some have two ticks....some have 40,000 ticks!

I'll come back to this...

This is gold.. i'm all ears! :)
 

ctreitzell

Member
Messages
4,738
OK, so continuing on from post #1203
1- every algorithm has different parameter IDs and I've created an Exel document for that;
2- I've made another Exel document which gives the number of ticks, the display syntax for each tick and the correct midi number/value for every tick.
3- I've got another Exel doc which has the midi numbers/values correlated to SysEx.

The reason I have the MIDI number/values is because MIDI Designer Pro 2 uses those values for its controls and then translates those numbers to SysEx in the "background"

It would be possible to use the Named Tick document to look up the display syntax you want and get the midi value you want,
then input the midi number into an online SysEx to MIDI calculator and determine the SysEx value to add to the SysEx message to input into a midi controller. This Named Tick document has a SysEx example message included for every tick range, but since the parameter IDs are different for every algorithm, it made no sense to make a document for the SysEx exact messages.

Alternatively, my MIDI to SysEx conversion doc could be used.

So for every parameter remote control message you would want to send
you'd need to input a parameter ID and a value.
The parameter IDs are a single SysEx byte (00-7F).
The VALUEs are four bytes, which are Lexicon LSB first.

Sounds complicated? Well, it isn't as bad as it might seem. Let's look at an example.

Let's look at changing the Key in a Res2>Plate Algo. There are only 12 ticks which are quite human readable.

Here is the example SysEx message in my named tick doc:
F0 06 07 7F 0B 01 29 00 V1 V2 V3 00 F7
The 7th byte tells the PCM8x to which parameter to send the value to
Well, that parameter ID is not correct; the SysEx ID for the Key parameter for RES2>Plate is 47, not 29.
So needs to be changed to:
F0 06 07 7F 0B 01 47 00 V1 V2 V3 00 F7
BUT, there is no value in this message.
The value of the message is represented in the last four bytes where I have V1 V2 V3 V4.
OK, well SysEx always uses the same protocol for a message
F0= start of SysEx message
F7= end of SysEx message
and many controllers will want these bytes dropped from the message as the controller has likely been programmed to add those bytes to your messages.
Also, V1, 2, V3, V4 I have used in my documentation to show variable bytes. To add a value to the message you need to determine that and add it to the SysEx:

Starting with:
F0 06 07 7F 0B 01 47 00 V1 V2 V3 V4 F7
we need to replace the Vn bytes with actual values:
F0 06 07 7F 0B 01 47 00 00 00 00 00 F7 will send an actual value to a PCM80 depending upon which algorithm is loaded.
If Res2>Plate is loaded, this message will send a message to set the Key in the Pitch section to the lowest value which would be a midi value of 0 which equals the key of C for this parameter.

Following on from that logic, we can look at all the tick values for this Key parameter:
0 \C
1 \C# or Db
2 \D
3 \D#:Eb
4 \E
5 \F
6 \F#:Gb
7 \G
8 \G#:Ab
9 \A
10 \A#:Bb
11 \B

well, all those values might seem to translate straight across in SysEx for any value range less than 16 ticks, but not quite; we can now get the SysEx value for each tick:
F0 06 07 7F 0B 01 47 00 00 00 00 00 F7 = 0; which = C
F0 06 07 7F 0B 01 47 00 01 00 00 00 F7 = 1; which = C# or Db
F0 06 07 7F 0B 01 47 00 02 00 00 00 F7 = 2; which = D
F0 06 07 7F 0B 01 47 00 03 00 00 00 F7 = 3; which = D#:Eb
F0 06 07 7F 0B 01 47 00 04 00 00 00 F7 = 4; which = E
F0 06 07 7F 0B 01 47 00 05 00 00 00 F7 = 5; which = F
F0 06 07 7F 0B 01 47 00 06 00 00 00 F7 = 6; which = F#:Gb
F0 06 07 7F 0B 01 47 00 07 00 00 00 F7 = 7; which = G
F0 06 07 7F 0B 01 47 00 08 00 00 00 F7 = 8; which = G#:Ab
F0 06 07 7F 0B 01 47 00 09 00 00 00 F7 = 9; which = A
F0 06 07 7F 0B 01 47 00 0A 00 00 00 F7 = 10; which = A#:Bb
F0 06 07 7F 0B 01 47 00 0B 00 00 00 F7 = 11; which = B

If these messages aren't working on a PCM81; change the 3rd byte from 07 to 10.
That third byte targets the actual actual device...I know I already decoded these messages in this thread a while back and explained the Lexicon LSB.

If you've been able to follow on from here, this is the first step.
There are some other things to get to grips with:
Hex to decimal conversion;
Lexicon proprietary LSB first
When we get into parameters with a lot of ticks, an understanding will be important.

Try this, see how you go and and let us know; I'll come back and start on the bigger ranges.

I gotta do some other stuff right now, tho :)
 

pangea2003

Member
Messages
275
OK, so continuing on from post #1203
1- every algorithm has different parameter IDs and I've created an Exel document for that;
2- I've made another Exel document which gives the number of ticks, the display syntax for each tick and the correct midi number/value for every tick.
3- I've got another Exel doc which has the midi numbers/values correlated to SysEx.

The reason I have the MIDI number/values is because MIDI Designer Pro 2 uses those values for its controls and then translates those numbers to SysEx in the "background"

It would be possible to use the Named Tick document to look up the display syntax you want and get the midi value you want,
then input the midi number into an online SysEx to MIDI calculator and determine the SysEx value to add to the SysEx message to input into a midi controller. This Named Tick document has a SysEx example message included for every tick range, but since the parameter IDs are different for every algorithm, it made no sense to make a document for the SysEx exact messages.

Alternatively, my MIDI to SysEx conversion doc could be used.

So for every parameter remote control message you would want to send
you'd need to input a parameter ID and a value.
The parameter IDs are a single SysEx byte (00-7F).
The VALUEs are four bytes, which are Lexicon LSB first.

Sounds complicated? Well, it isn't as bad as it might seem. Let's look at an example.

Let's look at changing the Key in a Res2>Plate Algo. There are only 12 ticks which are quite human readable.

Here is the example SysEx message in my named tick doc:
F0 06 07 7F 0B 01 29 00 V1 V2 V3 00 F7
The 7th byte tells the PCM8x to which parameter to send the value to
Well, that parameter ID is not correct; the SysEx ID for the Key parameter for RES2>Plate is 47, not 29.
So needs to be changed to:
F0 06 07 7F 0B 01 47 00 V1 V2 V3 00 F7
BUT, there is no value in this message.
The value of the message is represented in the last four bytes where I have V1 V2 V3 V4.
OK, well SysEx always uses the same protocol for a message
F0= start of SysEx message
F7= end of SysEx message
and many controllers will want these bytes dropped from the message as the controller has likely been programmed to add those bytes to your messages.
Also, V1, 2, V3, V4 I have used in my documentation to show variable bytes. To add a value to the message you need to determine that and add it to the SysEx:

Starting with:
F0 06 07 7F 0B 01 47 00 V1 V2 V3 V4 F7
we need to replace the Vn bytes with actual values:
F0 06 07 7F 0B 01 47 00 00 00 00 00 F7 will send an actual value to a PCM80 depending upon which algorithm is loaded.
If Res2>Plate is loaded, this message will send a message to set the Key in the Pitch section to the lowest value which would be a midi value of 0 which equals the key of C for this parameter.

Following on from that logic, we can look at all the tick values for this Key parameter:
0 \C
1 \C# or Db
2 \D
3 \D#:Eb
4 \E
5 \F
6 \F#:Gb
7 \G
8 \G#:Ab
9 \A
10 \A#:Bb
11 \B

well, all those values might seem to translate straight across in SysEx for any value range less than 16 ticks, but not quite; we can now get the SysEx value for each tick:
F0 06 07 7F 0B 01 47 00 00 00 00 00 F7 = 0; which = C
F0 06 07 7F 0B 01 47 00 01 00 00 00 F7 = 1; which = C# or Db
F0 06 07 7F 0B 01 47 00 02 00 00 00 F7 = 2; which = D
F0 06 07 7F 0B 01 47 00 03 00 00 00 F7 = 3; which = D#:Eb
F0 06 07 7F 0B 01 47 00 04 00 00 00 F7 = 4; which = E
F0 06 07 7F 0B 01 47 00 05 00 00 00 F7 = 5; which = F
F0 06 07 7F 0B 01 47 00 06 00 00 00 F7 = 6; which = F#:Gb
F0 06 07 7F 0B 01 47 00 07 00 00 00 F7 = 7; which = G
F0 06 07 7F 0B 01 47 00 08 00 00 00 F7 = 8; which = G#:Ab
F0 06 07 7F 0B 01 47 00 09 00 00 00 F7 = 9; which = A
F0 06 07 7F 0B 01 47 00 0A 00 00 00 F7 = 10; which = A#:Bb
F0 06 07 7F 0B 01 47 00 0B 00 00 00 F7 = 11; which = B

If these messages aren't working on a PCM81; change the 3rd byte from 07 to 10.
That third byte targets the actual actual device...I know I already decoded these messages in this thread a while back and explained the Lexicon LSB.

If you've been able to follow on from here, this is the first step.
There are some other things to get to grips with:
Hex to decimal conversion;
Lexicon proprietary LSB first
When we get into parameters with a lot of ticks, an understanding will be important.

Try this, see how you go and and let us know; I'll come back and start on the bigger ranges.

I gotta do some other stuff right now, tho :)

thanks for this Todd. Can you recommend an easy/convenient app for the mac to send these messages to the pcm8x?

I have only sent patches with the snoize sysx librarian app so far..

cheers
 

burkinofaso

Member
Messages
350
@ctreitzell
These posts are excellent. Thank you for taking the time. I'd really like to use the Sysex capabilities of my RJM Mastermind more as it would save me having to patch every preset I use, although I understand that the Sysex parameter IDs are unique to each algorithm.

This information is invaluable.
 

ctreitzell

Member
Messages
4,738
thanks for this Todd. Can you recommend an easy/convenient app for the mac to send these messages to the pcm8x?

I have only sent patches with the snoize sysx librarian app so far..

cheers

@ctreitzell
These posts are excellent. Thank you for taking the time. I'd really like to use the Sysex capabilities of my RJM Mastermind more as it would save me having to patch every preset I use, although I understand that the Sysex parameter IDs are unique to each algorithm.

This information is invaluable.
My pleasure

I don’t want to fully derail this mammoth thread…that said, this info is PCM8x specific, even if the overall SysEx is somewhat generic

so, I guess I’ll keep posting until someone asks me to move somewhere else

Yeah @pangea2003 … with what device to send the messages? I use MIDI OX…my Mac knowledge is nil

RJM MM is what you want to use! @BenniD has his Stream Deck. I’m using a Morningstar MC-8.

Maybe you guys ask me for specific parameter control you want program and I’ll cover it :)

@husker the best part is you don’t have to do any Patching and whatever patching you do have can remain intact
 

burkinofaso

Member
Messages
350
Hi Todd - thanks - yes, getting rid of patching would be my main objective, especially as I seem to use some algos much more than others and I would have less programming this way.

As I'm quite new to the PCM81, my initial "needs" are much less complex than yours and others. I'm trying to learn what parameters do within each algorithm matrix/grid and then think about how I would like to control them further, mainly in a performance environment.

I'm interested in starting with basics like simpler, within-preset control of CHO / REV / DLY [On/Off] but then moving to more dynamic real-time control of REV spaces, panning, spatial positioning and so on.

Thanks again.
 

pangea2003

Member
Messages
275
My pleasure

I don’t want to fully derail this mammoth thread…that said, this info is PCM8x specific, even if the overall SysEx is somewhat generic

so, I guess I’ll keep posting until someone asks me to move somewhere else

Yeah @pangea2003 … with what device to send the messages? I use MIDI OX…my Mac knowledge is nil

RJM MM is what you want to use! @BenniD has his Stream Deck. I’m using a Morningstar MC-8.

Maybe you guys ask me for specific parameter control you want program and I’ll cover it :)

@husker the best part is you don’t have to do any Patching and whatever patching you do have can remain intact

i do have a mc6 but i never tried sysex messages with it..
i also have a streamdeck so i'll do some research then
thanks once again Todd
 

ctreitzell

Member
Messages
4,738
i do have a mc6 but i never tried sysex messages with it..
i also have a streamdeck so i'll do some research then
thanks once again Todd
With my MC-8 I have programmed a changing values across all 6 voices of PCM8x to one set of values and then to another…and back and forth…it is 24 MC-8 SysEx messages one way; and 24 the other

I don’t know if MC-6 is as capable

As I understand the Stream Deck is happy with SysEx
 

ctreitzell

Member
Messages
4,738
Hi Todd - thanks - yes, getting rid of patching would be my main objective, especially as I seem to use some algos much more than others and I would have less programming this way.

As I'm quite new to the PCM81, my initial "needs" are much less complex than yours and others. I'm trying to learn what parameters do within each algorithm matrix/grid and then think about how I would like to control them further, mainly in a performance environment.

I'm interested in starting with basics like simpler, within-preset control of CHO / REV / DLY [On/Off] but then moving to more dynamic real-time control of REV spaces, panning, spatial positioning and so on.

Thanks again.
Right…so you kind of want a remote control…I totally understand.

Setting up stompbox-like scenarios is possible…changing things like Rvb Size is going to be ugly in a live switching situation

Turning single FX on and off is going to be a workaround…finding the best parameters kinda depends

Give me a specific scenario you want to program …using which algo
 

burkinofaso

Member
Messages
350
Hi Todd - thanks for your reply. The RVB size thing was more a brain-storming thing - I'd be happy if I could just do the baby steps ON/OFF thing first!

I think I was thinking of using the master depth parameter for the chorus, the master delay time for the delays, and either output LVL (or possibly input LVL to preserve trails?) for the RVB.

I think you may have posted some of this kind of data earlier in the thread for the CHO+RVB algorithm which was great. I think the M-Band + RVB algorithm would be good to tackle.

The kind of playing scenario would be... 80s rock where the main guitar has a CHO/FLA effect on (I'll stay away from the detuning pitch algos at the moment) with perhaps a short plate reverb for ambience (depending on the venue); when the solo is due, I would like to be able to kick in a delay and perhaps turn off the reverb to not get too wet - and then reverse these changes going back to rhythm duties.

I hope this makes some sense. I may have to catch up with you tomorrow as here in the UK it's my bed time!
 

ctreitzell

Member
Messages
4,738
Hi Todd - thanks for your reply. The RVB size thing was more a brain-storming thing - I'd be happy if I could just do the baby steps ON/OFF thing first!

I think I was thinking of using the master depth parameter for the chorus, the master delay time for the delays, and either output LVL (or possibly input LVL to preserve trails?) for the RVB.

I think you may have posted some of this kind of data earlier in the thread for the CHO+RVB algorithm which was great. I think the M-Band + RVB algorithm would be good to tackle.

The kind of playing scenario would be... 80s rock where the main guitar has a CHO/FLA effect on (I'll stay away from the detuning pitch algos at the moment) with perhaps a short plate reverb for ambience (depending on the venue); when the solo is due, I would like to be able to kick in a delay and perhaps turn off the reverb to not get too wet - and then reverse these changes going back to rhythm duties.

I hope this makes some sense. I may have to catch up with you tomorrow as here in the UK it's my bed time!
I understand

I'm in France, an hour ahead of you :)
 

ctreitzell

Member
Messages
4,738
So, Really, first port of call is knowing how many ticks per parameter because they are somewhat consistent. Delay Times won't be and some ranges will be different from algo to algo.

master depth parameter for the chorus.
-doesn't apply to M-Band+Rb
-201 ticks for Master Chorus Depth and Rate percentage
-chorus is kind of easy because the parameter only appears on the algos with chorus

the master delay time for the delays
-201 ticks for Master Delay Time percentage
Delay Master is a challenge because every algo has it;
the smart thing is the Master percentage capability. The hardest thing on PCM8x is Delay per voice time; there are thousands of ticks.

output LVL
Output Level for what? "Audio Output Level" is not controllable ia SysEx and has two positions: -10dB and +4dB
I suppose you want the CONTROL Row in the Edit section for this. FX Mix or one of these controls. They really should hae made these global...oh well
you could also do this in the SubMixer if you using that.
Depends on how you have it set up; serial FX thru Rvb or Rb thru FX are probably somewhat trickier to set up

input LVL
-InLvl has 161 ticks

Toggle Delay ON/ Rvb OFF
Toggle Delay OFF/ Rvb ON
-maybe use FX Adjust for this? 81 Ticks for FX Adjust
-this depends on how you have it set up; again, serial FX might be tricky

Let's start with CHO+RVB then branch out to others.

So for CHO+RVB the Chorus Master Depth ID is:
F0 06 07 7F 0B 01 21 00 V1 V2 V3 00 F7
byte 7 is the parameter target. Now you need values.

OK, before working on values, you need to understand that the valuse are not serial!
Every 16 General MIDI values, the numbers jump 113 steps. This is the design of the LSB first scheme that Lexicon used for the SysEx. Also, realize that SysEx is more the machine language (actually bianary is, but let's not get into that); General MIDI numbers are a human readable translation.

Now, really, the easist way to the SysEx value you want is with the PCM8x encoder feeding a MIDI Listener program. That's how I go my data into my documents. The time when this gets tedious is when you have 1000s or 10,000+ ticks...really, anything over 300 ticks because you can find yourself spinning the encoder for long, long periods.

OK, back to the example for Chorus Master Depth:
F0 06 07 7F 0B 01 21 00 00 00 00 00 F7 = 0%
F0 06 07 7F 0B 01 21 00 00 02 03 00 F7 = 50%
F0 06 07 7F 0B 01 21 00 00 04 06 00 F7 = 100%
F0 06 07 7F 0B 01 21 00 00 06 09 00 F7 = 150%
F0 06 07 7F 0B 01 21 00 00 08 0C 00 F7 = 200%

Now, before we go after every tick Value, we can apply this to the Delay Time Master and Chorus Master Rate by simply changing the parameter ID in byte 7. The complication is, we have to ensure it is the correct ID for whatever Algo we want to control...otherwise we might be controlling some other parameter.

So for CHO+RVB the Delay Time Master ID is 17
apply it to the message above and we get:
F0 06 07 7F 0B 01 17 00 00 00 00 00 F7 = 0%
F0 06 07 7F 0B 01 17 00 00 02 03 00 F7 = 50%
F0 06 07 7F 0B 01 17 00 00 04 06 00 F7 = 100%
F0 06 07 7F 0B 01 17 00 00 06 09 00 F7 = 150%
F0 06 07 7F 0B 01 17 00 00 08 0C 00 F7 = 200%

see how you get on with this and I'll cover some of the other stuff later :)

I mean, really, I should make the remote!
 

BenniD

Member
Messages
17
Sorry I've been a little quite the last few days, just wanted to say a massive thank you to Todd for taking the time to explain all of this in such detail. I'm going to start reading through now and see how I get on with it.
 




Top Bottom