Symbolic

A toolkit for
music theory.

A shared foundation for computing musical relationships.

Symbolic is a broad, flexible toolkit for music information computation. It connects harmony, melody, rhythm and instrument positions through shared concepts and bridges between notations, giving researchers, developers and instrument builders a foundation to work from. The next maruaudio release includes the library through focused package imports. See installation and code examples.

Example applications

  • Chord recommendation

    Chord suggestions based on melody, tonal context and harmonic constraints.

  • Pitch detection tools

    Musical interpretation of detected frequencies as notes, tuning offsets and pitch classes.

  • Melodic structure

    Analysis of contours, recurring motifs and phrases across keys and registers.

  • Harmonic tension

    Measures of tension as chord qualities, chromaticism and voicings change.

  • Rhythm across genres

    Comparison of onsets, accents, repetition and syncopation across genres.

  • Instrument voicings

    Chord voicing computation for guitar strings and frets, pad grids and other layouts.

A connected model of musical concepts

Symbolic aims to map musical concepts and the many ways people describe them, making those relationships useful in software. Its model connects note names, MIDI numbers, chord symbols, rhythmic patterns and physical positions, with room to extend it.

  1. 01

    Representations

    Each musical concept has a typed representation and notations that describe it.

  2. 02

    Relationships

    A note adds register to a pitch class; a melody brings pitches and rhythm together.

  3. 03

    Conversions

    Bridges connect representations with explicit context and a record of what changes or is lost.

  4. 04

    Composition

    Plain musical data and composable functions support analysis, models, editors and instruments.

Built with Symbolic / Code Sequencer

Musical structure as code

Code Sequencer uses Symbolic Cycle to express chords, melodies, rhythms and song forms as code. Patterns can be transformed, analyzed and played through an instrument.

For musicians drawn to the mathematics of their patterns, it is a place to experiment. For tool builders, it is also an intermediate language: a way to distill songs into reusable structures, transform patterns and build instruments around them.

A progression, expressed as relationships

roman("<I V vi IV>")
  .key("C:major")
The harmonic pattern retains its relationships across key changes and can form part of a larger musical structure.

An invitation to researchers

Research collaboration

Maru is actively seeking research collaborators in music theory, music information retrieval and musical interaction. Collaboration can extend the toolkit with new representations, datasets, analysis methods and research questions.

Collaboration enquiries

Implementation and language bridges

Symbolic is primarily implemented in TypeScript, with experimental bridges for Python and C. Its musical values are plain data, ready to connect analysis pipelines, interfaces and other tools.

The core currently centers on twelve-tone equal temperament, with helpers for frequency, cents and tuning. It models musical information; audio processing and playback belong to the tools built around it.

60 musical concepts mapped

Melody

6 concepts

Data & Analysis

9 concepts

Additional concepts

Symbolic is a work in progress. Its concepts, notations and bridges are still being expanded and refined.