I’m working on the data structure for the FCB1010/PU-2. I’m wondering if there should be a set number of presets per switch or pedal.
One way to implement the presets is to define a number, say 10, and decide that this is the maximum number of “effects” for a particular switch in a “bank”.
Another way is to develop a flexible data structure that allows the user to keep adding patches to any switch.
Let’s look at the first way in detail:
- Simple programming
- Simple data transfer – known dimension of data arrays
- “wasted” data space for unused command slots
- Limited number of effects per switch
The flexible data structure:
- No defined limits implies no waste
- much harder to code
What sould an entry contain?
I’m trying to identify as many different types of actions possible from one particular switch or pedal. So far, I identified:
- Midi Note
- Note On
- Note Off
- Midi Controller Change
- Stompbox mode
- Standard mode
- Momentary mode
- Midi Program Change
- Midi SysEx commands
- DMX/VCS commands
- Implementation of the DMX/VCS protocols
- OSC commands
- For communication with computers and other devices
- Expression Pedals generally send CC commands. Can also send Note commands. Expression pedals should be able to control more than one effect at any time.
For each one of the basic commands, more than one option should be available:
1. Midi Note
Sending a Midi Note command is straightforward. Some controllers don’t send Note Off. Instead, a Note On with a velocity of zero is sent. Also, it is good practice to send midi commands type only once, i.e. if a series of Note On commands are sent, the first one will be a full command, with the subsequent notes sent as values only.
2. Midi Controller Change, or Continuous Controller: CC Commands
CC commands form the real traffic coming out of a Midi controller. CCs are used for everything, from changing instruments to controlling effects. In fact, many CC commands don’t have pre-defined meanings and are left to manufacturers and/or programmers to arrange. In standard mode, a CC command is sent when a switch is pressed. Actually, many CC commands can be sent when a switch is pressed. Each time a particular switch is pressed, the CC commands are resent. In stompbox mode, a command (or series of commands) is sent when the switch is pressed. The next time the user presses the same switch, the command(s) sent are interpreted as a cancellation signal for whatever had been activated on the previous press. In momentary mode, the press of a switch sends a command(s) interpreted as ON, and releasing the switch sends an OFF signal or equivalent.
3. Program change
Straightforward. A switch press sends one or more program changes (called “patch” or “preset” in some software).
4. Midi System Exclusive: SysEx commands
Midi SysEx commands are sent and received to exchange information that cannot be conveyed by other Midi commands. They all have a specific “header” and all end with the hexadecimal value F7. But between the header and the end of the command, the SysEx can contain any number of any hexadecimal value (well, any value smaller than 0x80). Every manufacturer uses SysEx. I was able to exchange SysEx information with a few devices around here. There is no “standard” way to process SysEx.
The PU-2 will not use System Exclusive commands to exchange configuration information. Since most of the configuration is done on a computer (Mac/Linux/PC), the USB connection allows simpler data exchange. I might leave SysEx routine in the firmware for compatibility purposes.
5. DMX and VCS commands
DMX (Digital Multiplex) and Midi VC (Visual Control) will be integrated in the next major firmware release.
6. Open Sound Control: OSC communications
From the osc.org website: “Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology. Bringing the benefits of modern networking technology to the world of electronic musical instruments, OSC’s advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation.”
It is my intention to integrate the OSC protocol in the next firmware version.
7. Expression Pedals
Expression pedals are an integral part of many instruments and control equipment like pedal boards (like the PU-1 and the PU-2!).
But… how many presets?
The first firmware persion (V1.x) will process items 1,2,3,4 and 7. Basically sending and receiving any Midi command. How about any midi commands? My intention is to allow the user to store ANY number of presets in the PU-2, or actually, up to filling the entire memory of the micro-controller. That’s a lot of commands! With the micro-controller that I’m using for the prototype, I could store 33,000 commands. If this is not enough, I can also add more memory by using inexpensive EEPROM modules.