These tutorials introduce new users to libmapper, providing steps to construct software programs that are compatible with the libmapper network. A program typically implements a libmapper device, and declares signals, which can be inputs or outputs. After this, run-time maps can be easily created and configured between declared signals. libmapper takes care of announcing and discovering available resources on the network, creating and maintaining connections between entities, and various other functions.
The diagram above shows a simplified network of libmapper-enabled devices. In real use, devices and signals are expected to be given short descriptive names rather than the identifiers used in this example.
vector length. Signals must belong to a device.
d1 <-> d3and
d2 <-> d3.
d2:s1 -> d3:s3(labelled
A) and the more complex convergent map
[d1:s2, d2:s2] -> d3:s2(labelled
Often, a device will possess only outputs (e.g. a program that gets information from a human input device like a joystick), or only inputs (e.g. a software-controlled synthesizer). For convenience, in these tutorials we will call devices with outputs "controllers", or "senders", and devices with inputs "synthesizers", or "receivers". This betrays the use case that was in mind when the libmapper system was conceived, but of course receivers could just as well be programs that control motors, lights, or anything else that might need control information. Similarly, senders could easily be programs that generate trajectory data based on algorithmic composition, or whatever you can imagine.
It is also possible to create devices which have inputs and outputs, and these can be mapped "in between" senders and receivers in order to perform some intermediate processing for example. However, this is a more advanced topic that won't be covered in this tutorial.
Essentially, each device only needs to do a few things:
Use the menu above to explore detailed tutorials for libmapper in the supported programming languages and environments.