Getting started
Welcome
If you are new to m.nlcode.nl, this is your starting point. Please read all the pages below.
If you are new to m.nlcode.nl, this is your starting point. Please read all the pages below.
This project is in beta stage, which means that you should expect some bugs and rough edges.
Please note that although the version may be something like 1.0.x, with x being some digit, this does not mean that m.nlcode.nl is out of beta. The first golden release will have version number 1.1.0. This is due to limitations of the build system.
A requirement for use of this application is some basic knowledge on the Musical Instrument Digital Interface or MIDI. You should know about MIDI messages like note on, note off and others. You should also know about MIDI ports, both in hardware and software, and how every port supports sixteen distinct MIDI channels.
Some knowledge on how to make music would also be handy.
The application m.nlcode.nl is a collection of relatively simple parts that are focussed on doing one thing with MIDI data. The basic thought behind this component strategy is to create something with a limited functional reach, but a depth and or simplicity in what it does. Every part has a narrow focus on a specific functional area. These parts can be connected to one another to chain their data through an m.nlcode.nl project. Such a part is referred to as a MidiInOut part.
If you are accustomed to a unix style command prompt, then this ‘do-one-thing-but-do-it-well’ will sound familiar. A unix command line usually provides a large number of specialized little applications and commands. The output of one command can be used as the input for another command. m.nlcode.nl works in a similar fashion. Big difference compared to a unix command prompt is that it is very easy to make one MidiInOut part send to multiple other MidiInOut parts. You can also let a MidiInOut part receive data from multiple MidiInOut parts.
The graphical user interface (or GUI) of m.nlcode.nl is made to be as simple as possible. The basic rule is (or should be) Don’t Make Me Think. All clickable items are easily identified on sight without any further action. So there is no need to ‘hover’ over a certain piece of text to see if it changes into a button of some sort.
All basic interaction is through left click only. No right-click, double-click, ctrl-alt-how-at-the-moon-while-tapdancing-right-shift-click or whatever should be needed UNLESS it is a very well known standardised action, like e.g. control-click to expand a selection with the item you clicked on.
No support for the visually impaired. Sorry. If you have an idea on how to solve this AND you are (or know) someone who can do the user acceptance testing, please contact me. I cannot guarantee anything,
m.nlcode.nl is written in UK English. There is internal support for multiple languages however. If you need a different language AND can do the translation as well, please contact me.
This project is in beta stage, which means that you should expect some bugs and rough edges.
Please note that although the version may be something like 1.0.x, with x being some digit, this does not mean that m.nlcode.nl is out of beta. The first golden release will have version number 1.1.0. This is due to limitations of the build system.
Installers (and possibly other stuff you might need, like JAR files) can be downloaded from Github. Look under ‘Assets’.
So far the easy part. Unfortunately things are almost never easy. Read on.
m.nlcode.nl is written in Java with JavaFX. That means that every platform that has Java/JavaFX support should be able to run m.nlcode.nl. So having only a Java JDK is not enough; a JavaFX SDK is also needed. http://gluonhq.com provides SDKs for the most mainstream platforms.
Packaging a Java/JavaFX application to run on multiple platforms is still a bit of a challenge. Fortunately Github has multiple hardware stacks, so in theory this could privide for OS X, Windows and Linux versions.
Currenly I only have a Macbook Air with x86 Intel chip in it, and I can make use of one with an M1 Apple chip. And I still need to setup Docker to run Linux containers for testing. That means that at this point in time I cannot easily verify if the Linux and Windows versions actually work. That is why most distributables have UNVERIFIED in their names. If you can run them, please let me know so I can remove that UNVERIFIED text from the names of distributables that are known to work.
If you know what this is an you think you need it, please contact me.
Note that I have not yet enrolled in the Apple developer program, so I cannot at this point sign my distributables. Which means you have to take the System Settings | Privacy & Security route when you want to install or run m.nlcode.nl. High enough usage numbers of m.nlcode.nl will entice me to shell out the yearly $99 needed to be enrolled. If this unsigned bothers you, you can always clone the m.nlcode.nl repo, review the source code for bad stuff and run the release process in your clone yourself.
I have noticed that the OS X X86 version seems to run just fine on an M1. The OS X aarch64 version though ran neither on the M1, nor on my x86 Intel Macbook Air. This may be different for you. If so, please let me know. Thing is that the libraries for a x86 and a M1 machine are supposed to be different and (according to the docs) support only one of the two architectures.
I have no Windows machines. I have been able to get Windows somewhat running on my Mackbook Air under Virtualbox, but the sound was unreliable. Which explains the UNVERIFIED in the names of the distributables. I did see a completed running installation of an AMD based Windows machine.
I have not yet gotten around to setting up Docker with Linux containers on my Mac. Which explains the UNVERIFIED in the names of the distributables.
There are several options available from this point. The are described below, in order of complexity with the simplest first.
While one can use a JDK version 18 or higher, I would advise to use a JDK version 17.0.8 or a higher version 17 JDK.
Before addressing individual MidiInOut parts, you should first understand what a project is. A project is a collection of MidiInOut parts that can:
So a project is your main work space in which you work with MidiInOut parts and connect them to each other. Multiple projects can be open at the same time, but an instance of a MidiInOut part can only belong to one project. I will take for granted that you know how saving and loading works, so no example here on saving and loading a project.
m.nlcode.nl can work with other MIDI capable applications and drivers that are known to the operating system of your computer. But you first need to specify which ones you want to be able to work with in your projects.
MidiInOut parts are the building blocks for building a project that can monitor, change, filter and create MIDI data. That is basically it. A simple example will probably say more.
If you hear no sound, check the volume. If the volume is ok but you do not hear any sound, then I am afraid you should troubleshoot further on your own. Note that a Keyboard MIDI keyboard is basically a simple test util and in no way a replacement for a proper MIDI keyboard.
As you have seen in the above example, MidiInOut parts can be connected to send MIDI data to one another. Connections are two way in that senders obviously know to which parts they are sending, but the receiving parts also know their senders. Note that a MidiInOut part can have multiple senders as well as multiple receivers. Use the shift or control keys while clicking to select and deselect (multiple) MidiInOut names.
Example: expanding on the same example as above, do the following.
MIDI Lights is an example of a MidiInOut without any ‘out’. It is simply something that gives a visual representation of MIDI data, but does nothing to the data it receives, not even sending it on. That also means that it has no ‘output’ tab and it cannot be selected as an input for other MidiInOut parts. Keyboard Keyboard is kind of related, in that it can only send output and not receive input.
There is a number of other MidiInOut components. Now that you know the basics of creating them and linking them to each other, feel free to explore. The modularity of m.nlcode.nl combined with the simplistic interface should provide for a low barrier to entry.