Sending MIDI control data to analog synthesizer

DJF's icon

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.

Screen-Shot-2015-11-24-at-23.04.20.png
png
Christopher Dobrian's icon
Max Patch
Copy patch and select New From Clipboard in Max.

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.

DJF's icon

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

Screen-Shot-2015-11-25-at-10.38.35.png
png
Christopher Dobrian's icon

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.

DJF's icon

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!

Max Patch
Copy patch and select New From Clipboard in Max.

`

DJF's icon

Hey Christopher,

Max Patch
Copy patch and select New From Clipboard in Max.

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.

Christopher Dobrian's icon
Max Patch
Copy patch and select New From Clipboard in Max.

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.

DJF's icon

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.

Max Patch
Copy patch and select New From Clipboard in Max.

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.

Christopher Dobrian's icon
Max Patch
Copy patch and select New From Clipboard in Max.

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.