Skip to content

Releases: libmapper/libmapper

v2.5.2

05 Mar 01:39

Choose a tag to compare

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_UNKNOWN property constant.
  • Ensured mpr_value instances 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_maps when 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 inline keyword for Signal::instances() method.

Python bindings:

  • Updated documentation, tests, and examples.

CI:

  • CI/Windows: install Python setuptools

v2.5.1

20 Dec 02:06

Choose a tag to compare

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

17 Dec 19:59

Choose a tag to compare

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() and diff() functions.
  • Added prime notation for diff() function.
  • Fixed behaviour of emd() function.
  • Ensure weight argument for ema() and emd() 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

22 Sep 18:35

Choose a tag to compare

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_ACTIVE bitflag.
  • Added helper function mpr_obj_get_prop_as_dbl() to public API.
  • Enabled casting from MPR_TIME type to other typed property getters.
  • Internal improvements to the mpr_bitflags and mpr_value data structures and methods.
  • Added local bundle handling as a message destination to network.c for 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() and reverse() 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 to testprops.c
  • Reversed configuration order in testconvergent.c to 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 powf and int overflows in testparser.c.
  • Use polling arg -1 when running testconvergent.c in fast mode.
  • Added configuration to testconvergent.c to test per-element convergent mapping.
  • Fixed naming in several tests.

v2.4.13

18 Oct 17:06

Choose a tag to compare

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

14 Sep 13:39

Choose a tag to compare

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

12 Sep 12:42

Choose a tag to compare

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

22 Aug 01:04

Choose a tag to compare

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

31 Jul 20:11

Choose a tag to compare

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 calling mpr_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

25 Jul 19:09

Choose a tag to compare

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.