Customized firmware available (for experimenters)

Official support for: rogerlinndesign.com
RELATED
PRODUCTS

Post

I recently picked up a used Linnstrument 128. I'm a keys player, and this looked like it would be a fun MIDI controller that could add some variety to my playing style. So far, I'm really enjoying it!

As a software developer who's played around with Arduino in the past, I was pleased to discover that the Linnstrument firmware is open source. The source code is well organized and approachable, so I started playing around with making some modifications that I thought might be helpful. For me, these changes have improved my ability to play the instrument with some synths, and maybe others would find these changes useful, too.

Here's a quick overview of my changes:
  • Improve how Loudness/Z expression (pressure) interacts with note attack and release
  • Improve playability for beginners, by making the instrument more forgiving for Timbre/Y and Loudness/Z
  • Improve visual feedback of Y and Z using the played-note animations
You can download the release here (source code and compiled binary): https://github.com/nathankopp/linnstrum ... e/releases
Detailed description of changes: https://github.com/nathankopp/linnstrum ... mware/wiki

I invite others in the community (who appreciate experimentation) to give it a try to see if maybe these changes would be useful for other Linnstrument players. TRY AT YOUR OWN RISK. Be aware that installing this firmware, even if you follow the proper instructions, might erase your settings and/or sequencer projects! If, after upgrading, you see horizontal lines on your Linnstrument, that means that settings have been erased and you'll need to follow the calibration instructions found on this page. (I've had this happen to me multiple times while uploading custom firmware to the Linnstrument.)

To update the firmware, you need to get the official installer here: http://www.rogerlinndesign.com/ls-updat ... tware.html

Then, backup the the original "*.bin" file that comes with the installer, and replace it with the custom file you find at GitHub above. The firmware upgrade software will automatically find the only "*.bin" file in the folder, and will use that for the upgrade.

Post

Interesting project! Thanks for sharing...

Though some of the enhancements I would rather put into the destination synth engines than into the controller.
For example you mention the z-axis for sharp attacks like trumpet sounds. Most synths have simply very bad envelopes for expressive instruments. ADSR is almost useless - but if we had an APDSR (Attack Peak Decay Sustain Release). This problem would be solved. Or even better a more universal MSEG with a level parameter for any segment like in a DX7 or CZ101. Strangely enough synth designers (or their marketing department) are way too conservative, though better envelopes exist since almost 40 years...
Even equator has no peak parameter for the first segment of its envelopes! (I have to talk @himalaya...)
The solution for me now is to go into a modular environment like the Grid and put an AR envelope parallel to the aftertouch sustain, and if want another envelope in parallel for the release...

Post

Nathan, this is impressive work. I have only read your detailed description, not tried it yet, but I will.
I too have felt, that there was something of a clash between the expressive use of pressure and playing fast with short attacks. As it is, one can’t really have both fully, but your work makes me believe that much improvement is possible, and therefore even more musical expression.
Will report, when I have tested it.

Post

Tj Shredder wrote: Thu Jan 02, 2020 6:41 am Interesting project! Thanks for sharing...

Though some of the enhancements I would rather put into the destination synth engines than into the controller.
For example you mention the z-axis for sharp attacks like trumpet sounds. Most synths have simply very bad envelopes for expressive instruments. ADSR is almost useless - but if we had an APDSR (Attack Peak Decay Sustain Release). This problem would be solved. Or even better a more universal MSEG with a level parameter for any segment like in a DX7 or CZ101. Strangely enough synth designers (or their marketing department) are way too conservative, though better envelopes exist since almost 40 years...
Even equator has no peak parameter for the first segment of its envelopes! (I have to talk @himalaya...)
The solution for me now is to go into a modular environment like the Grid and put an AR envelope parallel to the aftertouch sustain, and if want another envelope in parallel for the release...
I totally agree about adding "peak" to an ADSR envelope. I'd love to be able to map velocity to a "peak" value.

I also agree that some of the other features (such as the cubic response curve that gives a sweet-spot to neutral pressures) would probably fit well in the MIDI mapping of the software instrument (or host application) instead of within the Linnstrument itself. However, by adding these options to the Linnstrument itself, I've gained these features for all software instruments that I play, whether it be Surge running within Reaper, or maybe Moog Model 15 or ThumbJam on iOS.

-Nathan

Post

Hi Nathan,

I finally got around to testing this alternative firmware. It does wonders for playing fast, but when I play a soft note, for fading it in slowly, I get a small pop at the note-on. Like a tiny short envelope giving a little tic. And this ruins it for an ambient slow playing. If you can erradicate this little pop on slow/soft playing, I will be happy to test again.

Post

Lars, thanks for the feedback. I experienced the same issue in my own playing, andI have been making various tweaks. I finally have released a new version. Change #3 described below should help with notes that fade in from near-zero volume when playing ambient music.

Changes in this release:
  1. If the pressure center point is not zero, use a piecewise linear function (two segments) instead of just a straight line from min to max. This helps with synths that don't have logarithmic volume knobs/modulations.
  2. When the "sweet spot" mode (cubic curve) is enabled, only use use the at the start of the note. Over the first 900ms of the note, the sweet spot fades away, so that there it is basically gone at the end of 900ms. This is done by interpolating from fully cubic (full sweet-spot) at the start, to a blend of 90% linear and 10% cubic at the 900ms mark. The goal is to keep consistent volume for short notes, but allow greater expressiveness for extended notes. I'm still experimenting with this concept. The 900ms time for the sweet spot "fading away" is somewhat arbitrary, and the 90/10 split is also just a first guess.
  3. When the initial pressure (max pressure seen during first 50ms after note-on) is in the lower 20% of the possible range, then use linear for the bottom half of the curve. This improves expressiveness for notes that crescendo starting at zero or near-zero volume.
  4. Change the character from "N" (for neutral) back to "C" (for center), because N (neutral) and H (high) look too similar in the Linnstrument's low-res font.
  5. Always send timbre and loudness upon new note, even if the new value is the same as the most recent value sent for the channel.
The last one is required for some synths in some circumstances, such as when AT (aftertouch/channel pressure) is used to modulate the amp in Arturia Pigments. (Pigments seems to reset the channel's AT to zero upon when a new note starts, and so if the new value is not sent, the volume will be very low until a non-matching value is sent.) With the standard Linnstrument firmware, this usually isn't an issue, because the Linnstrument also sets the AT back to zero upon note release. Thus, any non-zero values will be considered 'different'. However, other changes in this fork (such as the sweet-spot curve, as well as not resetting loudness to zero for a fast note release) cause situations where the new loudness value will exactly match the old loudness value. Thus, it is necessary to force send the loudness value. I've chosen to send both immediately before and immediately after the note-on message, to hopefully give the greatest cross-compatibility with various synths and virtual instruments.

https://github.com/nathankopp/linnstrum ... /2.2.2-K03

Post

Lars, if you still experience the short "tick" at the beginning of notes, please send me more details about what synth you are using, or if you can record the MIDI file and attach it, I can take a look to see if there's a bug I need to fix.

Post

I just uploaded another release, version 04. This one introduces a new velocity calculation. To me, the new calculation "feels" improved when playing pianos and other similar instruments. I'm curious what others think of this new change.

https://github.com/nathankopp/linnstrum ... /2.2.2-K04

Post

Hi Nathan,

I still have the tick with the new version.
I have analyzed my situation, and the probem is actually very clear:
If I fade out a note by lifting my finger slowly, the aftertouch value is allowed to drop down, and there will be no tick for the next note. If I release in a normal (faster) way, the aftertouch value does not drop before the note off, and if I then play a very soft note, the first thing I hear, is the tick from the aftertouch (which controls the filter) jumping down from the previous value to the near-zero value of the soft note.

Post

Lars,

Thanks for the detailed explanation. I just uploaded version 5 with a change. Hopefully this will solve the issue for you:
https://github.com/nathankopp/linnstrum ... /2.2.2-K05

Unfortunately, installing this version will reset your Linnstrument to factory settings, since I haven't yet figured out how to write a settings-upgrade function, and this new version changes the size of the settings data structure, so the old settings are not directly compatible with the new firmware. :-(

Post

No, unfortunately the aftertouch value still hangs at a high value with a "normal" note release. So exactly the same os before.

Oddly though: You said this would reset my settings, but on the contrary, this is the first of the updates where my settings were reset. And on the previous versions, I also had to do the calibration process, but not this one.

Post

But I am thinking (without knowing anything about the difficulties of programming):
I suppose that you want to avoid the aftertouch value to drop between notes, for normal legato playing, which makes perfect sense. And off course, this collides with my need for having the AT value start at zero for making a slow smooth fade in.
But how about saying: N milliseconds after a note off, the AT value should always drop to zero. (Perhaps around 100ms? Would ultimately be nice if this could be set by user.)

Post

Playing legato in MPE at least would have a new Midi channel anyway for each note. Its safe to set it to zero anyway. I am not sure if a synth would still listen to aftertouch after a note-off though. In a way the note-off can only be triggered by zero aftertouch within the LinnStrument. That means, first send aftertouch 0, then note-off...!

Post

I wonder if something went wrong with the upgrade (or maybe I uploaded an incorrect bin file). If you go to the per-split settings page and then touch the third row from the bottom (6th from the top) in the Loudness/Z column, does it toggle lit/unlit? The latest firmware should have a toggle on that cell, which enables the "don't send zero" feature. If yours doesn't toggle, then it's an older version.

Post

And, yes, TJ Shredder, when this feature is disabled, the zero AT is sent prior to note-off, just as in the standard Linnstrument firmware. My custom firmware has now has this as an option to disable setting AT to zero before note off, which allows the "release" for a synth's ADSR to actually mean something. There are times when I want to use z-expression for volume (including being able to fade-in from complete silence), but I also want notes to keep ringing when I lift my finger from the instrument, if I was pressing hard on the note just before release. For many synths, when amplitude or volume is mapped to channel pressure, simply not sending a channel pressure of 0 leaves the volume/gain at the last known value, and thus the note will fade out according to the ADSR envelope, instead of being silenced immediately.

However, the concept doesn't work well with all synths, since it doesn't match the normal behavior of channel pressure. Therefore, I've changed this to an optional change in my latest firmware (assuming I built and uploaded the file correctly), and to preserve backwards compatibility for people who want to test out the firmware's other features.

Post Reply

Return to “Roger Linn Design”