Music Form Annotator

Introduction

Music Form Annotator is a tool to simplify the annotation of music form. It consists in a set of forms and converts the provided information into JSON files in a tree structure.

This tool's is still in alpha version and its development started in November 2022.

Tree structure

Music Form Annotator creates a JSON object with metadata and form attributes through a simple form. metadata object contains title, composer and other informations about the piece movement, and form object is a tree structure where the root is the movement and its children are the sections, subsections and phrases.

Each node contains the type (section of phrase) and start and end locations. Section-type nodes contains its name ("Exposition", "First Theme", etc.) and phrase-type contains final chord and cadence info.

Music Form Annotator renders the nodes tree with buttons to simplify edition.

This app also imports JSON data. The user can copy and paste JSON text to JSON output field.

Finally, this app can import music form schemas such as Sonata Form.

Form fields

Metadata fields

  1. Title
  2. Composer
  3. Opus
  4. Number
  5. Movement
  6. Source. The link for the digital score source
  7. Filename. Score source filename
  8. Slug. A slug such as haydn-op50n3-01, for Haydn's Op. 50, number 3, movement 1.

Music form fields

1. Start/end measure and offset

The measure number and the distance from the beginning of the measure.

Offset value must be represented as a fraction or sum of fractions (see table below). The app evaluates fractions sum automatically.

BeatOffset
10
1.251/4
1.51/2
1.753/4 or 1/2+1/4
21
2.51+1/2
32
3.52+1/2
43

2. Type

There are two types of formal units: Section and Phrase. Section units have the "name" attribute and Phrase units have "final chord" and "cadence" attributes.

3. Name

The Section unit's name. Common names are Exposition, Theme 1, Variation 1, Part 1, etc.

4. Final chord

Only Phrase units have final chords. It can be I, i, V, V/V, etc.

5. Cadence

Only Phrase units have cadences. It must be abbreviated:

CadenceAbbreviation
Perfect Authentic CadencePAC
Imperfect Authentic CadenceIAC
Half-CadenceHC
Deceptive CadenceDC
Plagal CadencePC

JSON Syntax

Form Annotator returns a JSON file in a format like this:

{
  "metadata": {
    "title": "String Quartet in E-flat Major",
    "composer": "Joseph Haydn",
    "opus": "50",
    "number": "3",
    "movement": "1",
    "filename": "op50n3-01.krn",
    "slug": "op50n3-01",
    "source": "https://kern.humdrum.org/cgi-bin/ksdata?l=musedata/haydn/quartet&file=op50n3-01.krn&f=kern"
  },
  "form": {
    "name": "Movement",
    "type": "Root",
    "startLocation": "",
    "endLocation": "",
    "finalChord": "",
    "cadence": "",
    "children": [
      {
        "name": "Exposition",
        "type": "Section",
        "startLocation": "0, 5/8",
        "endLocation": "44, 1/2",
        "finalChord": "",
        "cadence": "",
        "children": [
          {
            "name": "Theme 1",
            "type": "Section",
            "startLocation": "0, 5/8",
            "endLocation": "17, 29/56",
            "finalChord": "",
            "cadence": "",
            "children": [
              {
                "name": "",
                "type": "Phrase",
                "startLocation": "0, 3/4",
                "endLocation": "4, 1/2",
                "finalChord": "I",
                "cadence": "IAC",
                "children": []
                },
              {
                "name": "",
                "type": "Phrase",
                "startLocation": "4, 3/4",
                "endLocation": "8, 1/2",
                "finalChord": "I",
                "cadence": "PAC",
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
}