midi cc control of knobs and buttons?

  • Jeff Sandys

    Jeff Sandys - 2009-04-20


    Have you though about adding the ability to link midi cc messages to the knobs and buttons of the various synths?  Or is this functionality an undocumented feature of the patch configuration file?

    What is the small semi transparent black box that pops up with a right mouse click?  (for future addition of adding midi cc controls?)

    Jeff Sandys

    • Nick Copeland

      Nick Copeland - 2009-04-20

      Hi Jeff,

      You can do this already however it is not straightforward:

      When you start the synth you have to connect your MIDI controllers up to the engine bristol. To get controller automation (CC tracking) you also have to link the surfaces to the GUI, brighton. If you use aconnect look for brighton in the list of outputs from 'aconnect -o' for example. I do not find these midi IO entries in qjackctl however that is probably more related to version than anything, I thought it supports jack audio IO and ALSA midi devices as well.

      After that, click the middle mouse button in any control on the GUI, then move the controller. You should see a few messages in the console regarding registration request/honour taking place. These settings are saved in the memories but you only get one copy per emulator, not per memory which is a reasonable solution.

      The semitransparent box is just some test code for pop-up menus. I should remove it until it is finished. It will allow you to start different emulators, access a for otherwise hard to find parameters, etc, probably including CC controls however you will still have to connect the GUI to your control surfaces.

      Hope that helps,


    • Andrew C

      Andrew C - 2009-04-20


      Given that there are 127 Midi CCs, with most of them assigned to different things (pitch bend, modulation/breath control etc etc), I went through an online guide to midi CCs and AFAICS, there are only about maybe 17 or so 'freely' assignable Midi CCs. Would this mean that it'd be impossible to assign every parameter to any large bristol synth even with multiple control surfaces, such as these http://www.zzounds.com/item--BEHBCR2000 ? (It's the first one that came up when i searched for 'midi controller knobs' :-P ) to say the Jupiter?

      Just wondering,


    • Nick Copeland

      Nick Copeland - 2009-04-20

      The MIDI standard states how a synth that conforms to its spec should respond to certain controllers. The fact is that if you don't want to then you don't have to apply the exact controls to the same parameters, and truth be told the ones that are defined don't actually fit any synth on the market. Bristol will allow you to make whatever links you find reasonable, irrespective of what the spec states and this works until you have multiple synths on a single channel. The thing is, very few synth combinations will work well when being controlled on the same channel as you typically will not want them both to accept the same parameters - if you have multiple synths layered then you probably don't want the same sound out of each of them, hence the spec is a little broken when it attempted to define the use of controllers.

      Bristol will let you drive any GUI device from any continuous controller. There are two other options:

      1. When the brighton GUI drives the bristol engine it uses proprietary formatted SYSEX. These 'could' be programmed into a control surface however it would be a lot of work.

      2. Bristol can be configured to respond to NRP (non-registered parameters) to give you up to 16K controllers with 16K values each. The spec does not discuss the possible conflicts of multiple interfaces using the same controller ID on the same channel - that causes other issues that the spec did not want to address (other than specifying SYSEX).

      Only option 1 really works very well which is why bristol uses SYSEX between the GUI and the engine. The GUI is kind of a dedicated MIDI master controller for each synth emulator - all messages are transmitted using MIDI encoding, albeit over TCP rather than serial or USB interfaces.

      Anyway, none of this gets around the other issue you talk about - there are very few MIDI control surfaces that have the number of controls you would need to manage a whole bristol emulator, that is true. Having said that, assigning just a few surface controls to specific GUI devices leads to a lot of fun: just crank up the Jupiter sequencer with controls linked to filter env attack/decay plus filter cutoff and resonance, seriously good fun to be had.

      Kind regards, Nick.

  • Anonymous - 2010-05-10

    I followed the steps to asign midi controllers to bristol knobs, I have the message in the console regarding registration request/honour taking place but it doesnt work. Even no configuration file is inside ./bristol directory, just the subdirectories memory/etc but no config files.
    I am already playing bristol from my controler. Pitch bend works, modulation wheel works, controller 5 & 7 works but I cant change assignations.
    Any idea? I should save the settings somehow?

  • Nick Copeland

    Nick Copeland - 2010-05-10

    What version of bristol do you have? Until 0.50.1 there was no event forwarding in the engine, that means if you link your midi surface to the engine it will see key events, pitchwheel, everything, but the GUI will not get a copy. The GUI needs a copy so it can track controller changes both in GUI and engine (in fact, it is the GUI that tracks the CC and programs the engine to suit). To get this to work with 0.40 then you need to look at aconnect -io and you should see 128:bristol and 129:brighton (128 and 129 might be other numbers depending on what applications you already have started). If you connect your surface to both then it should work in that release.

    In 0.50.1 and greater this is no longer necessary: the engine will receive events and forward them to the GUI for handling, it is done transparenty.

    It is possible to disable the new features and get the 0.40 functionality back with '-forward -gmc' but there is no reason to use that, it is one of bristols many 'fixes' for bugs that have not yet been found.

    Now if you do have 0.50.1 or better installed and it still does not work then perhaps you have one of those bugs? To track it down try to start bristol with '-mididbg -mididbg2 -debug 9' and get me the output, or try the above options to disable forwarding and connect your surface to both bristol and brighton.

    Kind regards, nick.

  • Nick Copeland

    Nick Copeland - 2010-05-23

    Hi Jeff,

    Did you get a chance to test any of the 0.50/0.60 releases for controller tracking? They are supposeed to work which means if they don't then I have some more fixes to work on. Happy to do that, just let me know.

    Kind regards, nick.

  • Relationalist

    Relationalist - 2011-03-27

    Dear Nick and dear users,

    there are two features I'd like to be improved.

    1) sometimes I want to trim a parameter very smoothly and the control control behaviour of the mouse or even of a knob or a slider on my keyboard isn't fine enough.  What a bout a popup slider with magnified scale?

    2) If it is true that brighton manages bristol via sysex, am I right that this fact limits the subtlety of the parameter trimming? The minimum parameter grain size woulld be the minimum midi grain size. So is there actually a fine trimming as on analog synths?

    Thanks a lot.

    By the way bristol is one of the best things ever happened to me. On the software side it aligns with Linux, PD, LateX and Sage. To be sure there are other great things in my life. But as a child of the 70s, growing up with all the synth sounds I always wanted to make them and even as a child I already wanted to play a keyboard. But my parents couldn't afford the piano lessons. Later I became a very good guitar player but after fractioning a finger there's no more fun in it - and still I can't afford the old synths and to be honest I don't want to stuff all the appartment for it is still occupied by the guitars. So bristol brings a lot of joy to me.

  • Nick Copeland

    Nick Copeland - 2011-03-27

    Hi There,

    It is probably better to give answers to these questions in the reverse order:

    2. Parameters are sent over SYSEX using a borrowed ID. The internal data is 32-bit float using values of 0 to 1.0 and the transfer syntax uses 14 bit encoding, that gives a resolution limit of 16383 steps from 0 to 1.0. The value was intended to emulate the MIDI dual precision CC controls. The rotary controls track the angle from centre of the pot to the mouse pointer which means the whole 2D screen realestate is available to give the 16k steps and as such the mouse has higher resolution than the encoding. The linear sliders have native screen resolution which may only be 100 pixels, ie, 100 steps. These will often be audible for some parameters.

    1. It is possible to use Control+UP_Arrow/k to change the value +1, and Control+Down_Arrow/j to reduce the value by 1 step. This gives the maximum resolution of any of the transferred values. You can use Shift to accelerate the movement and without Shift or Control will give a 'small' increment. Now I don't have any goals to introduce popup with magnified scale although I am debating the following:
    1.1 The rotaries will track angle but their is an option to track linear up/down. I may do the following for the linear potentiometers, ie, have them track linear or also angle as the latter give far better resolution (2d rather than 1d control). Suggestions to improve linear pot tracking include 'fanning pots' which I find sloppy as the controls on the edges of the screen start having greater resolution so those at the centre.
    1.2 Change the parameter encoding so that I an send 32bit floats rather then 14bit double res MIDI CC.

    In short, the only fine trimming you have is with the QWERTY keyboard. Some synths (well, one, the Pro1) will show you the value that is being sent and their are no plans for pop-ups for other input methods. Adding in a floating point transfer syntax will improve the resolution of the rotary controls, the linear controls with 1D tracking remain an issue.

    Have you tried the Control/Up or Control/Down for different parameters? I have never noticed the difference between any two steps however I admit that I have not spent that much time listening for changes to the waveform beating an oscillator and the filter resonating at the same frequency - this should be the only settings that really will be audible as the filter frequency only has 16K values hence cannot resolve resonance to 1/100Hz. The oscillators don't suffer from that issue as they have octave transpose and +/1 seven semitone tunings which should resolve to 1/100th Hz (when they have rotary controls).

    I really am pleased to hear you enjoy bristol, I only ever got to play a few of the instruments I emulate here and always wanted to know how the others worked. As bristol developed I started hearing sounds I had never anticipated (especially when I got on to the Odyssey and 2600 due to their modulation capabilities) but after reasoning through what was going on it occurred to me that the originals would have been able to do the same (whilst they would admittedly have sounded more 'warm analogue' than bristol).

    Let me know where you want to go from here. I would like to work on a floating point transfer syntax to remove the MIDI dependencies but that would leave you needing to use QWERTY control for fine adjustments of the linear pots. The rotary controls have a theoretical limit of your screen resolution (eg, 1024x768) which I don't think needs improving upon as this is nearly 1M discrete values. Practically speaking it is less however there is a 'subpixel' fix which would then give the theoretical limit again. I can see about fanning pots for the linear controls if you don't like using QWERTY.

    Kind regards, nick.

  • Relationalist

    Relationalist - 2011-03-28

    Dear Nick,

    thanks you so much for this precise answer.

    I wasn't aware of the QWERTY-Method ctrl-up or ctrl-k.  I managed to use ctrl-k to move a parameter up. The others and also the arrows still don't work on my german QWERTZ-Keyboard. But even this one, the one-little-upwards, is AMAZING. It allows to generate slowly changing soundscapes without programming. I guess all the 70s Rock bands would have appreciated such a feature.

    Maybe I will find substiututes for the other small change shortcuts besides the k  without remapping the keyboard. Or I'll purchase a QWERTY. (… these are overpriced in Germany because everyone knows that if some one needs such a device he needs it desperately and sometimes immediately)

    I am thinking about using a hardware midi controller with huge sliders and stepless turning knobs (not as in the usual encoder knobs), if there exixts such a thing.

    The internal Sysex-Midi control with at least 16000 is definitely enough. I am convinced. I guess this is even finer as any ordinary human being may control an anolog knob.

    When using a turning knob woth the mouse you can move the brighton.window and this very knob into one corner of the screen and then control it by driving the pointer along the opposite sides and so make it finer …

  • Nick Copeland

    Nick Copeland - 2011-03-28

    > The others and also the arrows still don't work on my german QWERTZ-Keyboard

    Yes, another feature would be to make these mapped functions in a config file. I should work on that, not least since the keycodes may conflict with the piano keyboard mappings onto the QWERTY (the keyboard mappings to play the synth are in a text config file though). I would prefer you did not have to purchase another keyboard.

    > hardware midi controller with huge sliders and stepless turning knobs

    See if you can try it beforehand. You will get pretty bad response of most of them: they send 7 bit midi events. With some work, they might be able to send Registered Parameters (RP) or Non-Registered Parameters (NRP). Bristol can support NRP mappings and they have 14bit precision - not widely tested though. On top of that, if you have multiple devices connected up then NRP can often conflict. I think some controllers can be told how to send SYSEX but I have no idea if that would work with bristol, theoretically yes however I might need fixes and don't have a control surface that can do this.

    I take your point on resolution of 'fanning controls': I will see if I can get you some code so that the linear pots will have finer resolution. Then I will have a look at making the keyboard accelerators a configurable option.

    Kind regards, nick

  • Relationalist

    Relationalist - 2011-03-28

    Thanks a lot for the advise.

    This is for the german QWERTZ-users (and for the others: strg=ctrl): up: strg+k      down: strg-h   Accelerator: CAPS-LOCK

    This is a question for the creator of bristol from a user who is no expert in rights: would it be  o.k. to use bristol in an educational environment (high school class) and produce some some music which the kids might consider their own work?

  • Nick Copeland

    Nick Copeland - 2011-03-28

    As the author of bristol you are very welcome to use this software in a classroom environment. The software is completely open source, free use and that means you can use it for whatever purpose you see fit. I would be honoured for the software to be employed this way, any results from using the software is naturally your students own work.

    I can give you some code for 'fanning linear pots' where the further you move your mouse from the linear potentiometer the finer the movements become, you can find it in an attached file on the feature request below:


    Kind regards, nick.

  • Relationalist

    Relationalist - 2011-03-28

    Thanks for the code.

    And once again a note to the german readers. Pro1 with its display let me figure out some setting:

    1. "down" is not h but j (left beneath k) But: it is accellerated (medium): shift+k shift+j
    2. Now the arrows are working.
    3. there are 3 degrees:
    strg+arrow righleft: fine (2 Points)
    shift+arrow updown: medium (some points, maybe 16)
    shift+arrow rightleft: fast (125 at once)

    And Yeah! The Pro1 takes me back to the days when we did all these sound-orgies with guitar feedbacks and very short  tape loops. Its aural behaviour is (for my ears) not distinguishable from a purely analog one. Chapeau, M. Copeland


Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

No, thanks