ThinkMeta Software releases part of its own work as open-source libraries and tools
for .NET and C++.
ThinkMeta.Devices.Bluetooth
A .NET library for discovering, connecting to and controlling Bluetooth Low
Energy fitness equipment and heart-rate sensors. It implements the Bluetooth
SIG Fitness Machine Service (FTMS) – the open GATT
profile that treadmills, indoor bikes, rowers, cross trainers and stair
climbers use to report live data (speed, incline, cadence, power,
distance …) and to accept remote-control commands (set speed,
incline or resistance; start and stop). Heart-rate monitors are supported
through the standard Heart Rate GATT profile.
The library is split into platform-neutral packages – shared
scanners, data models and byte-level parsers – with concrete
implementations for Windows (native WinRT BLE) and
.NET MAUI. The parsers can also decode raw GATT
characteristic bytes without a device connection. A native
Android implementation is in progress. Requires .NET 10.
GitHub
ThinkMeta.Music.Notation.Smufl
Reader and code generator for SMuFL (Standard Music Font
Layout) – the W3C Music Notation Community Group specification that
maps the several thousand symbols of Western music notation onto Unicode
Private Use Area code points, so a single font such as Bravura covers
clefs, noteheads, accidentals, articulations and more.
The metadata package parses SMuFL's classes.json,
glyphnames.json and ranges.json as well as
per-font metadata (glyph bounding boxes, anchor points, engraving
defaults). A companion package exposes the same data as generated .NET
types – glyph enums, descriptions, code points and alternates
– and a separate reader loads SMuFL SVG fonts. A basis for score
renderers, font tooling and notation editors on .NET.
GitHub
ThinkMeta.CodeAnalysis
A Roslyn analyzer package for C# that flags a small set of
high-signal issues and fixes them automatically in the IDE or on build
(targets .NET Standard 2.0, so it works across project types):
- TM0001 –
== null /
!= null rewritten to is null /
is not null, aware of expression trees, LINQ query syntax
and Razor-generated code.
- TM0002 – a
Clone() method that
forgets to copy a settable property; the code fix inserts every missing
assignment in one edit.
- TM0003 – a
Clone() method that
shallow-copies a reference-type property, catching the silent aliasing
bug.
A companion Annotations package provides
[CloneIgnore] to exclude specific properties per method or per
assembly.
GitHub