Replies: 11 comments 40 replies
-
Hi @puffer3 Can you post the panel and resources as you have it so far? It’s probably easier for me to change the lua that way and then you can look at the source code. You can always delete the attachment later once I download it. |
Beta Was this translation helpful? Give feedback.
-
Looking at the manual it looks like many values on the JP8 go from 0-255. This means that the sysex value for these values needs to be split into two bytes MSB and LSB. ie 127 will be 00 7f but 128 will be 01 00 and 255 will be 01 7f. function create14BitValue(value) local bv = BigInteger(value) return bv:getBitRangeAsInt(7, 14), bv:getBitRangeAsInt(0, 7) end local msb,lsb=create14BitValue(value) this function returns two variables (lua can do that!) that can be added to the sysex message: See panel attached. Normally with MIDI values go from 0-127 which fits into one 7bit byte 00 - f7 Each byte from byte 0x19 in the sysex mesage represents 8 bit bitfields that also need to be split into two sysex bytes once calculated. It's a bit of a challenge! I wrote a small panel that should should you the way. I only did byte 0x19 and a couple of the inital 14bit values in the message. For the bitfield sysex you would create and alter new functions for each byte (ie 0x20) would become ie local sumByte19 = processBitField19() local m19, l19 = create14BitValue(sumByte19) table.insert(byte, m19) table.insert(byte, l19) local sumByte20 = processBitField20() local m20, l20 = create14BitValue(sumByte20) table.insert(byte, m20) table.insert(byte, l20) Also I would recommend naming all your controls to being as close to the names in the manual. It will save confusion as you go deeper and deeper into the abyss! |
Beta Was this translation helpful? Give feedback.
-
Thank you dnaldoog! Heres my panel so far. I will try to integrate some of your suggestions! also attached is a single and full patch sysex dump from the synth i nabbed last night This community is very supportive and I do really appreciate it. I have felt a bit overwhelmed just trolling the old forum. Thanks again! |
Beta Was this translation helpful? Give feedback.
-
Thanks @puffer3 for that. I can't understand the manual. I don't see any reference for how to send individual values to the Jupiter 8. Most controls are indeed 0~255 so that would probably mean you have to use NRPN or sysex on each control, but I'm no sure how to do that from the manual. The sysex for dumping data that I suggested is probably about right. I loaded a MIDI Quest Demo instrument for Jupiter-8 MIDI KIT but moving the sliders sends no MIDI??? If you could download MIDIQuest and connect to the machine maybe you could sniff out the MIDI messages? Here is a screenshot. |
Beta Was this translation helpful? Give feedback.
-
On re- reading this I can see why moving the controls doesn’t do anything in MIDIquest, but then again it too should be sending the full 28 byte message on any modulator change? Doesn’t seem to. |
Beta Was this translation helpful? Give feedback.
-
HI there @puffer3 and @damiensellier, This panel handles incoming MIDI and assigns to the panel. I am not sure if it 100% because to be sure of that I would need to be working with the unit directly, but I thought I would also do this incorporating the current structure without your needing to do too much of a rewrite, because the design for MIDI IN/OUT all centres around that table. --re-assemble nibblelised data --m2=midi -- received from machine local t, total, offset = {}, 0, 7 for i = offset, m2:getSize() - 2, 2 do -- don't include trailing F7 -- offset from beginning of string DATA access only assert(i < m2:getSize()) local msb = bit.lshift(m2:getData():getByte(i), 4) local lsb = m2:getData():getByte(i + 1) total = msb + lsb table.insert(t, total) end local reassembledData= MemoryBlock(t) I have added some fields to the main lookup table which are the BIT.AND and BIT.RSHIFT numbers needed when re-reading in the bitfields; ... {"ENV_2_DECAY", map = false}, {"ENV_2_RELEASE", map = false}, { "LFO_WAVEFORM", "VCO_MODULATOR_FREQ_MOD_SWITCH", "PULSE_WIDTH_MODULATION_SWITCH", "VCO1_RANGE", map = true, a = {3, 12, 48, 192}, -- AND Mask r = {0, 2, 4, 6} -- Right Shift this much }, ... Again as I said I am not sure if these are right, but you will soon know! |
Beta Was this translation helpful? Give feedback.
-
Which panels do people suggest for saving panel presets on the computer with a simple browser (name only, not a file browser)? I want to add computer based patch storage to this panel and have been looking at the DX-11 panel. Is there one that is closer to what I am after? I see there has been some patch load and save functions added to this panel. I will try to work out a clean way of implementing them. Thanks! Thanks for all the help everyone! |
Beta Was this translation helpful? Give feedback.
-
Hi @puffer3, I think the best way to do this is with json, but it might be a steep learning curve. I have almost finished an implementation for your panel. It's interesting for me to review and brush up on such stuff before it all dissolves into the fog. By saving patches as json you will be able to assign a name and optionally other parameters linked to any one of the 128 x 64 byte sysex messages. I have written a few utilities here and one of them concerns json, but as I said I have almost finished a suggested implementation for your panel. So please stand by! |
Beta Was this translation helpful? Give feedback.
-
I've already built one for the Jupiter 8 with Encore - available here - https://godlike.com.au/index.php?id=150 If you want to build your own, you'll need to keep in mind that the Z80 is really, really easy to overwhelm with MIDI data, which was one of the problems that some of the other editors suffer from. Ctrlr will send a huge amount of MIDI data out, really quickly, when you move a modulator sending Sysex strings. This will crash the Jupiter and freeze it. |
Beta Was this translation helpful? Give feedback.
-
This is a new version with mock jupiter8 midi receive panel included for testing of receiving dumps as well as json file load/save functionality. Includes json dump file. |
Beta Was this translation helpful? Give feedback.
-
I did test the panel yesterday and it seems that the sysex messages are not controlling the parameters yet. CC for volume works and the bank request works, but even the switch parameters (which shouldnt need a timer to slow them down I would think) were not sending messages the synth would respond to. I am going to compare some sysex patch messages and make sure they are formatted in a way the synth can understand. Also it seems that only some versions of ctrlr want to send sysex with the panel in its current state. I am using a mac and versions: 5.6.23 I also tested it on the newest Windows build with no sysex whatever coming out. because each one seems to have bugs the others do not. Any help would be appreciated although I have already received a lot from here! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi all,
I am working on a panel for a Jupiter 8 with Encore MIDI. It doesn't have sysex or CC parameter updates, but apparently the workaround it to send a full patch every time a parameter change is performed. I am trying to figure out how to do this even tho I am not really a programmer, by looking at other examples.
My goal first, is to make an string of all the modulators I am going to send (28 bytes according to the Jupiter 8 Encore manual). There is some odd formatting of the last 4 bytes that I dont understand yet, but I am starting out just grabbing all the modulators (39).
Then I have to convert it to Hex and send it with proper sysex formatting. Then tie the method to the panel to be run every time a modulator value is changed.
I have never scripted in LUA. So far I was able to send a static sysex string everytime a modulator is changed, but assembling and formatting the data for the full patch is a bit beyond me ATM.
This doesnt work yet. I was using this forum post for reference. Just trying to collect the data first. still have to add the F0, F7 headers and footers and ID and everything. Apologies if this is too noob. If there's somewhere more basic I should start with LUA, please let me know. I have been reading some, but also just mucking around trying to get things to work.
still have to make the switches, but here is the interface portion so far.
Beta Was this translation helpful? Give feedback.
All reactions