Releases: libmapper/libmapper
v2.5.2
We are pleased to announce the release of version 2.5.2 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
In addition to containing various bug fixes, this release introduces dramatic improvements to distributed clock synchronization. Linked devices will now automatically compensate for clock offsets when sending signal updates.
General fixes and improvements:
- Enabled printing graph object properties using
mpr_obj_print(). - Fixed handling of object properties when using
MPR_PROP_UNKNOWNproperty constant. - Ensured
mpr_valueinstances are allocated with reasonable default type and vector length. - Disabled storage of self-reported device IP addresses as device metadata.
- Improved inter-device clock offset estimation and enabled automatic timestamp translation over links.
- Improved handling of local-only links and maps, including clean up on map free and sending instance release messages 'upstream'.
- Improved handling of proxy
id_mapswhen mapping persistent instanced signals. - Restored and improved reporting of signal period and jitter metadata.
- Added call to disable threaded polling (if enabled) before device free, in case
mpr_dev_stop_polling()was not called. - Cleaned up debug messaging
- Refactoring.
Expression engine:
- Fixed erroneous optimization of modulo operations
- Fixed token misreference bug in expression parser that would result in wrong number of internal memory variables being allocated.
Test suite:
- Added
test_time_sync.c - Added more configurations to
testinstance_no_cb.c
C++ bindings:
- Added missing
inlinekeyword forSignal::instances()method.
Python bindings:
- Updated documentation, tests, and examples.
CI:
- CI/Windows: install Python setuptools
v2.5.1
We are pleased to announce the release of version 2.5.1 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This version focuses only on tooling for building Python wheels and continuous integration.
v2.5
We are pleased to announce the release of version 2.5 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release is focused on bugfixes, optimizations, improvements to the expression engine.
Dependencies:
- Update to liblo 0.34.
- Remove variable-length array from RtAudio library used in optional examples.
API changes:
- Added endpoint location argument to
mpr_map_get_sig_idx()so we can specify whether we are searching for a map source or destination. This change supports future work on divergent and complex maps. - Revised function
mpr_sig_get_inst_id()to return instance status rather than id since the previous version had no way to indicate failure (since 0, -1 etc are valid instance ids). A location to receive the id may be passed as an optional argument. - Added argument to
mpr_obj_get_status()for explicity clearing volatile status bits. - Removed
mpr_obj_reset_status()from public API.
Bug fixes and improvements
- Use new message-reuse capability in liblo to reduce runtime memory allocations.
- Pack multiple instance updates in each update message.
- Allow retrieving instance 0 status and id from uninstanced signals.
- Do not include signals/maps marked for removal in query results.
- Fixed regression in
mpr_value_cpy_next()that was preventing timetag updates from being properly stored. - Fixed bugs in instance retrieval affecting the results of non-callback instance management.
- Fix memory leak and a memcpy overlap error.
- Copy timetag when incrementing value position to initial state.
Expression engine
- Added several specialized quaternion functions to the expression parser and evaluator.
qconj(x)– quaternion conjugate.qinv(x)– quaternion inverse.qmult(a, b)– quaternion multiplication.qslerp(a, b, ratio)– quaternion spherical linear interpolation (SLERP).
- Added
normal()function – sample from normal distribution. - Added
edge()anddiff()functions. - Added prime notation for
diff()function. - Fixed behaviour of
emd()function. - Ensure weight argument for
ema()andemd()functions is positive. - Fixed bug determining map slot memory length in parser.
- Fixed possible name-collision bug by removing automatic names from internal function memory variables.
- Fixes for brittle function lexing.
- Improved debugging output.
- Refactoring.
Bindings:
- OO bindings (C++, Python, Java, C#):
- Cleanup of enum classes.
- Added a List class specialization for iterating over lists of signal instances returned from queries.
- Python bindings:
- Fixed status enum values.
- Fixed
Map.index()arguments; fixed bad enum value in testinstance.py. - Fixed enum
__str__()functions. - Updated manylinux script to disable liblo documentation.
- C Sharp:
- Simplified file naming.
Testing suite:
- Added simple timetag test to testvector.
- Added shared-graph mode to testsignalhierarchy.
- Added some automation for running Valgrind tests.
v2.4.14
We are pleased to announce the release of version 2.4.14 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release is focused on bugfixes, improvements to the expression engine and test suite, and documentation.
Bug fixes and improvements:
- Convergent maps built with remote signals now return the original map pointer after handshaking.
- Remote devices now automatically set
STATUS_ACTIVEbitflag. - Added helper function
mpr_obj_get_prop_as_dbl()to public API. - Enabled casting from
MPR_TIMEtype to other typed property getters. - Internal improvements to the
mpr_bitflagsandmpr_valuedata structures and methods. - Added local bundle handling as a message destination to
network.cfor more efficient handling of local maps. - Fixed handling of write-protected object properties.
- Fixed timestamp behaviour for devices which only update signals through local maps.
Expression engine:
- Added vector
product()andreverse()functions. - Added exponential moving deviation function
emd(). - Optimized vector
mean()function. - Added a
pass()function for e.g. rounding integers. - Detect divide-by-zero and out-of-bounds arguments in evaluator.
- Detect evaluation errors during precomputation of expression fragments rather than over whole expression.
- Use sub-expression evaluation errors detection to simplify
linear()macro expansion. - Limited errno checking to EDOM.
- Improved trace messages.
- Fixed vector construction bug in parser.
- Enabled retrieval of current instance index in expression mini-language.
- Fixed possible reference to most recent input by TOK_VAR_NUM_INST.
- Fixed parser fail when operand was a reduce expression; added test.
Test suite:
- Added additional tests for
MPR_TIME-typed properties and write-access totestprops.c - Reversed configuration order in
testconvergent.cto test map handshaking from 3rd party graph before signals are known. - Added tests for inverse trig functions including out-of-bounds argmuments to
testparser.c - Separated tracking of parser and evaluator failure in
testparser.c. - Fixed memory leak when checking list-typed properties in
testprops.c. - Fixed possible
powfand int overflows intestparser.c. - Use polling arg
-1when runningtestconvergent.cin fast mode. - Added configuration to
testconvergent.cto test per-element convergent mapping. - Fixed naming in several tests.
v2.4.13
We are pleased to announce the release of version 2.4.13 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release focuses on updates to the C# bindings: refactoring, documentation, and config scripts.
Additional changes:
- Fix for removal of private properties from non-local objects; added more checks to testprops.
- Java bindings: added missing Device method updateMaps().
- Updated tutorials.
- Include mediapipe example scripts when making dist.
- Tweaks to signal instance management
v2.4.12
We are pleased to announce the release of version 2.4.12 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
Well that was quick! This release primarily fixes an important bug in the implementation of the map handshake protocol. When initiated by a third-party Graph object (e.g. from a session manager such as WebMapper), the first map between any two unlinked devices would succeed but subsequent maps would fail on the first attempt to establish them. Maps created programmatically using local resources would succeed an all these cases.
This buggy behaviour seemed annoying enough to justify a new release.
v2.4.11
We are pleased to announce the release of version 2.4.11 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release focuses on further improvements and fixes for signal instance management, particularly when mapping between ephemeral and persistent signals.
- Proxy
id_mapsare now used internally to enable persistent signals to maintain their global identifiers while still allowing control by upstream ephemeral signals. - When a map is released the map destination will attempt to release all active signal instances that originated with the map source signal(s). This involves slightly delaying complete removal of the destination-side map structure until after the source has stopped sending updates that might re-activate destination instances.
- Handshake
/unmapmessages now include the map version property in order to handle a race condition when a map is released and then recreated before cleanup has completed.
Additional changes:
- Various updates to improve safety and stability when using libmapper in multithreaded projects.
- Fixes for updating object versions during their lifetime.
Tests:
- added
testremap.cto test suite
v2.4.10
We are pleased to announce the release of version 2.4.10 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release provides importnat fixes for signal instance management when the instance status API is used rather than registering callbacks. It also contains changes to the C# bindings in preparation for publishing to nuget.
Fixes:
- adding missing files to dist
- fixed memory alignment of objects stored in a
mpr_list - fixes for instance menagement when callbacks are not used and when instances are modified by the map expression.
Refactoring:
- refactoring expression engine
Bindings:
- renamed Mapper.NET -> Libmapper.NET, added README, license in preparation for publishing on Nuget
Tests:
- added
testinstance_no_cb.cto test suite
v2.4.9
We are pleased to announce the release of version 2.4.9 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release provides several fixes and optimizations that make libmapper more stable and faster. Internally there has also been some refactoring to improve maintainability and support future development.
Fixes:
- Fixed inconsistent
mpr_bitflagsusage when callingmpr_expr_eval(). - Added more length/type checking for static object properties.
- Ensure slot values are reset appropriately so that active instance count is accurate.
Optimization:
- Store local maps at the front of the list to save iterating over non-local maps during processing.
- Store device flag indicating whether child signals have been modified; use flag to decide when to update subscribers.
Refactoring:
- Removed alloca() call in
map.c. - Moved threaded polling into
network.cto match earlier shared-graph work. - Renamed internal expression structures and variables.
- Refactored
expression.cto split into multiple smaller files.
Documentation:
- Added line documenting output of
schmitt()function in expression syntax.
Tests:
testinstance.c: added additional test configurations; print instance statuses.
v2.4.8
We are pleased to announce the release of version 2.4.8 of libmapper, an open-source, cross-platform software library for declaring data signals on a shared network and enabling arbitrary connections to be made between them. The main focus of libmapper development is to provide tools for creating and using systems for interactive control of media synthesis.
This release provides minor updates to verion 2.4.7, fixing an issue with building Python wheels that prevented releasing that version to PyPI. Version 2.4.8 also adds two new operator constants (MPR_OP_BAND and MPR_OP_BOR) and enables status bitflag updates to the mpr_graph object type.