Home › Forums › General › Using Ctrlr › akai s2000 sysex help plz
- This topic has 55 replies, 6 voices, and was last updated 8 years, 2 months ago by pascalc.
-
AuthorPosts
-
April 17, 2013 at 1:42 am #8250
Well I kept at it and figured out how to make the slider work.
I used this formula and the ls/ms variables in place…-
F0 47 00 2A 48 00 00 00 07 00 01 00 ls ms F7
In moments I had a Filter Cutoff/LFO Depth and LFO Rate sliders functioning and adjusting the S2k in real time!
Woohoo!! Gentlemen, I do believe I’ve got a good start going here!
April 17, 2013 at 9:10 am #8257Based on this, i opened the Windows->MIDI Calculator in Ctrlr, pasted your hest for filter reso, had a look at the bits, then pasted this as a SysEx formula for a slider with range 0-99, the formula beeing:
f0 47 00 2a 48 00 00 00 07 00 01 00 ls ms f7
and the slider produces this set of data
[debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 04 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 05 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 07 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 08 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 09 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0a 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0c 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0d 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0e 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0f 00 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 05 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 07 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 08 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 09 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0c 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0e 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0f 01 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 05 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 08 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0a 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0e 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0f 02 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 04 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 05 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 07 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 08 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 09 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0a 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0d 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0e 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0f 03 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 07 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 09 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0d 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0e 04 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 04 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 06 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 07 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 08 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0a 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0b 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0c 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0d 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 0f 05 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 00 06 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 01 06 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 02 06 f7] [debug] RAW:[f0 47 00 2a 48 00 00 00 07 00 01 00 03 06 f7]
April 17, 2013 at 9:11 am #8258ahhh you beat me to it, good job.
April 17, 2013 at 11:11 am #8261Nice going Synthetech 🙂
Here’s a little helper script for being able to change the sysex command to select another program / keygroup.
This is linked to a togglebutton so only two values/options but you can see what is happening.
For this i assumed the 10’th (and 11’th? – probably split in the same way) bit is the one needing to be changed.`
—
— Called when a modulator value changes
— @mod http://ctrlr.org/api/class_ctrlr_modulator.html
— @value new numeric value of the modulator
—
— example of how to change the sysex formula field contentssysexswitch = function(mod, value)
m = panel:getModulatorByName(“modulator-1”):getMidiMessage()
if value == 0 then m:setProperty(“midiMessageSysExFormula”,”F0 47 00 2A 48 00 00 00 07 00 01 00 ls ms F7″,true)
elseif value == 1 then m:setProperty(“midiMessageSysExFormula”,”F0 47 00 2A 48 00 00 00 07 00 02 00 ls ms F7″,true) endend
`ps, Atom, what does the bool do for setting this property? I tried both false & true and did not notice any change in behaviour.
April 17, 2013 at 12:07 pm #8264setProperty() are undoable, this boolean setting should be always set to false but i bound it this way. It really makes no difference what you will set to. It indicate is the operation is undoable or not, but since i have not implemented the undo function it’s just ignored.
April 17, 2013 at 1:40 pm #8267Thanks Atom, so to be sure set it to false for future compatibilty issues if/when you decide to implement undo, yes?
April 17, 2013 at 1:53 pm #8268Well yes keep it false.
April 17, 2013 at 2:29 pm #8272It was exciting to see and hear it working for the 1st time.
Hecticc, how does that script apply to a slider? Right now I’m hardset on KeyG. 1/Prog.1
Is there some kind of way to make it look your script msg. code?
I was thinking…. and I’ve done this before with a lot of time put into it.. I’d like to make a script that will fetch a program or keyg. dump.. well any dump it can use and update all the sliders to the selected prog./keyg. every time you switch over to a different one.
Making a panel that could emulate the sample edit functions might prove difficult, I imagine. It’d be nice if I could at least reverse the sample.. I’m guessing wave edits is a bit out of scope for Ctrlr?
I’d be happy if I could numerically loop/end/start/loop point, Reverse, attenuate volume.. just about everything that could be edited from the S2k’s tiny LCD.
I’ll have to sniff out those commands too, if they are even there in the 1st place.
Exciting stuff.. head is already turning on how to do the GUI.
-Blaine
April 17, 2013 at 2:45 pm #8273There is a wave viewer component that you can load sample data to, it will display the waveform. I didn’t add editing capabilities, it’s not beyond the scope of Ctrlr, it’s just not a priority.
Remember you can always use the custom component with LUA a draw your own waveforms and add stuff like loop markers and allow the user to change them, it can be done with Lua, you can always check out the rendering demo in the Panels section to check out some of the stuff that Lua can do in Ctrlr, and believe me you can do a lot more.
April 17, 2013 at 3:06 pm #8275You have to attach the script to a modulator; also note that the decision-making values should be fetched from other modulators that set the number of the program/keygroup you want to target.
The script is not complete for selecting the correct keygroup and programs like it is now because the part number is also a ms/ms splits, the numbers of the selection will have to be re-calculated by Ctrlr.
Also imo it will be “easier” to do this all in inside Lua instead of messing with the sysex formula of all modulators, from what i can tell there’s 4 variables, 3 of which are ms/ls splits.
Can you provide some strings where different parts and keygroups are selected/edited? If i know those i can try and cook something up.
April 17, 2013 at 3:31 pm #8276a sample wave and loop editor panel would be awesome
hectic, I’ll get a good look at those strings tonight and post them in here
April 17, 2013 at 3:51 pm #8277For those less used parameters that define regions or voice you could use global variables in the formula, that’s what they’re for.
April 18, 2013 at 8:04 am #8293Hecticcc,
Here’s what I got when I did filter changes in Program 1, Program 2 and Keygroups in various numbers.
Program 1
KeyG. 1 Filter value 96
065C57C0 1 2 F0 Buffer: 15 Bytes System Exclusive
SYSX: F0 47 00 2A 48 00 00 00 07 00 01 00 00 06 F7KeyG. 2 Filter value 97
065E4CE7 1 2 F0 Buffer: 15 Bytes System Exclusive
SYSX: F0 47 00 2A 48 00 00 01 07 00 01 00 01 06 F7KeyG. 3 Filter value 98
065F16EF 1 2 F0 Buffer: 15 Bytes System Exclusive
SYSX: F0 47 00 2A 48 00 00 02 07 00 01 00 02 06 F7Keygroup 36 Filter value 99
065FD4B9 1 2 F0 Buffer: 15 Bytes System Exclusive
SYSX: F0 47 00 2A 48 00 00 23 07 00 01 00 03 06 F7Program 2
KeyG. 1 Filter Val. 91
SYSX: F0 47 00 2A 48 01 00 00 07 00 01 00 0B 05 F7KeyG. 2 Filter Value 92
SYSX: F0 47 00 2A 48 01 00 01 07 00 01 00 0C 05 F7KeyG. 27 Filter Value 93
SYSX: F0 47 00 2A 48 01 00 1A 07 00 01 00 0D 05 F7Here’s a snippet from the info on sysex from here-
http://lakai.sourceforge.net/docs/s2800_sysex.html“Receive Keygroup Header bytes
0xF0 MIDI System Exclusive identifier
0x47 Akai Manufacturer code
cc MIDI Exclusive channel
0x2A Operation code
0x48 S1000 Model identity
pp,PP Program number
kk Keygroup (0x7f indicates all keygroups in program)
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”with that info above, you can follow the bytes.
It looks like it is mixed in areas that are nibblized/4bits and lsb is first, msb 2nd.
I think Program # is nibbled, as is “byte offset into header” , “Number of bytes”, and finally the Value bytes themeselves at the end.
Other bytes, like Keygroup # are normal bytes.When you go down to “Accessing Keygroup Header bytes”
you will find the “Offset” byte values that correspond to the parameter/edit
Like Filter Cutoff Freq. is,
“FILFRQ” and it’s Offset # is 7 bytes.By changing that 7 to a “C” (Offset of 12), I was able to dial in the Prog.1/KG1 Env. 1 Attack Value and it immediately began to work.
Look at that page really close.. I think I see ways to access the hard/ZIP drives for directories/volumes.
Atom- I need to learn on how to use Global variables.. I’ve heard them being used many times before.. How I got this far w/out using them yet is beyond me, but I never could catch on how to set them up and use them.
April 18, 2013 at 11:26 am #8296Well the keygroup value looks like a good candidate for this, change your formula to:
F0 47 00 2A 48 00 00 k0 07 00 01 00 ls ms F7
add another slider to the panel, give it a range that equals the amount of key groups on the sampler, change it’s property named “Modulator attached to global varaible” to “0”, this slider will now change the keygroup for all controls with that formula. There are 16 global variables you can use k0-kf
April 19, 2013 at 6:30 pm #8334Thanks atom that information looks very helpful.
I got to messin around with the Akai last night a little more and have begun to start figuring out more SysEx coding.
I managed to get it to send dumps for key groups and for programs.
I also think I found a dump message for the raw sample itselfApril 21, 2013 at 9:28 pm #8379OK.. making a little headway.
I just tried to make a trigger pad. How do I make a uiButton act like a key on a keyboard? So it’s like a momentary switch.
This could be real helpful for making a Phrase Sampler out of the S2k and make the GUI have an MPC appearance.
April 23, 2013 at 12:27 am #8400This can be done, i’ll provide an example tomorrow.
April 23, 2013 at 2:38 am #8402Thanks Atom.. I was going nuts trying to get the uiButton to work like that and it always acted like a latching switch everytime…
April 23, 2013 at 7:53 pm #8420It looks like i spoke to soon. I had to make a small change to allow the buttons to get triggered on mouse down events, i added this and i’ll post a nightly build today,
April 23, 2013 at 8:31 pm #8424can you make it so that a right click will cause it to latch and a left click will be a momentary switch like a keyboard ?
and right clicking again while it is latched will cause it to unlatch -
AuthorPosts
- The forum ‘Using Ctrlr’ is closed to new topics and replies.