In addition to many improvements and bugfixes, libmapper v0.3 includes several major new features:
rate
property to signals which can be used to represent regularly-sampled signals. This means that it is possible to support “blocks” of data where each sample does not have the overhead of an individual message header. The default behaviour, however, is still to send each signal update as an individual, time-stamped OSC message, assuming irregular updates. Software sampling sensors should be aware of how to distinguish between regularly- and irregularly-sampled signals and use the correct behaviour accordingly. At low sample rates, of course, the difference is not as important.MO_REVERSE
has been added which can be used to establish signal from from output to input. The intention is to use this for training machine learning systems, allowing the construction of so-called example-based “implicit mapping” scenarios. MO_REVERSE
of course does not invert the mapping expression, so is best-used for direct connections to an intermediate device that sits between a data source and destination. Single “snapshots” of output state can also be acquired by a query system, using msig_query_remotes()
.select()
or poll()
in a program that uses libmapper among other sockets or files to read from.value
pointer being zero. This indicates that the mapper signal is actually non-existant, i.e. no value is associated with the signal. That is to say that “null” is now considered a valid state for a signal and is different from, for example, a value of zero. User code can choose to ignore this case or to make use of it if there is a semantically relevant action to take. An example of this condition is if some signal does not have a valid value when some other signal is in a certain state, or for reverse connections, a null value might indicate that the output has not been set to anything yet. Local code can query the last-updated value of any signal using the msig_value()
function.The tutorial has also been translated for several supported language bindings: Python, and Max/MSP. Build documentation has also been added.