The link you posted is not an official Arduino board. It's not a clone either, it's just a fake copy. It should probably work nonetheless, however I wouldn't buy it, on principle.
I do sometimes buy Chinese clones though, boards with the same layout and components as a genuine Arduino, but that don't claim to be official Arduino boards.
If you buy a genuine Arduino product, you support the development of this platform. That's why they cost a little extra. Arduino is open source, so other manufacturers can use the same design and sell it. These boards are called clones, and are generally cheaper, because you only pay for hardware and manufacturing, not for hardware and software development.
Selling these clones under the name "Arduino" is illegal though.
Quality wise, in my personal experience, there is not really a significant difference between an official Arduino and a clone.
Pretty much any Arduino has the same pin spacing of 2.54mm (0.1"). The main difference is that boards like the Leonardo are pretty large, and you can plug things directly into the header connections. Teensies on the other hand, are much smaller. While you could connect some wires directly (either by soldering or by using female Dupont connectors), most people use it plugged into a breadboard.
The MIDI Controller library uses different objects for all your controls, it's very simple. For example, if you need 6 potentiometers, you create 6 Analog objects. If you want to add 20 buttons, you add 20 Digital objects.
Then in the loop, refresh the MIDI Controller indefinitely.
Take a look at the examples included with the library, that's the only way to really learn how to use it. If you want more information, you can check out the library documentation on the GitHub Wiki page, however, it is pretty extensive, and might be overwhelming if you're completely new to Arduino and C/C++ programming.
Apart from control elements (e.g. Analog and Digital), there are many other "building blocks" as well (custom MIDI outputs, IO expanders, banks of control elements, inputs to select which bank to use ...) but you don't really need them.
For example:
#include <MIDI_Controller.h> // Include the library
const uint8_t velocity = 0b1111111; // Maximum velocity (0b1111111 = 0x7F = 127)
const uint8_t channel = 1; // MIDI channel 1
// Create an array of 14 new instances of the class 'Digital', called 'buttons',
// on pins 0,1, ..., 13 that send MIDI messages with notes
// 12, 13, ..., 25 on MIDI channel 1, with maximum velocity (127)
Digital buttons[] = {
{ 0, 12, channel, velocity }, // button connected to pin 0, sends MIDI note 12 on channel 1 with velocity 127
{ 1, 13, channel, velocity },
{ 2, 14, channel, velocity },
{ 3, 15, channel, velocity },
{ 4, 16, channel, velocity },
{ 5, 17, channel, velocity },
{ 6, 18, channel, velocity },
{ 7, 19, channel, velocity },
{ 8, 20, channel, velocity },
{ 9, 21, channel, velocity },
{10, 22, channel, velocity },
{11, 23, channel, velocity },
{12, 24, channel, velocity },
{13, 25, channel, velocity }
};
// Create an array of 6 new instances of the class 'Analog', called 'potentiometers',
// on pins A0, A1, .., A5 that send MIDI CC messages with controller numbers 16, 17, ... 21
// on MIDI channel 1
Analog potentiometers[] = {
{ A0, 16, channel }, // potentiometer connected to pin A0, sends CC #16 on MIDI channel 1
{ A1, 17, channel },
{ A2, 18, channel },
{ A3, 19, channel },
{ A4, 20, channel },
{ A5, 21, channel },
};
void setup() {} // nothing to set up
void loop() { // Refresh the buttons and potentiometers (check whether a button's state or a potentiometer's position has changed since last time, if so, send it over MIDI)
MIDI_Controller.refresh();
}
The MIDI Controller will automatically use the MIDI USB connection. You can use a different MIDI interface if you need to. (E.g. hardware MIDI or debug print MIDI events.)
Pieter