Sending MIDI control data to analog synthesizer
Hey Guys,
Beginner needing help creating virtual MIDI controller to send controller information to an external device. Any advice and how to get started would be much appreciated. I am new and need pointing in the right direction
The situation is that I own a vintage analog drum machine (late 90s) that allows you to access and edit almost every parameter via MIDI control data. The ultimate aim would be to create a Max runtime app that would allow me to control the analog synth and store presets on my computer.The synth in question is the Jomox XBase 09. I've attached an example of the MIDI implementation data available in the manual.
You'll want the ctlout object to transmit MIDI controller messages to the Xbase, and you can store presets of user interface object settings with the objects pattrstorage, autopattr, and preset.
Advice on start patch? Thanks so much for the help. I've started making a patch and have a few questions.
1. Is it possible to prioritise an object's outlets? For example, I have a number box sending a value to the controller number input of a clout object, and the number box simultaneously produces a bang which sends a fixed message to the controller value input of a clout object. I would like this number box to always produce the control number value before it produces the bang.
2. Do you have any advice as to how to have an option in the patch that allows you to select a midid device output? For example, I will always have a midi sport and fierce 800 attached. When I open the patch I would like to have a simple option that allows you to pick which one.
Dan
I can answer your questions (and I will), but of even more value, I can recommend to you methods for finding the answers yourself.
In Max, if you choose "Reference" from the Help menu, you will get a window that provides the complete Max reference manual. You can type in a query to search for, such as "message order" and you'll usually find some helpful documentation of your topic. In the case of "message order", if you then click on Tutorials in the left sidebar, you'll find helpful information in "Max Basic Tutorial 2: Bang!" and in "Max Basic Tutorial 5: Message Order and Debugging". If you click on Objects in the left sidebar, you'll find helpful information in "trigger: send input to many places". My own answer to your first question is "The trigger object."
For the answer to your second question, try typing "MIDI device" in the search field. See especially Tutorials->"MIDI Tutorial 1: Basic MIDI" and Objects->midiinfo. My own answer is "The midiinfo object and/or the 'port' message to ctlout."
Also, as you probably already know, you can Option-click (Alt-Click on Windows) on any object to get help documentation about that particular object.
Thanks Christopher,
I've implimented the ctlout object and am about to work on a preset function using the objects you suggested. I've now made a fully working virtually controller for my drum machine - patch attached. Thanks!
`
Hey Christopher,
Could you tell me what the advantage of using multiple ctlout objects per controller is over having multiple controllers going into one clout object. Your example seems to make more sense, but I don't fully understand why.
Because your original post was tagged "Beginner" I guessed that using four ctlout objects might be the simplest and clearest way to show what you had asked about. But your question is a good one. There is no advantage to using four ctlout objects rather than one. In fact, I would normally use just one ctlout object and use one of the message-organization methods shown in the example below.
would Thanks for the advice. I have used 20 [ctlout] objects each being controlled independently. My reasoning in doing this was because I was going to eventually implement a way of sending a bang to each [ctlout] object to send all controller values simultaneously. Would you say this method was appropriate? If you open the patch up in presentation mode you can immediately see what I am trying to achieve.
I really appreciate all of your help so far. I used Max quite a lot but have not touched it in several years . I'm a bit I'm a bit rusty, but can easily grasp the theory / terminology.
As I mentioned above, I would probably use pattrstorage to store and recall settings for all the data objects, and I'd probably use just one ctlout object, but there are often many ways to do things. A single 'bang' could be used to re-transmit the current settings of all data objects if need be.