Custom Firmware - new features
  • 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:
    http://www.brendanclarke.com/files/LXR/

    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!

    Thanks!
  • patterns can be scaled per track - up to 128 bars
    What do you mean with this?
  • 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?
  • 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 :)
  • 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?
    Cheers!
  • 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).
  • 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 :)
  • 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?
  • 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?
  • 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.

  • 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 !!!
  • Hello Brendan!

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

    Thanks!
  • 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!
  • 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.
  • Thx for the firmware, i had bought a LXR again just for this
  • Great! I'd love to see some video of what people are doing with it, I'll try to do some over the weekend too.
  • Brendan! I found a bug it seems. When i tweak fine tune parameter of HH to different value than -63 DR1 and DR3 start to sound distorted.

  • kuzma_p said:

    Brendan! I found a bug it seems. When i tweak fine tune parameter of HH to different value than -63 DR1 and DR3 start to sound distorted.



    I fixed a number of bugs over the last few days - I've tried it with the
    version that's on the web now and can't reproduce it, so try the new
    one and see if it's ok now.

    either:
    brendanclarke.com/files/LXR
    github.com/brendanclarke/tree/custom-develop
  • I've also added a step copy function. There is both main step copy and sub step copy.
    Main Step Copy:
      - Press and hold 'copy'
      - Press a sequencer button (it will flash)
      - Press another sequencer button.
    All the sub-steps of the first main step are copied to the second.

    Sub-Step Copy:
      - Press and hold 'copy'
      - Press a sequencer button (it will flash)
      - Press one of the 8 'select' buttons corresponding to the sub-step you want to copy from (it will flash)
      - Press another sequencer button (it will flash)
      - Press another 'select' button corresponding to the sub-step you want to copy TO
    Just the one sub-step will be copied.

    Edit: sub-steps light up during copy now! and it should work in both voice and step mode. You can also skip pressing a second sequencer button if copying a single sub-step within the same main step.
  • Yeah, everything is alright now. Thanks!
  • I can't wait to try out all these new functions, once I get my lxr back up and running. great work!
  • Here's a fun one for the weekend:

    Voices can be changed by pattern automation. There is a new step automation parameter "Voice LoadKit#". When this is set, and the step is activated, the voice will do an individual voice load from the kit file number specified by the automation value. The load is not instantaneous, so it is recommended the load not be done on a step that you want to trigger (though this can sometimes sound nicely glitchy), but done on a silent (velocity 0) intermediate step.

    The new parameter shouldn't cause old patterns to load strangely, but to be on the safe side you might not want to overwrite patterns or kits that you want re-use with older versions of the OS.
  • If it is possible to load single voices, is it also possible to safe single voices? Maybe this has already been discussed, in that case I missed it. But it would be really helpful to have avoice directory in the load/save menu!
  • It's possible, it's not something I would work on any time soon. It would require a lot of re-working code for almost no new functionality. If you have a voice you like, just save it to a new kit to use later. The only thing you can't do now is move, say, a DRUM1 voice to DRUM3.

    I rather like auditioning through voices of different kits quickly to make new kits, and if all the drum parts were different files, you'd need a confusing menu with duplicate load entries, or you'd need to perform 4 steps to get a voice out of a kit and into the current one. Or you'd need to remember to save everything as both kits and voices. It just slows things down.
  • More weekend additions! This one might take some explanation, so read the readme:

    http://brendanclarke.com/files/LXR/

    In short, there is an expanded Performance menu. Page 1 adds two 'Performance Macros' to the usual morph and sample rate controls. These each take two parameter assignments to let you change multiple sounds at the same time. The assigments are saved with the kit.

    Page 2 adds roll control (as a rule, you must now say "roll control" seven times fast). You can change note and velocity while you roll. These are also recorded to the sequencer if record is on.

    Pages 3 and 4 (get at them with the encoder scroll only) are the assignments for the performance macros.
  • Finally, I had some time to try out the new features and they are great!
    The routable custom buttons and the transpose tool are fantastic.
    Is it right that you have only half of the paramter range for the customs buttoms due to the symmetry of the paramter (+-63)? When I want to open a complete closed filter I can do this only up to value 63, right?

    In the moment the transpose tool seems to be a global option. This is cool, because you can set different values for individual voices and can switch them at once.
    For arps it would be nice to have the transpose value for each part. This way you could edit your arp in the first part, copy it to another part and transpose the whole part.
    What do you think?
  • thanks!
    The idea with the bipolar assign is that you can have one parameter maxed when the macro is maxed and the other param at min when the macro is maxed - so you can crossfade two parts with one control, for example. You should get the full sweep with +63 that you would get, say, setting an lfo to 127 modulation, but the resolution is halved.

    hmm... are you saying you would prefer the on/off switch to work individually for each part? I'll have a think about that, but i do like the immediacy of being able to transpose all the parts in different directions at once - and if there are parts i don't want to transpose, then I just set those to '0'.

    There are a few things I need to tinker with - transpose is one of them. I want to have transpose saved somewhere in a file... I'm thinking in a 'performance' or maybe per-pattern? would that get too confusing?

    I also need to change how rolls work when rolling over existing steps, it's not very clean now. And I really want to put in a way of overdubbing velocity on existing notes.
  • No, I like this global switching behaviour of the transpose tool.
    What I wanted to suggest are individual  transpose settings per pattern in the performance mode.
    You could then create a pattern, copy it to another pattern and transpose it quickly without the need to edit individual notes. Even live this might be handy.
    Yes, it would be great if the transpose value could be saved per pattern.

    Thank you for your great firmware!
  • Thanks :) yes, I'll take that into consideration and I've put 'make transpose per-pattern and save in pattern data files' on my to-do list.

    If what you're after is quickly editing the note data for a new pattern, you can 'write' the transpose by turning record on. Just let the pattern play through once while transposed and recording, then turn record off (also, turn transpose off).

    the transpose value is written to a per-step value (distinct from the 'note' of a step) in realtime as the sequencer runs, *but only when transpose in ON*. So ... you can do some fairly complex stuff by flipping transpose on/off quickly and changing the value while recording. The results aren't 'finalized' until you turn record off, so you can always do more overpasses or do a pass with transpose set to 0 if you don't like the result.
  • Cool! :-))
    Thanks for the hint.
    This transpose tool is just great and opens a lot of new possibilities.
    Just think of random values for the pattern generator, it's usage as a modulation target or a chord mode by copying the paramters from drum1 to drum2 and drum3 and setting the right transpose values for drum1-3.
  • Glad you're enjoying it :)

    Maybe adding some 'note' params to the euklidean generator (root, chord, octaves, etc) would be interesting. I'll kick that thought around a little! The trick is more expanding the menus than anything. Also a utility to 'link' the voice params of all 3 drum parts might be useful! poly mode... hmmm...

    having transpose as a mod target might get into tricky territory ... it's in danger of generating an endless functionality loop (ie - if you can modulate the transposition, what if you want to transpose the modulated transpositions? what if you want to modulate the transpositions of the modulated transposition?) :)

    Just not sure what the extra functionality you're thinking of is... It's already possible to modulate the coarse pitch, or record pitch automation to sub-steps for that chip-tune type steppy pitch cycling effect. Maybe some 'ladder' type LFO waveforms?
  • I was just dreaming a bit. :D
    The difference is that the transpose value is kind of quantized to full notes. This might be interesting and is a difference to the coarse target. I was also thinking about a probability option for the transpose tool, but maybe this goes too far.
  • I think coarse is quantized to half-steps of pitch also. If you change it with a mod like lfo or velocity (or the new 'macros'), the way the mods scale isn't quantized. But if you do it with the step or substep automation, it should remain quantized. Keep in mind that track automation can be directed at a different track, so this might be a thing to try...
    Drum 1 is your 'sound' where you want pitch-cycling
    Drum 2 is your 'pseudo-lfo' ... set the track length to 1 and set all the sub-steps for the first main step to automate coarse pitch for drum 1 AND - this is key - *set the velocity of those sub-steps to 0*

    You should get a nice, quantized and steppy pitch-cycling in 1/128th notes when drum 1 triggers. You can also transpose drum 1 and the relationship of the notes should track. This also doesn't preclude you from using drum2 - you can copy out those sub-steps and then set any steps where you want drum 2 to sound to have a velocity other than '0'.
  • Thanks for the hint, Brendan!
    I will try your procedure.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion