All comparisons

Symbolic comparison

Music representations and theory libraries

Keep musical meaning explicit as representations change.

A pitch-class set, a chord symbol and voiced MIDI notes can describe related music without being interchangeable. Symbolic is a headless library for working across those representations. Compare that job with score analysis, direct theory utilities and research data processing.

Convert a musical value without silently changing its meaning

An editor accepts a chord symbol, a pitch-class set or voiced notes. These representations do not carry the same information: a set has no register, and a chord label can be ambiguous.

Symbolic separates parsing, formatting, transformation and realization. Its supported bridges report context assumptions and losses; check the exact notation pair rather than assuming every conversion is reversible.

Share musical data between an editor, an instrument and an agent

A chord or rhythm needs to remain inspectable data while different tools display it, transform it or turn it into note events.

Headless TypeScript types and functions run without a UI or audio engine. The concept/notation model gives consumers a common representation; playback and device access belong to the host.

Keep arrangement structure editable before rendering notes

Flattening repeats and sections into MIDI events makes later edits to shared musical material harder to express.

SongStructure retains shared material, placements and scoped parameters, then realizes note data with optional expansion budgets. This is a focused authoring model, not a replacement for a full score toolkit.

Symbolic, music21, Tonal.js and Partitura compared by developer task
Developer taskSymbolicHeadless TypeScript representations and transformations; workspace previewmusic21Python toolkit for computational musicology and scoresTonal.jsModular JavaScript music-theory functions; used by SymbolicPartituraPython score and performance data for MIR
Work in a browser music editorShared typed musical dataBrowser, Node and workers; no DOM, transport or synthesis dependency.Use a Python workflowScore objects and analytical tools; browser integration needs an appropriate Python or service layer.Use JavaScript directlyPure functions for notes, intervals, chords, scales, keys, sets, voicings and rhythm helpers.Use a Python data pipelineScore/performance representations, note arrays and pianorolls for research workflows.
Translate musical representationsConcepts, notations and contextParse and transform sets, notes, rhythms and related values; supported bridges report assumptions/losses. Verify each path.Rich score and pitch objectsManipulate notation, pitches, intervals and chords; broad analysis and symbolic-format support.Focused theory conversionsNote/MIDI, interval, chord, scale, set and progression APIs. Often sufficient without another abstraction layer.Score and performance structuresLoad MusicXML, MEI, Humdrum and MIDI; distinguish score timing from performed timing.
Analyze harmony beyond chord namesSets, spaces and transformations12-TET/MIDI-centered core with pitch-class sets and note/point distributions. Not a complete microtonal model.Tonal and post-tonal analysisIncludes Forte set classes and microtonal pitch representation; not confined to traditional tonal harmony.Tonal theory and pitch-class setsChord/scale dictionaries, key relations, set comparisons and voice-leading functions.Extract research featuresStructured note data and score/performance alignment support; a different focus from a theory lookup library.
Choose the right scopeEvaluate a specific representation bridgeLocal workspace package, not publicly published. Python is planned. No engraving, audio analysis or synthesis.Choose score analysis and musicologyEstablished score creation/manipulation and analytical workflow; keep it when that is the problem.Choose direct theory utilitiesPublished npm modules and browser support. Symbolic uses Tonal.js rather than replacing its useful primitives.Choose score/performance datasetsUse for symbolic MIR, feature extraction and alignment rather than browser instrument authoring.

Sources checked October 12, 2026

Where Symbolic Cycle fits

Symbolic Cycle is the Code Sequencer’s live-coding language and a consumer of this library. Its Strudel/TidalCycles lineage describes a pattern-authoring workflow, rather than the scope of Symbolic itself. Read the language guide.

This compares documented scope and current implementation, not measured correctness, speed or developer productivity. Symbolic’s supported conversions need individual fidelity checks. Its core is 12-TET/MIDI-centered; inherited tuning helpers do not establish a general microtonal model. Library publication and a Python API remain future work.