Custom Firmware - new features

edited May 2015 in General
I've plugging away with a custom firmware for the past few months, trying to keep all the general functionality as-is, but adding some useful features. I added a few more past couple days, try it out if you're adventurous!

nb: back your SD card up before you load this. It's very much a work in progress, though I haven't seen any major bugs yet. All your files should load but new data written may not work with the old firmware.

Here's a quick rundown of the new options:
- copy single tracks between patterns
- switch patterns on step instead of bar
- mod wheel input controls morph
- change preset with MIDI Bank Change (there is a global option to change kit or 'performance' data type)
- performance and 'all' data types now include morph parameters when saved
- individual drum voices can be loaded from other kits (also via MIDI with Bank Change to their assigned channels)
- patterns can be scaled per track - up to 128 bars
- track step positions can be realigned during play by re-selecting current pattern
- trigless automation locks (no trig, automation only when velocity=0)

Again, I've tried to keep all other functions the same - with the exception that I've changed the MIDI CC assignments. The way they were assigned in .34, nothing could be set to the Mod Wheel. All the MIDI parameter controls are still there, but they are per-channel. This also means no more NRPN's, but if you have a lot of CC assigns in your sequencer, this firmware might not be for you.

The details and download are here:

I'll try and make a video rundown of the features and how I've been using them over the weekend.

If you find any bugs or think of something that would be a useful addition, let me know and I'll work on it!



  • patterns can be scaled per track - up to 128 bars
    What do you mean with this?
  • edited May 2015
    you can change the speed the sequencer runs at for each of the tracks to half, quarter, etc, essentially trading step resolution for pattern length.

    For example, you can have an 8 bar pattern where snare and cym repeat the same bar 8 times, but the drums and hats span the full 8 bars, but you only have access to a resolution of 16th notes (on the sub-steps) for those tracks.

    It's not pretty as it is now - there are some UI things I need to work out, but all the functionality is there.
  • I think I have found a small bug in your firmware (my preferred one):
    OP HIHAT does not respond to incoming Midi. I have all instruments on separate channels with notes set to 'any'. All other instruments (including CL HIHAT) can be played by external Midi. With 0.34 and owl firmwares OP HIHAT responds without problems to external Midi.
  • Thanks! That was indeed a problem. Should be fixed now.
  • Oh that's nice!
  • couple other goodies on there from a productive saturday! --

    - Morph parameter shortcut: when viewing a single voice parameter (click in and edit with encoder), pressing 'shift' shows and edits the parameter for the morph target.

    - One shot LFO's (!) These are accessed as additional LFO waveforms. there is an additional "exponential triangle" waveform too. For the one-shots, "offset" sets a start delay instead of phase. See the readme for more details.

    I just noticed that the 'pattern align' shortcut also mutes the remainder of the current bar - although it does properly align and come back in on the start of the next. This is a somewhat interesting effect, but not intentional. I'll try and get that sorted tomorrow.
  • Good work!

    Any chance you can have a look at the option to switch patterns in voice mode?
  • edited May 2015
    hmm... probably not. any shortcuts I can think of would be more than the 2 button presses it takes to switch to performance mode and change. :)

    I'll probably clean up the glitchyness around the 'pattern align' and then try and actually make some music for a change :)
  • edited May 2015
    Thanks so much for these additional goodies Brendan.  I especially like the per step pattern changing!
  • Hello!
    nice work :-)

    I would like to see if I could learn from your code to include some nce features to my firmware (OWL, etc) :-)
    Would you mind telling me where is the code ? I guess on github but where exactly?
  • Sure! I'm on github - same user name. I haven't updated the working branch (pat-scaling) with everything yet, but will do when I shake some more bugs out today.
  • Best option I van think of is shift + rotary encoder to skip through 8 patterns
  • already used for scrolling though step automation parameters and would still probably take longer than (perf button > pattern button)
  • the 'pattern realign' works as intended now. I also added a shortcut that you can press the voice buttons while holding 'shift' in 'perf' mode to quickly switch the active voice for rotation. This is in addition to the 'multiple voice unmute' shortcut that already exists there. (might remove that unmute shortcut later if there isn't too much objection).
  • edited May 2015
    small update - track scaling is much prettier now. Also, github is up-to-date with all the code.
  • The new features are really nice.
    I will try it out.
    Thanks for your work!!!
    I tested the old version of your firmware and it was just great, that it is possible to select individual instruments now.
    But I had one big problem: Due to a lack of midi channels I control the LXR by using a global midi channel for sending mutes/unmutes to the LXR for the individual channels.
    But in your firmware this possibility of the original firmware is is gone, right?
    It was the reason why I had to switch back to the original firmware.
  • huh. Is it just mutes or other voicing parameters you're sending on the global channel? I see no reason why mutes couldn't also be available on the global channel, it should be a quick fix.

    I've got a couple bugs to patch and then have to get down to writing things for a gig, but I do need to have a good think about the CC assignments. My rationale for splitting them out was that I had to move them around anyway to make space for Bank and Mod Wheel, and a number of hardware sequencers simply don't support NRPN's. I tend to think Channel==Timbre.

    Is it channels or ports you're running out of? I tend to have everything through a MOTU micro express, even when I'm doing hardware only - that thing has saved me so many headaches! It felt weird dropping £ on something that doesn't make sound, but these MIDI swiss army knives can really be a lifesaver :)
  • edited May 2015
    I like the step sequencer in the lxr a lot.
    Therefore, when I do a track I edit the patterns for the different voices directly on the lxr and then create a build-up by sending mutes/unmutes by an external sequencer to the lxr on it's global channel.
    In the original firmware it was:

    CC 98 72-79 (for the 7 voices)
    CC 99 1
    CC 6 0/1 (1: mute; 0: unmute)

    It would be great to have this in your firmware!

    You are right! I thought about the same. Last week I bought an Miditemp MP88 on ebay. I think there will be enough midi ports now.
    Anyway, I like the possibilty to tweak at the sequencer of the lxr without the need to edit the pattern in the external sequencer. The second reason why I like to use the global channel is simply because it is clearer for me to have all mutes within a single midi track.

    Another idea I had before was to implement a simple delay in the lxr by using the repeat function of the snare voice. Maybe it is possible to add two additional parameters like time (duration between the repeats) and feedback (decrease of volume for each repeat). I am not a programmer, but I like this idea somehow. Do you think this would be possible?
  • edited May 2015
    I've put voice mute assignments on the global channel, if you want to try it out. (my website has the latest, or the 'develop' branch on my github) They start at CC113 for Drum 1 and go to 119 for the open hat. 120 is mute all. it's 1+ for mute and 0 unmute as you say.

    The 'faux delay' is a pretty common trick :) It sounds even closer bringing the filter down on each repeat also! Putting it as an 'effect' might introduce a lot of weirdness, like a delay cutting off the tail of main sequencer notes. But I had a play around with the roll function last night and here's a thought: velocity rolls! If the note velocity changed across a roll, you could easily record a 'delay' sound like that without having to manually edit steps. It would potentially add a lot of performance options also. what do you think?
  • edited May 2015
    Thank you so much!!!
    I will test it today.

    Yeah, you are right. Because it is only one sound source there can't be an interaction between the repeats and the original sound. But for short delays on a snare it might work. What do you think? I like the idea, because in the moment the repeat function seems kind of useless somehow. Are the repeats also influenced by the Attack/Decay curve? Is it possible to copy the oscillator settings to the LFO or a another oscillator and create the repeats by a second sound source?

    Your idea to implement velocity rolls is just great! How would you like to control the effect? I think to preserve the old functionality this should be adjustable. Maybe kind of an effect parameter to control the amount of velocity reduction in the performance mode menu? Where is ther difference here compared to using the repat function? The problem of cutting off the tail of main sequencer notes preserves, or am I wrong? But this would be cool for one-shots!

    One cool trick with the roll function is that it continues when you hold a step button in performance mode and then switch to another mode. This creates nice rythmical effects for bassline or melodies. To turn off this kind of arp you just have to go back to performance mode and press the step button of that voice again. This is cool for live performances.

  • edited May 2015
    Ha! I never noticed that the rolls hold if you switch modes! Makes sense, the code only kicks in on button down and button up. I think that would technically classify as a bug but if you find uses for it I'm happy to let it slide ;)

    For velocity rolls, I think what would work would be to add at least another 'perf' page and put a velocity roll param with +/- 64 range or something, then add the parameter to roll velocity on each repeat. I have to have a think about this though - there's a lot of fancy stuff with curves and lfo's that could happen but I don't want it to get too cluttered. Maybe just having a knob for direct control of velocity would be best. I also want to add several more roll intervals. The idea would be to provide a tool to make the kind of delay you're after faster to make (by recording rolls into the sequencer), but would allow for a lot of other things, too.

    There are a few other performance ideas I'm tossing around too like a looper or changing the sequence direction. The 'pattern realign' shortcut makes it easy to jump straight back to what the pattern is 'supposed' to sound like, so I'm all for putting a bunch of things in there that seriously screw with the sequencer position of the various tracks :) The performance options are a big appeal of the box, so I want to make sure to get that right!

    I'm also thinking long term about eventually allowing for some control over the envelopes in the sequencer automation parameters. The LXR is actually quite good at long, evolving textures except for the fact that there is no way to sustain the envelopes indefinitely. I want to avoid adding voice parameters, but doing something like adding envelope direction and position controls on the sequencer would make it easier to get at the delay effect you're after (among lots of other things!)
  • You are right. We should try to keep it simple. :)

    Changing the sequencer direction would be fantastic!
    Do you have a trigger extension? It would be great to be able to have "2" as a clock multiplier for the external clock. Would it also be possible to provide a slower clock speed than the internal clock (something like x2, x4 ,..)? This would be a great for syncing external gear,

    The LXR has a lot of FM power, which you can use to expand the sound. You can also do some delay like effects by using a very low frequency for one oscilator and increase the decay/slope level.

    For the LFO longer sync times beyond  4/1 would be nice for long filter sweeps. :)

    It is great to talk with you about what can be done to make this wondeful synth even more fantastic.
    Thank you!

  • thanks :)

    I'll take a look at the LFO's next time i'm in the code - I think it's simple to make longer sync times but not 100% sure. That would be useful!

    I don't have the trigger extention, unfortunately, or even anything to gate it with! I see the code in there, and have a pretty good idea of what's going on but I'm extremely reluctant to try messing with it without a way to test. I have a friend back in the states who codes and has a bunch of modular, I keep trying to convince him to take the dive :)

    Enjoy! I'll keep working away on it - it's great to have such a nice platform to code into :)
  • Talking about lfo's... Would it be possible to have odd devisions like 1 1/2, 3 of 6 for example?
  • - patterns can be scaled per track - up to 128 bars - Perfect !!!
  • edited June 2015
    Hello Brendan!

    Is it possible to merge your hacks with a new 0.35 FW ?

  • Yes!  I have some time again, so I will definitely be looking into this :)
  • Custom firmware now includes the updates in .36! I haven't done a super lot of testing, but the filter is there for sure, and I don't hear the reported 'morph glitch'
  • Awesome! Gonna test it now. Thanks!
  • edited July 2015
    Have fun :) let me know if there are any problems! I went through Julian's commits again last night and realized I had missed the fine tune on voices 4-6, so that's in there now, along with a bugfix where the encoder could cause the morph value to rollover back to 0 when turned quickly.

    Next thing is kit versioning and hopefully step copy over the weekend.
Sign In or Register to comment.