Midi Designer Pro - Control VG/GR Gear with Ipad.

Started by erikbojerik, October 20, 2012, 07:47:51 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

admin

#25
https://mididesigner.com/qa/5783/gp10-checksum-for-a-roland-4-byte-id-device?show=5783#q5783
GP10, checksum for a Roland 4 Byte ID device?

+
+1
vote
MIDI Target Manufacturer(s): Roland
Hi all,

I'm having an issue to control the GP-10 (ID: 00 00 00 05) via Mididesigner sysex messages.

How do I set the "checksum" value in MD menu "Sysex Properties" correctly for the GP-10?

I can select the following; but these are not working:

None, Roland, AXE FX II, Roland Two bytes Model ID, Roland Three-byte Model ID

For reference:

GP-10 midi implementation: https://static.roland.com/assets/media/pdf/GP-10_MIDI_Imple_e02_W.pdf

Anyone using the GP-10 with midi designer? (via Midx-20, Primova sound)

  asked Mar 18 in How does MIDI Designer work with X? by fingerstyler (130 points)
flag  answer  comment
Show 7 previous comments
Which MD Layout reads back all values as an example? - just to have a firest direction to look at?
Thank you!
  commented Mar 22 by stefan-brixel flag  reply
There are several, I think, but one that does it in a crazy way -- because the reface DX requires it -- is the reface DX layout by Helfried. It basically has to send a different request per parameter than the parameter itself. The synth then sends back the requested param. It's crazy. But it really depends on your synth. Many synths will only send back a giant sysex. Those we don't handle.
  commented Mar 23 by MIDI Designer Team flag  reply
Hi,
I just verified with the hardware connected and it works. I can send a parameter change via sysex to the Roland GP-10:-) Great!!

Now, with the preset you provided (reface DX..) I still do not understand the "get" sysex implementation.
Which sysex Bytes should I put to receive the value of the corresponding "set" Parameter:

1.) Sysex to set the parameter: 41 10 00 00 00 05 12 10 00 00 07 V
41H Manufacturer ID (Roland)
10H Device ID (GP-10)
00H Model ID # 2 (GP-10)
00H Model ID # 3 (GP-10)
05H Model ID # 4 (GP-10)
12H Command ID (Data Set)
10H Address MSB
00H Address
00H Address
07H Address LSB
V

2.) "get" request: This is my first guess, but does not work: 41 10 00 00 00 05 11 10 00 00 07 (what are the "size" Bytes used for and how should those be set?)
41H Manufacturer ID (Roland)
10H Device ID (GP-10)
00H Model ID # 2 (GP-10)
00H Model ID # 3 (GP-10)
05H Model ID # 4 (GP-10)
11H Command ID (Data Request)
10H Address MSB
00H Address
00H Address
07H Address LSB
ssH Size MSB
ttH Size
uuH Size
vvH Size LSB

3.) How can I make "set" parameter to listen and update?

Thanks again for your support!
  commented Mar 26 by fingerstyler
edited Mar 26 by fingerstyler flag  reply
I found the answer - I just entered "00 00 00 01" for the size Bytes and it worked - I received the devices state and the set Parameter updated.

so:
1.) Sysex to set the parameter: 41 10 00 00 00 05 12 10 00 00 07 V
2.) "get" request: 41 10 00 00 00 05 11 10 00 00 07 00 00 00 01
3.) set parameter did the update.

case closed.


https://mididesigner.com/qa/762/model-id-bytes-length


CodeSmart

Example: GP-10 Select GK Set 1
[F0h 41h 10h 00h 00h 00h 05h 12h] [ 10h 00h 00h 07h 01h ] [68h] [F7h]

To calculate, feed the green bytes to CalcChecksum() and it will return 68h.

// Calculate Roland style checksum
BYTE CalcChecksum(BYTE* pBuf, WORD bytes)
{
   WORD w;
   BYTE  chksum = 0;
   for (w=0; w<bytes; w++)
   {
      chksum += pBuf[w];
      if (chksum>128)
         chksum = chksum-128;
   }
  if (chksum>0)
      chksum = 128-chksum;
   chksum &= 0x7F; // Just in case
  return chksum;
}
But I got more gear than I need...and I like it!

bosetuno

Has anybody tried to do an vg8 editor?

I can handle with CC midi parameters, but to get into sysex programing is quite intimidating

admin

#29
Quote from: bosetuno on June 20, 2018, 01:30:33 PM
Has anybody tried to do an vg8 editor?

I can handle with CC midi parameters, but to get into sysex programing is quite intimidating

yes - the old Emagic SoundDiver had limited support for the VG-8

but there were many claims of bugs ( errant NRPN messages  which could  "brick" the VG-8) - and Roland no longer repairs VG-8/VG-8EX units 

Apple purchased Emagic back 2005 , and killed sounddiver

more details
https://www.vguitarforums.com/smf/index.php?topic=4632.0

bosetuno

Thanks.

I will check the link.

So, If i get it right, to make a template editor in Midi Designer Pro, it is needed to "import" all the sysex commands that is on the Operation Manual. And then use that code to arrange different midi templates depending on your needs. Am I right? What I like about MDP is that it can act as a bridge between midi devices, and I could use that to make some midi control I would like to but it is not possible with the limited control asignmet in the unit.

Kind regards

admin

Quote from: bosetuno on June 20, 2018, 03:19:59 PM
Thanks.

I will check the link.

So, If i get it right, to make a template editor in Midi Designer Pro, it is needed to "import" all the sysex commands that is on the Operation Manual. And then use that code to arrange different midi templates depending on your needs. Am I right? What I like about MDP is that it can act as a bridge between midi devices, and I could use that to make some midi control I would like to but it is not possible with the limited control asignmet in the unit.

Kind regards

there is a huge hurdle

The VG-8 / VG-8EX does NOT have a lot of user assignable MIDI CC Control assignments.

Instead, early developers employed NRPN ( non registered parameter number) commands
https://en.wikipedia.org/wiki/NRPN
 
and SYSEX 


start at page 121
https://static.roland.com/assets/media/pdf/VG-8EX_OM.pdf
   

bosetuno


bosetuno

Hi! I know I asked about it a while ago in this very same thread, but I wonder if what I am trying to do is posible with any of the VG units via MidiDesigner of something similar. In my opinion one of the coolest features in VG line is the harmonic polyphonic pitch shifter, but is a real pity you cannot change the key of the harmonizing pitchshifter via an external command. In the early digitech units you could hook a keyboard and play the notes of the chord to define the key it was set to. A pretty cool feature in my opinion and one that I have used extensively. But those units are not polyphonic, so I really prefer the VG capabilities, and I actually prefer how it sounds over the "classic" whammy. Checking the VG8 manual and its extensive midi implemention chart (bravo roland) It should be posible, but only using sysex and NRPN data, way too complicated for me, and as Admin comment in a previous comment quite risky. So I wonder if any of the others VG units could do it. I dont think this is something you can do via the assign function. For sure you can program a way to change between two keys using this method, or even using a continous controller to scroll through the keys. But I need a way to tell the VG go to the Key of G, now to Eb, etc. The VG88 and VG99 manual dont have a Midi implementation chart as detailed as the one on the VG8 manual, so I dont really know if any of those units can be controlled that way.

By the way, in the VG8 if I go to the Key parameter I can change it using the S1/S2 buttons, the downside is tan I have to navigate the menú to that parameter and I cannot make a direct selection.

I dont know if somebody has ever tried to do something similar, but any idea is really wellcome.

Kind regards

admin

#34


Many Boss MFX processors feature  intelligent "harmonizer" with support for the key to be the target of a user MIDI CC# Control assignment

Roland VG-99
Boss GT-001
Boss GT-100
Boss Katana
Boss MS-3

Review the manuals and run Boss Tone Studio in OFFLINE mode to check all possible FX targets

bosetuno

Thanks, but I refer to the intelligent pitch shifter inside the vguitar module, not the pitch shifter Fx (which can only do one string harmonizing)

bosetuno

Mmmmm, I think that assigning the key parameter to one midi CC and using a Midi converter (a max/msp patch, for example) that convers midi notes to particular CC values it may be possible to do it

admin

#37
https://www.thegearpage.net/board/index.php?posts/27425597/

I've been playing with Midi Designer app to create a midi controller for my iPhone and it's turning out pretty cool and works great. Still working on creating the layout for the Looper page. But once it's configured and the app is launched, you just plug the HXS in with a CCK and it immediately just works (which is nice for a change) lol.

https://www.vguitarforums.com/smf/index.php?topic=7156.msg49910#msg49910
https://www.thegearpage.net/board/index.php?posts/27426306/
Probably just as expected, but here's a quick vid showing how the Midi Designer app works to control the HXS.


admin

https://cdm.link/newswires/midi-designer-pro-2-adds-its-own-inbuilt-programming-language-with-stream-byter-ii/

APPS IOSMIDI Designer Pro 2 adds its own inbuilt programming language with Stream Byter II
Ashley Elsdon - March 5, 2018 0 Comments
MIDI Designer Pro has been a go to app for many users who want or need to create bespoke interfaces for almost any MIDI purpose. It's an app that continually gets improved on, so in some ways this update wasn't a surprise. On the other hand, it's a step forward that's so big that I almost can't believe it. Whilst it's a big update, it's probably going to be of most benefit to those users who are at the most advanced end of the spectrum. So what is it?

MIDI Designer Pro version 2.96 is now embedding the Stream Byter Plugin by Audeonic. This Plugin provides MIDI manipulation in two places: before MIDI Designer processes the MIDI, and before the MIDI produced by MIDI Designer gets sent to a Wi-Fi, Bluetooth, Virtual or Hardware target via CoreMIDI.

Stream Byter itself was initially released in May '13 as a way to extend Audeonic's MidiBridge 1.5 'out in the field' for customers and has been continuously improved since then. The Stream Byter in Midi Designer is the 'Stream Byter II' version that exists in Audeonic's MidiFire app (iOS/macOS).

What does Stream Byter do? It allows you to make custom MIDI processing modules that you design yourself using a concise programming language made up of rules. There are simple rules for matching and transforming MIDI events and more complex rules for writing modules that behave conditionally, set/examine variables, perform math/timing operations, and of course, generate MIDI messages themselves.

For example here is a very simple case: you are playing a keyboard and you decide that you want to turn a single knob ("reverb," for instance). The higher (to the right) you go on the keyboard, the louder the reverb gets.

That's a single line match/transform Stream Byter Input rule:

9X = BX 5B X2

The above rule can be summarized as follows: For every note event received, set the value of the 'reverb' controller number (on same channel as note) to the MIDI note number of the note.

Rules can be joined. Imagine you want to toggle the value of another knob from top to bottom every time you hit an A3 on the keyboard, but you don't want the message to go out for 10 seconds? That's another rule. Generally rules do one or more of these things, and often combine them:

decompose and recompose longer MIDI messages
filter MIDI messages
transform MIDI messages
produce more MIDI messages
The first case, decompose MIDI messages, will be useful for parsing incoming sysex dumps for hardware synths that produce parseable sysex dumps for patches.

Writing Stream Byter rules does require knowledge of the MIDI protocol and how to construct rules correctly. There is an introductory tutorial on the Audeonic site and the full Stream Byter manual is available there too. There is also a dedicated section to the Stream Byter on the Audeonic forum. Midi Designer customers are welcome to post questions or requirements there where the developer and other Stream Byter users will help out.

Stream Byter input and output rules are saved and shared with your layout. Any MIDI Designer Pro 2 user may open a layout with rules someone else has authored free of charge. There's an in-app purchase to author or edit Stream Byter rules. This IAP will be available upon release of MIDI Designer Pro 2.96. It will be priced at $1.99 for the first three months, and then return to its normal price of $8.99.

In addition to the Stream Byter Plugin, Version 2.96 provides Slow Reset to Default. When a supercontrol button is set to "Reset to Default," it can now also snap the subcontrol to its value over time. This gives you a slow reset and a precursor of what's to come with presets.


https://apps.apple.com/us/app/midi-designer-pro-2/id492291712

https://audeonic.com/mb_sbyter.shtml
The 'Stream Byter' module is a powerful tool for transforming MIDI events passing through a port. By entering transformation rules in a text based script style language, it is possible to rewrite, clone or block any incoming message. The Stream Byter allows you to do such things as:
Split your keyboard into as many zones as you like
Create overlapping keyboard splits
Finer detail event blocking (eg. block just active sense)
Convert note presses to program changes
Split controllers over channels
Control many controllers with just one controller
... and loads more
With power, unfortunately, comes complexity and to program the Stream Byter requires familiarity with the MIDI protocol at a byte level. This guide will attempt to explain in detail how rules are constructed and also provide some recipes for some of these 'interesting' transformations.

If you are not ready to write your own rules, then fear not, as we can write rules for you which can be copied from an email and pasted into the Stream Byter. If there is something you are trying to do, why not post your requirements to our soapbox forum and we or other MidiBridge users will try and construct suitable rules for you to configure your copy of MidiBridge with.

Let's begin. Here is the Stream Byter configuration page:


An editable text area is where you paste/edit your rules for events passing through the port on which it is configured. You get to this page by touching the 'beaker' button on the port where you want the transformations to occur.

To help you remember what the rules do, it is possible to comment the rulesets. You simply add a '#' symbol before any commentary. You can comment on a new line or after a rule:


# this comment is on its own
C0 = C1 # map program changes
Rules will be detailed in a moment, but when you want to install or test your rules, you press the 'Install Rules' button. If any of your rules are not valid, then you will see something like:


You'll notice the rule in error has been commented out and prefixed with 'ERR'. To fix a rule, correct it and press 'Install Rules' again. If a rule was marked with '#ERR' and you correct it, there is no need to remove the '#ERR' part yourself, as the rule checker knows this is a correction and will remove the '#ERR' for you before checking the rule again.

If all your rules are valid, then the edit area text will appear in blue and the rules are now active. Do remember to save your rules into a preset so that you can recall your ruleset on other ports too.

That is how you enter rules, now lets look at how to create them.

Rules must be of the format:


<input message match clause> = <output message clause> [flags]
On the left of the equal sign is where you specify what to look for on an incoming message in order to apply the transformation to the message as specified in the output clause. Essentially, if an incoming message matches the input clause, then the output clause is applied to it.

The Stream Byter evaluates each rule in order from top to bottom and the current message (which could have been modified by a prior rule) is used to match against the input clause. Here is a simple (but fairly silly) example which maps all events coming in on channel 1 to channel 3 having mapped to channel 2 in the process:


# map all events on channel 1 to channel 3
X0 = X1 # map channel 1 to channel 2
X1 = X2 # map channel 2 to channel 3

# of course the above is the same as X0 = X2
The exception to this evaluation order is when rules have optional flags set, but we will look at that later.

The input clause is made up of 1, 2 or 3 hex bytes that correspond to a MIDI message. The more bytes in the clause, the more finer the matching. Here are some single byte input clauses (these are not valid rules as they do not have and equal sign or output clause!)


# one byte input clause examples
B0   # matches all controller events on channel 1
FE   # matches active sense messages
BX   # matches all controller events on any channel (X = wildcard)
N0   # matches all note on/off events on channel 1 (N = note on/off)
8-9X # matches all note on/off events on all channels (8-9 is range, same as N)
B-C0 # matches all controller AND program change messages on channel 1
B0-3 # matches all controller events on channels 1,2,3 and 4
XX   # matches all events on all channels
The above examples have introduced wildcards and ranges which can be used to fine tune the event matching:

An 'X' denotes any value
An 'N' denotes note on and note off events
You can specify a range using the minus sign surrounded by the low and high values, eg 4-6 means values 4 through 6 inclusive.
The second byte in the input clause relates to the second byte of the MIDI message. It can be a fixed value, wildcard or range. Here are some examples:


# two byte input clause examples
C0 00 # program change zero on channel 1
C1 XX # all program changes on channel 2 (same as just C1)
N0 00-40 # note events on channel 1 from note number 0 to 64
Finally, adding a third byte to the input clause (fixed, wildcard or range) increases the matching granularity. Some examples:


# three byte input clause examples
B0 07 00       # controller 7, channel 1, value 0
90 00-40 41-7F # notes on on channel 1, note number 0-64, velocity 65 to 127
The output clause is what determines what happens when an event is matched by the input clause. Here you specify what values will be written into the message. The output clause can be 1,2 or 3 bytes and the 'X' wildcard character is used to denote that the original value is to be preserved. Here are examples of 1,2 and 3 byte output clauses:


B0       # change event to a controller message on channel 1
BX       # change event to a controller message, leaving channel alone
X0 40    # force all matching events on channel 1 to middle C
90 XX 7F # maximise the velocity on all notes on on channel 1
Finally, flags can be specified at the end of each rule. The available flags are:

+C - clone the message before rewriting. This creates a new copy of the message and applies the output clause to it and schedules it for routing after the original event. The original event is left untouched. Note that the cloned message is passed through all the modules that the original message passes through. In order to prevent infinite loops, the Stream Byter will skip any rule that has the +C flag set when processing a cloned message.
+B - block the message. The message is immediately blocked and the message is not routed nor passed through any further Stream Byter rules or other modules.
Let's put all of the above together and create some real-world example rules that will hopefully put things into prespective:

Remap all events on channel 1 to channel 2


X0 = X1 # remap channel 1 to 2
Duplicate all events on channel 1 to channel 2


X0 = X1 +C # duplicate channel 1 to 2
Block all active sense messages:


FE = XX +B # block active sense
Split the keyboard on channel 1 into 4 zones going to channels 1-4


N0 20-40 = X1
N0 41-60 = X2
N0 61-7F = X3
Overlapping split, 2 octaves around middle C to channels 1 & 2


N0 30-47 = X1 +C
N0 48-7F = X1
Mirror channel volume changes on channel 1 to channels 2,3 and 4


B0 07 = B1 +C
B0 07 = B2 +C
B0 07 = B3 +C
Hopefully, this will get you going with the Stream Byter module.

We have produced a short video showing how to setup an overlapping keyboard split and controlling the volumes of channels separately and conjoined on our youtube channel

If you are having any issues with the Stream Byter, do please contact us or use our soapbox forum.




admin

https://mididesigner.com/qa//7955/layout-mdp2-masters-course-tips-and-techniques

LAYOUT: MDP2 Masters Course - Tips and Techniques

+6
votes
I have used MidiDesigner Pro 2 to manage all controls on the RD-2000.  This has required using many MDP2 techniques.  While these techniques can be pulled out from the layouts, I have extracted them here, along with explanations and tips.

You do not need an RD-2000 for this layout.  The intent is to demonstrate the techniques somewhat board agnostic.  In some tabs, I have simulators for the board response.  In the more complicated, I just show how to use the technique.

If this proves useful, I will continue to add techniques and examples.

Some on-deck concepts for future updates:

Display approaches
Methods for two controls to impact one message
Preset pre-loader
Stacked presets
Alternate solution for sequential subcontrols (avoiding sending the passed min/max values)
Pedalboards for remapping relationships
I welcome feedback and suggestions.

Downloads
Masters Course Rev 1.01 - Adds topics on Hiding the Scaling Problem and Settings Scanner
Downloads: 75

Demo 1.22 - seven additional examples not yet in Masters Course - Getting further behind. Here are an additional two samples I still need to work into the Masters Course. (seven total) When I get an interesting question, I add to the layout, so keep the challenges coming.
Downloads: 7

Masters Course Spreadsheets 1.01.zip - Adds 16384 zeros and seven byte math
Downloads: 50

Masters Course Rev 1.00 - Initial release of the demo layout
Downloads: 38

Masters Course Spreadsheets.zip - Spreadsheet referenced in both Numbers and .xlsx formats
Downloads: 33