Releases: libmapper/libmapper
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_maps
are 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
/unmap
messages 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.c
to 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.c
to 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_bitflags
usage 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.c
to match earlier shared-graph work. - Renamed internal expression structures and variables.
- Refactored
expression.c
to 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.
v2.4.7
We are pleased to announce the release of version 2.4.7 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 includes new bindings for the C# programming language, unified oject status flags, improved support for shared graphs, and many small bugfixes and improvements. For more detailed information see below.
Note: This version of libmapper depends on liblo v0.32 or greater.
API changes:
- Moved
mpr_time_print()
to public API - Unified object status bitflags for use across all libmapper objects
- Added functions
mpr_obj_get_status()
andmpr_obj_reset_status()
- Added function
mpr_sig_get_inst_status()
for retrieving the status of a signal instance, including whether it has been updated locally/remotely or released remotely since the last time the status was checked. This functionality enables more sophisticated handling of instanced signals and maps without using callbacks. - Devices that share a graph may now be polled all at once by calling
mpr_dev_poll()
on any of them, or by callingmpr_graph_poll()
on the shared graph object. - Added support and documentation for passing a negative
block_ms
argument to polling functions. This will case the poll function to process all messages currently in the queue and then return immediately.
Updates:
- Fixed error in the path generated by
pkg-config --cflags
after libmapper has been installed - Fixes for overlapping memcpy released by Valgrind profiling
- New graph list items are now appended instead of prepended to support processing remote updates in the same order they were instantiated
- Fix: Reset signal property table dirty flag after sharing updates from
mpr_dev_poll()
. Reduces redundant network traffic and seems to speed up tests. - Fix for osc bundling of instance release messages
- Accept string arguments for boolean object properties in osc messages.
- Fix for handling id_map retrieval when non-ephemeral signals are updated remotely.
- Expression engine:
- feature: added syntax for referencing the 'newest' signal in convergent maps
- feature: allow calling reduce expressions on variable timetags.
- fix: ensure vectors of random values are initialized with the correct length
- fix: expression table refactored for windows-arm64 workaround
- fix: ensure references to user-variable timetags are properly mapped to variable list if they occur in the expression string before a non-timetag reference
- fix for timetag interpolation bug
- Refactoring: Moved all server management to
network.c
and wait efficiently on all OSC servers simultaneously. - Refactoring:
mpr_value
is now an opaque type. - Refactoring: increase usage of
mpr_bitflags
andmpr_value
types.
Documentation:
- added document Understanding Instanced Signals and Maps
Bindings:
- C#: bindings were rewritten
- Python: added testmonitor.py
- Java: added handling of string array property values.
Test suite:
- Added teststealing.c
- added value checking to testspeed.c
v2.4.6
We are pleased to announce the release of version 2.4.6 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 a bugfix for processing instance reduce functions, revision of the class structure for object-oriented language bindings (Python, Java, C#), and improvements to documentation.
Changes include
- Updated the class structure and documentation for object-oriented bindings (Python, Java, and C#) to improve consistency and clarity.
- Added the
median()
function to the expression language - Enabled comparison by either object ids or memory locations when filtering lists.
- Added of license metadata to
pyproject.toml
- Documentation:
- Rearranged sections in the expression syntax documentation to improve readability.
- Updated API documentation
- Updated expression syntax documentation.
- Added docstrings for Python bindings.
- Added MediaPipe face tracking example to doc/integration_examples
- Added exit handler with dev.free() to Java/Processing example.
- Testing:
- Improved type checking in testparser.c
- Updated testlist to avoid false failures when other libmapper-enabled programs are running on the network.
- Added argument to testparser for running a specific test expression instead of the whole set.
Bug fixes include:
- Ensuring non-local links are removed from device records when links are removed from the graph.
- Switched to 64-bit type for comparing mpr_ids when filtering lists.
- Expression parser:
- Moved timetag token into enum range eligible for typecasting.
- Expression evaluator:
- Fixed an instance reduce regression.
- Fixed typecasting and vector length tracking in expression engine
- Python bindings:
- Fixed instance allocation count in signal constructor.
v2.4.5
We are pleased to announce the release of version 2.4.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 version focuses on support for network interface switching on Windows. There have also been several bug fixes and improvements to API documentation.
Bug fixes include:
- Switching network interfaces is now enabled on Windows.
mpr_graph_set_interface()
/mpr_graph_get_interface()
now assume use of human-friendly network interface names on Windows. mpr_graph_set_interface()
now only returns success if the interface was actually changed.- Fixes for memory handing of device hostname and url strings.
- Valid length or value arguments are no longer required when filtering a list with the MPR_OP_EX or MPR_OP_NEX operators.
Additional changes include:
- API documentation improvements.
- expression syntax documentation improvments.
- added value-checking to
testspeed.c
- added two tests to the testing suite:
testlist.c
andtestsetiface.c
v2.4.4
We are pleased to announce the release of version 2.4.4 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 on bug fixes, documentation improvements, and improvements to the Python bindings.
Bugfixes and improvements include:
- Fixed bug affecting retrieval-by-index for ordered mpr_lists (e.g. map source signals)
- Fixed bug adjusting link num_maps property on map removal.
- Fixed forwarding of received '/map' messages as 'map/modify' for existing maps in the case where the endpoints are on different devices and process location is MPR_LOC_SRC.
Usability improvements include:
- Revised list property filter to support
MPR_OP_ANY
/MPR_OP_NONE
flags. - Added check for ignoring unknown local map ids during map handshaking.
- Improvements to expression syntax documentation.
- Documentation improvements.
Improvements to the Python bindings include:
- Various fixes for wheel-building CI
- Added script and support files for building distribution for PyPI
- Improvements to object property getters.
- Converted Operator Enum to IntFlag to enable combinations with
MPR_OP_ANY
/MPR_OP_NONE
. - added
__contains__()
method to Object Lists to enable e.g.if key in list
.