{
  "version": 18,
  "app": "music",
  "status": "Standalone prototype; not deployed or registered",
  "limits": {
    "tracks": 16,
    "totalNotes": 4096,
    "undoSnapshots": 24,
    "voices": 64,
    "heldInputs": 24,
    "sustainSeconds": 8,
    "importBytes": 2000000,
    "decodedSampleBytes": 100663296,
    "customFileBytes": 8388608,
    "customDurationSeconds": 8,
    "customLibraryBytes": 33554432,
    "customPresetCount": 16,
    "customBundleBytes": 48234496
  },
  "instruments": [
    {
      "id": "acoustic",
      "name": "Acoustic guitar",
      "family": "frets",
      "controls": "Playable individual strings/frets 0-5; guitar/ukulele C/G/Am/F chord buttons, SVG shapes and finger numbers (bass: individual notes only)",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "guitar/ukulele chord positions; suggested fingers; bass fret pitches only",
        "source": "https://hub.yamaha.com/music-educators/instruments/guitars-education/teach-guitar-chords/"
      },
      "incomplete": "Frets 0–5, four guitar/ukulele chords; no full chord library or physical-technique grading.",
      "samplePresets": [
        {
          "id": "nylon-v1",
          "name": "Spanish classical — nylon",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Guitar/acoustic-guitar.html",
          "sha256": "c8fbb4681c7142a1865c808ca3ebc225ce01044364df799decce8f9bba5a584c",
          "bytes": 19817028,
          "range": [
            29,
            88
          ]
        },
        {
          "id": "shiny-mic-short-v1",
          "name": "Shinyguitar archtop microphone - 3s takes",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://shop.karoryfer.com/pages/free-shinyguitar",
          "sha256": "fd5c68dc96c84385e887e808442a52b8f24a4e9f57390dedfaccf195d5214278",
          "bytes": 12702912,
          "range": [
            39,
            73
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "New Fashionbass/Shinyguitar takes are capped at 3 seconds, first round robin only, with original velocity/key zones. Archtop microphone is not a steel-string dreadnought. Fashionbass source used CGDA fifths tuning; sampled concert pitches do not change the app EADG bass lesson geometry. Publisher GUI effects/velocity curves/release noises are not emulated."
    },
    {
      "id": "electric",
      "name": "Electric guitar",
      "family": "frets",
      "controls": "Playable individual strings/frets 0-5; guitar/ukulele C/G/Am/F chord buttons, SVG shapes and finger numbers (bass: individual notes only)",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "guitar/ukulele chord positions; suggested fingers; bass fret pitches only",
        "source": "https://hub.yamaha.com/music-educators/instruments/guitars-education/teach-guitar-chords/"
      },
      "incomplete": "Frets 0–5, four guitar/ukulele chords; no full chord library or physical-technique grading.",
      "samplePresets": [
        {
          "id": "shiny-electric-short-v1",
          "name": "Shinyguitar archtop pickup - 3s takes",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://shop.karoryfer.com/pages/free-shinyguitar",
          "sha256": "8543dd60fecb4aa3c603bdec0a9ee0918354073550a844b3627b05ba0d9b1d57",
          "bytes": 12702912,
          "range": [
            39,
            73
          ]
        },
        {
          "id": "shiny-mic-short-v1",
          "name": "Shinyguitar archtop microphone - 3s takes",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://shop.karoryfer.com/pages/free-shinyguitar",
          "sha256": "fd5c68dc96c84385e887e808442a52b8f24a4e9f57390dedfaccf195d5214278",
          "bytes": 12702912,
          "range": [
            39,
            73
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "New Fashionbass/Shinyguitar takes are capped at 3 seconds, first round robin only, with original velocity/key zones. Archtop microphone is not a steel-string dreadnought. Fashionbass source used CGDA fifths tuning; sampled concert pitches do not change the app EADG bass lesson geometry. Publisher GUI effects/velocity curves/release noises are not emulated."
    },
    {
      "id": "bass",
      "name": "Bass",
      "family": "frets",
      "controls": "Playable individual strings/frets 0-5; guitar/ukulele C/G/Am/F chord buttons, SVG shapes and finger numbers (bass: individual notes only)",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "guitar/ukulele chord positions; suggested fingers; bass fret pitches only",
        "source": null
      },
      "incomplete": "Frets 0–5, four guitar/ukulele chords; no full chord library or physical-technique grading.",
      "samplePresets": [
        {
          "id": "fashionbass-clean-short-v1",
          "name": "Fashionbass neck pickup - 3s takes",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://shop.karoryfer.com/pages/free-fashionbass",
          "sha256": "701f425b4dbede8557eff01517d507a9d13aa742b0989d50156e3e5875c16c87",
          "bytes": 11908980,
          "range": [
            28,
            54
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "New Fashionbass/Shinyguitar takes are capped at 3 seconds, first round robin only, with original velocity/key zones. Archtop microphone is not a steel-string dreadnought. Fashionbass source used CGDA fifths tuning; sampled concert pitches do not change the app EADG bass lesson geometry. Publisher GUI effects/velocity curves/release noises are not emulated."
    },
    {
      "id": "ukulele",
      "name": "Ukulele",
      "family": "frets",
      "controls": "Playable individual strings/frets 0-5; guitar/ukulele C/G/Am/F chord buttons, SVG shapes and finger numbers (bass: individual notes only)",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "guitar/ukulele chord positions; suggested fingers; bass fret pitches only",
        "source": "https://www.lunaguitars.com/pdf/Uke-Chord-Chart.pdf"
      },
      "incomplete": "Frets 0–5, four guitar/ukulele chords; no full chord library or physical-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "piano",
      "name": "Piano",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [
        {
          "id": "kw-upright-v1",
          "name": "Upright KW",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Piano/acoustic-grand-piano.html",
          "sha256": "a1aac2be75911e320e7c3c9dbef91befcb9f106c357302c92ecfc16b2a448d57",
          "bytes": 9452994,
          "range": [
            21,
            108
          ]
        },
        {
          "id": "kw-bright-v1",
          "name": "Upright KW — bright",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Piano/acoustic-grand-piano.html",
          "sha256": "2dd7a92bd256fcc996bc55f5ef5b4e2acad8d560003a9518c9cb500ac2c06f85",
          "bytes": 9434974,
          "range": [
            21,
            108
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "keyboard",
      "name": "Keyboard",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [
        {
          "id": "kw-upright-v1",
          "name": "Upright KW",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Piano/acoustic-grand-piano.html",
          "sha256": "a1aac2be75911e320e7c3c9dbef91befcb9f106c357302c92ecfc16b2a448d57",
          "bytes": 9452994,
          "range": [
            21,
            108
          ]
        },
        {
          "id": "kw-bright-v1",
          "name": "Upright KW — bright",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Piano/acoustic-grand-piano.html",
          "sha256": "2dd7a92bd256fcc996bc55f5ef5b4e2acad8d560003a9518c9cb500ac2c06f85",
          "bytes": 9434974,
          "range": [
            21,
            108
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "organ",
      "name": "Organ",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "epiano",
      "name": "Electric piano",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "synth",
      "name": "Synth",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "pad",
      "name": "Pad",
      "family": "keys",
      "controls": "Chromatic octave, octave shift and five-finger C-G hints",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "C-position five-finger exercise hints",
        "source": "https://app.hoffmanacademy.com/lessons/piano/finger-numbers/video/"
      },
      "incomplete": "One chromatic octave with octave shift; basic finger hints, no full two-hand curriculum or sustain pedal.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "tambourine",
      "name": "Tambourine",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "shaker",
      "name": "Shaker",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [
        {
          "id": "shaker-short-v1",
          "name": "FreePats electronic shaker — short",
          "kind": "recorded-synth",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Percussion/electric-percussion.html",
          "sha256": "cab5dd79eacf57765b9db2299e6d895649d177243f16564422326ac241ece39f",
          "bytes": 8663,
          "range": [
            70,
            70
          ]
        },
        {
          "id": "shaker-long-v1",
          "name": "FreePats electronic shaker — long",
          "kind": "recorded-synth",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Percussion/electric-percussion.html",
          "sha256": "c1a940c0e2c26d136ca2b28c16d540cfaccb6ae5d46606ad666aa9c77f08b701",
          "bytes": 24089,
          "range": [
            70,
            70
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "cajon",
      "name": "Cajon",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "bongos",
      "name": "Bongos",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "congas",
      "name": "Congas",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "xylophone",
      "name": "Xylophone",
      "family": "mallets",
      "controls": "Named diatonic bars with octave shift",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "One diatonic octave; no sticking or physical-technique grading.",
      "samplePresets": [
        {
          "id": "xylophone-medium-v1",
          "name": "Xylophone - medium mallets",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/ChromaticPercussion/xylophone.html",
          "sha256": "4a4a4d1eb31347a23ae674613e3b9a56660351ddb96926c7fb8f8c3f199d9c31",
          "bytes": 6358512,
          "range": [
            46,
            99
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimit": "Medium mallets, original SFZ range MIDI 46-99, soft velocity 1-83 and strong 84-127. Original samples unchanged. Existing engine release cap is 3 seconds rather than the source SFZ 15-second release."
    },
    {
      "id": "marimba",
      "name": "Marimba",
      "family": "mallets",
      "controls": "Named diatonic bars with octave shift",
      "timbre": "Recorded University of Iowa MIS bank under explicit unrestricted-use publisher permission (not CC0), plus legacy synthesized and personal WAV choices.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "One diatonic octave; no sticking or physical-technique grading.",
      "samplePresets": [
        {
          "id": "iowa-marimba-ff-v1",
          "name": "Iowa marimba - yarn ff, up to 4s",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISMarimba2012.html",
          "sha256": "e017b31f13cf95f0367ab13dcabec82d264f08f9cc3ef2fe3811d41161ed5544",
          "bytes": 4041492,
          "range": [
            60,
            72
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Exact concert-pitch keys only within the displayed range; one fortissimo recording per key. Velocity changes level, not recorded dynamics. Up to 4 seconds, no sustain loops. Solo bowed strings, non-vibrato winds, yarn-mallet marimba. Source onset trimmed with recorded frame offsets; PCM24 converted to PCM16 without resampling, pitch correction or normalization. Source string choices do not assert matching physical UI fingering."
    },
    {
      "id": "glockenspiel",
      "name": "Glockenspiel",
      "family": "mallets",
      "controls": "Named diatonic bars with octave shift",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "One diatonic octave; no sticking or physical-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "drumkit",
      "name": "Drum kit",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "machine",
      "name": "Drum machine / pads",
      "family": "drums",
      "controls": "Named percussion/drum components with fixed MIDI identity",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Unavailable: no percussion/drum-identity scoring",
      "fingering": {
        "status": "virtual component/bar mappings; physical technique not graded",
        "source": null
      },
      "incomplete": "Synthesized fixed pads; no imported samples, acoustic drum recognition or stroke-technique grading.",
      "samplePresets": [
        {
          "id": "electronic-kit-a-v1",
          "name": "Electronic kit A (6 pads; no cymbal/cowbell)",
          "kind": "recorded-synth",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Percussion/electric-percussion.html",
          "sha256": "19336c4deb86200815f74c025d1156132f90099f24fa95f8eeb580f6a88c8cac",
          "bytes": 349530,
          "range": [
            36,
            50
          ]
        },
        {
          "id": "electronic-kit-b-v1",
          "name": "Electronic kit B (6 pads; no cymbal/cowbell)",
          "kind": "recorded-synth",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Percussion/electric-percussion.html",
          "sha256": "eaf56b94435d051dc9e8ed994c69ea896fd70075017b44476c1a8d8e860fb35e",
          "bytes": 408219,
          "range": [
            36,
            50
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimit": "Electronic kits A/B map MIDI 36,38,39,42,46,50 only. No regions for 49 (crash) or 56 (cowbell); those notes produce an explicit sample-range error, never another sound. Publisher-recorded synthesized percussion, not an acoustic drum kit."
    },
    {
      "id": "violin",
      "name": "Violin",
      "family": "bowed",
      "controls": "String rows and semitone pitch offsets; schematic spacing",
      "timbre": "Recorded University of Iowa MIS bank under explicit unrestricted-use publisher permission (not CC0), plus legacy synthesized and personal WAV choices.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "open-string pitch references; stopped-note spacing unverified",
        "source": "https://www.yamaha.com/en/musical_instrument_guide/violin/mechanism/mechanism002.html"
      },
      "incomplete": "Strings and semitone pitch positions; no verified finger spacing, bow technique or articulation engine.",
      "samplePresets": [
        {
          "id": "iowa-violin-ff-v1",
          "name": "Iowa solo violin - arco ff, up to 4s",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISViolin2012.html",
          "sha256": "8bce7050eb70cf1ace58713b96a51c6ab77f744fcebf0444120ad7c6c93cd621",
          "bytes": 10815892,
          "range": [
            55,
            76
          ]
        },
        {
          "id": "iowa-violin-full-ff-v2",
          "name": "Iowa solo violin - full takes ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISViolin2012.html",
          "sha256": "ef2f9255f05e395268cb3e39aec397750c0052b97c845a0f78de8776a8753bee",
          "bytes": 10984920,
          "range": [
            55,
            76
          ]
        },
        {
          "id": "iowa-violin-middle-pp-ff-v1",
          "name": "Iowa solo violin - middle pp / ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MISviolin2012.html",
          "sha256": "a4772481a99721e41797e07a7492198557699f397178e14359d67f2c58143aa5",
          "bytes": 17035652,
          "range": [
            60,
            67
          ],
          "dynamicLayers": [
            "pp",
            "ff"
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Both original up-to-4s and separate full-take ff presets remain available. Full version retains source duration, maximum 4.685s, same exact concert pitch range, 40ms end fade, no sustain loops. One recorded fortissimo layer; velocity only changes level. No bow/breath/legato simulation or physical-technique claim. Separate iowa-violin-middle-pp-ff-v1 has genuine pp/ff recordings, exact concert pitches C4–G4, no transposed extension. Velocity 1–63/64–127 selects original pp/ff; hard note-on boundary, no crossfade."
    },
    {
      "id": "cello",
      "name": "Cello",
      "family": "bowed",
      "controls": "String rows and semitone pitch offsets; schematic spacing",
      "timbre": "Recorded University of Iowa MIS bank under explicit unrestricted-use publisher permission (not CC0), plus legacy synthesized and personal WAV choices.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "open-string pitch references; stopped-note spacing unverified",
        "source": "https://hub.europe.yamaha.com/articles/the-essential-cello"
      },
      "incomplete": "Strings and semitone pitch positions; no verified finger spacing, bow technique or articulation engine.",
      "samplePresets": [
        {
          "id": "iowa-cello-ff-v1",
          "name": "Iowa solo cello - arco ff, up to 4s",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISCello2012.html",
          "sha256": "f615ee0b1c25b047e442d400de27dd4ef1c0fb005e518645647a6d1baa91741b",
          "bytes": 17332620,
          "range": [
            36,
            60
          ]
        },
        {
          "id": "iowa-cello-full-ff-v2",
          "name": "Iowa solo cello - full takes ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISCello2012.html",
          "sha256": "de4d471bee42d74e1979236c40be5b47631d80d88a25b7d1e23a5bd0285a7354",
          "bytes": 21885732,
          "range": [
            36,
            60
          ]
        },
        {
          "id": "iowa-cello-low-pp-ff-v1",
          "name": "Iowa solo cello - low pp / ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIScello2012.html",
          "sha256": "52c0e52b7e244f740c2574c1b40d317d6347a62bd2daa7e892f77231c2548fee",
          "bytes": 19861580,
          "range": [
            36,
            43
          ],
          "dynamicLayers": [
            "pp",
            "ff"
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Both original up-to-4s and separate full-take ff presets remain available. Full version retains source duration, maximum 7.493s, same exact concert pitch range, 40ms end fade, no sustain loops. One recorded fortissimo layer; velocity only changes level. No bow/breath/legato simulation or physical-technique claim. Separate iowa-cello-low-pp-ff-v1 has genuine pp/ff recordings, exact concert pitches C2–G2, no transposed extension. Velocity 1–63/64–127 selects original pp/ff; hard note-on boundary, no crossfade."
    },
    {
      "id": "strings",
      "name": "String ensemble",
      "family": "bowed",
      "controls": "String rows and semitone pitch offsets; schematic spacing",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "open-string pitch references; stopped-note spacing unverified",
        "source": null
      },
      "incomplete": "Strings and semitone pitch positions; no verified finger spacing, bow technique or articulation engine.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "flute",
      "name": "Flute",
      "family": "wind",
      "controls": "Concert-pitch note pads plus verified limited model/register-specific fingering subsets",
      "timbre": "Recorded University of Iowa MIS bank under explicit unrestricted-use publisher permission (not CC0), plus legacy synthesized and personal WAV choices.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": 0,
        "entries": 3,
        "source": "https://www.yamaha.com/en/musical_instrument_guide/common/images/flute/fingering.pdf",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "Concert-pitch pads plus verified limited manufacturer fingering subsets with written/concert display. Alternate systems, extended registers and physical technique remain incomplete.",
      "samplePresets": [
        {
          "id": "iowa-flute-ff-v1",
          "name": "Iowa flute - non-vibrato ff, up to 4s",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISFlute2012.html",
          "sha256": "be479eeb606ab9a0946475be12840d1dd82d677ef8014423cdf03f0e4379514f",
          "bytes": 5872440,
          "range": [
            60,
            72
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Exact concert-pitch keys only within the displayed range; one fortissimo recording per key. Velocity changes level, not recorded dynamics. Up to 4 seconds, no sustain loops. Solo bowed strings, non-vibrato winds, yarn-mallet marimba. Source onset trimmed with recorded frame offsets; PCM24 converted to PCM16 without resampling, pitch correction or normalization. Source string choices do not assert matching physical UI fingering."
    },
    {
      "id": "clarinet",
      "name": "Clarinet",
      "family": "wind",
      "controls": "Concert-pitch note pads plus verified limited model/register-specific fingering subsets",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": -2,
        "entries": 5,
        "source": "https://www.yamaha.com/en/musical_instrument_guide/common/images/clarinet/fingering.pdf",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "Concert-pitch pads plus verified limited manufacturer fingering subsets with written/concert display. Alternate systems, extended registers and physical technique remain incomplete.",
      "samplePresets": [
        {
          "id": "clarinet-dence-v1",
          "name": "Dence clarinet - sustained",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Reed/clarinet.html",
          "sha256": "ef32f0394135f1ad68e90541a282b609bbab6aa0c6a9c9f6e5a837022700f32a",
          "bytes": 7392546,
          "range": [
            45,
            91
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "saxophone",
      "name": "Saxophone",
      "family": "wind",
      "controls": "Concert-pitch note pads plus verified limited model/register-specific fingering subsets",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": -9,
        "entries": 3,
        "source": "https://www.yamaha.com/en/musical_instrument_guide/saxophone/play/play002.html",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "Concert-pitch pads plus verified limited manufacturer fingering subsets with written/concert display. Alternate systems, extended registers and physical technique remain incomplete.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "trumpet",
      "name": "Trumpet",
      "family": "wind",
      "controls": "Concert-pitch note pads plus verified limited model/register-specific fingering subsets",
      "timbre": "Recorded University of Iowa MIS bank under explicit unrestricted-use publisher permission (not CC0), plus legacy synthesized and personal WAV choices.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": -2,
        "entries": 8,
        "source": "https://www.yamaha.com/en/musical_instrument_guide/common/images/trumpet/fingering.pdf",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "Concert-pitch pads plus verified limited manufacturer fingering subsets with written/concert display. Alternate systems, extended registers and physical technique remain incomplete.",
      "samplePresets": [
        {
          "id": "iowa-trumpet-ff-v1",
          "name": "Iowa Bb trumpet - non-vibrato ff, up to 4s",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISBbTrumpet2012.html",
          "sha256": "3c87da179e93074272a481365d5a3f6b0e9c389050b1eaa26dc9d5600b71ebe3",
          "bytes": 10584660,
          "range": [
            58,
            72
          ]
        },
        {
          "id": "iowa-trumpet-full-ff-v2",
          "name": "Iowa Bb trumpet - full takes ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MIS-Pitches-2012/MISBbTrumpet2012.html",
          "sha256": "3e01bef67b70547f333640f75bdcaeed408d2be5e258887d6333da60fd60c806",
          "bytes": 11376064,
          "range": [
            58,
            72
          ]
        },
        {
          "id": "iowa-trumpet-middle-pp-ff-v1",
          "name": "Iowa Bb trumpet - middle pp / ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MISBbtrumpet.html",
          "sha256": "9660f0b324385d6fb1db613f594b4063e2be480ca1c580885b3ef59f4376d91f",
          "bytes": 6216158,
          "range": [
            60,
            67
          ],
          "dynamicLayers": [
            "pp",
            "ff"
          ]
        },
        {
          "id": "iowa-trumpet-high-pp-ff-v1",
          "name": "Iowa Bb trumpet - high pp / ff",
          "kind": "recorded",
          "license": "Iowa MIS unrestricted use",
          "source": "https://theremin.music.uiowa.edu/MISBbtrumpet.html",
          "sha256": "cae230667b5aa0123fec36c234c4bfebde1c12aa899cd4474c8a125934d01f22",
          "bytes": 9482556,
          "range": [
            72,
            83
          ],
          "dynamicLayers": [
            "pp",
            "ff"
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Both original up-to-4s and separate full-take ff presets remain available. Full version retains source duration, maximum 4.463s, same exact concert pitch range, 40ms end fade, no sustain loops. One recorded fortissimo layer; velocity only changes level. No bow/breath/legato simulation or physical-technique claim. Separate iowa-trumpet-middle-pp-ff-v1 has genuine pp/ff recordings, exact concert pitches C4–G4, no transposed extension. Velocity 1–63/64–127 selects original pp/ff; hard note-on boundary, no crossfade. Separate iowa-trumpet-high-pp-ff-v1 has genuine pp/ff recordings, exact concert pitches C5–B5, no transposed extension. Velocity 1–63/64–127 selects original pp/ff; hard note-on boundary, no crossfade."
    },
    {
      "id": "harmonica",
      "name": "Harmonica",
      "family": "breath",
      "controls": "C-diatonic holes 1-4, separate blow/draw",
      "timbre": "Legacy synthesized approximation plus personal local WAV presets; no bundled recorded bank yet.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": 0,
        "entries": 20,
        "source": "https://hohner.de/fileadmin/documents/instruments/harmonicas/2025_tuning_chart.pdf",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "C diatonic holes 1–4 blow/draw; no bends, full 10-hole range or breath technique.",
      "samplePresets": [],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning."
    },
    {
      "id": "recorder",
      "name": "Recorder",
      "family": "wind",
      "controls": "Concert-pitch note pads plus verified limited model/register-specific fingering subsets",
      "timbre": "Selectable CC0 recorded banks plus explicit legacy synthesized approximation; personal local WAV presets supported. Preset ranges are bounded and out-of-range notes fail visibly without substitution.",
      "lessons": "four graded original CC0 stages (pulse/rests, pitch changes, eighth-note rhythm, phrase/chord/groove), plus saved-track practice",
      "scoring": "virtual / MIDI pitch identity + onset timing; no physical technique or duration grading",
      "microphone": "Conditional experimental onset/pitch grading only: isolated C3-A5 tones with strong fundamentals, no overlapping targets, >=300ms onset spacing and >=60ms played silence. Runtime eligibility gates each lesson/saved part; not instrument recognition. Physical hardware unverified.",
      "fingering": {
        "status": "verified limited subset, explicit model/register assumptions",
        "writtenToConcertSemitones": 12,
        "entries": 8,
        "source": "https://www.yamaha.com/en/musical_instrument_guide/common/images/recorder/fingering_baroque.pdf",
        "unverified": "alternate systems, extended registers, shifted octaves and physical technique"
      },
      "incomplete": "Concert-pitch pads plus verified limited manufacturer fingering subsets with written/concert display. Alternate systems, extended registers and physical technique remain incomplete.",
      "samplePresets": [
        {
          "id": "wooden-recorder-1-v1",
          "name": "Venus wooden recorder - take 1",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Wind/recorder.html",
          "sha256": "982106dac77f3c41d476cbeb2a064a83c648b22c243f584ce5fa06fa7fc0ab31",
          "bytes": 5992690,
          "range": [
            69,
            100
          ]
        },
        {
          "id": "wooden-recorder-2-v1",
          "name": "Venus wooden recorder - take 2",
          "kind": "recorded",
          "license": "CC0-1.0",
          "source": "https://freepats.zenvoid.org/Wind/recorder.html",
          "sha256": "1fe7422f18c2e28b6a3f90c8af6d3db5d52d19a115964f45efba36e07546ce85",
          "bytes": 6766180,
          "range": [
            69,
            100
          ]
        }
      ],
      "customAudio": "Local user PCM WAV preset, explicit root note with up to +/-24 semitone rate transposition, or one named pad for percussion. Instrument identity/lessons are unchanged; custom audio does not verify physical fingering or tuning.",
      "sampleLimits": "Publisher wooden Venus recorder N1/N2 takes, MIDI 69-100 only, original loops. Publisher physical model/fingering system unspecified; preset choice does not validate or change the explicitly labeled lesson fingering system."
    }
  ],
  "capabilities": {
    "multitrack": "actual virtual/MIDI note recording; overdub; loop; volume/mute/solo; note edit/delete; undo/redo; explicit local save/open; JSON import/export; standard MIDI export; stereo sampled PCM WAV export; per-track tone selection",
    "practice": "50%, 75%, 100%; repeated scored loops; saved-track targets with other tracks as backing; wait for correct pitch without recording/timing score",
    "performance": "uninterrupted timed run, pitch/onset score, misses and wrong-input penalty",
    "notation": "synchronized 4/4 staff, bars, beat/subdivision counts, rests, half/quarter/eighth values for generated exercises; moving playhead; written/concert switch; arbitrary recordings retain timing bars rather than invented formal values",
    "microphone": "Opt-in local experimental monophonic pitch/onset grading with strict eligibility and confidence gates; no chords/drums/technique grading. Hardware unverified; see MIC-VALIDATION.md.",
    "midi": "explicit request with sysex disabled; note-on/off, all-notes-off, disconnect cleanup; sustain CC and device selection incomplete",
    "languages": "12 locale routes with core/learning and custom controls, detailed limits, rights reminders and actionable custom errors. Native-language review pending.",
    "samples": "26 recorded presets across 15 of29 variants, unchanged IDs/assets. Project-aware note/layer preloading; active instrument fully loaded for arbitrary live input, background/export only actual required samples. Per-sample LRU and voice pins, transactional cancellation and admission before audio fetch. Unchanged96 MiB decoded PCM budget includes staged buffers. Oversized required sets reject explicitly; no fallback or real-time note-on fetching. Canonical44.1kHz decode when OfflineAudioContext exists.",
    "exports": "Standard JSON retains tone IDs/hashes and custom-audio bundles. WAV uses the same note/layer engine and canonical sample cache. Native polyphonic repeats can differ by one PCM16 step, also observed with the unchanged previous mixer; byte-identical WAVs are not guaranteed. No changes to notes/scoring/timing tolerances. MIDI does not embed tones.",
    "pedagogy": "All 29 instruments receive four original graded stages. Guitar/ukulele phrases teach chord changes, percussion phrases layer component rhythms, bowed lessons use open strings. Grades assess pitch/onset only. Unison targets deduplicated without modifying saved source notes.",
    "sourceAudit": "reports/music/LEARNING-AUDIT.md; research chart files are private reference material, not deployed assets",
    "integration": "Claude owns deployment, logging review and shelf registration; untouched",
    "customSamples": "Implemented local-only PCM WAV import: mono/stereo, integer PCM 8/16/24/32-bit, 8-96 kHz, 0.05-8 s and <=8 MiB. Header validation precedes native decode; trim baked into canonical PCM16/44.1 kHz. Explicit root or single named pad, held/one-shot, preview excluded from scoring/recording. Immutable content/mapping identity, IndexedDB, archive/restore (no permanent delete), portable project/audio bundle with integrity checks. No compressed/float WAV, MP3, AAC, automatic tuning, loop editor or multi-sample custom bank. Browser file-picker acceptance remains unverified due unresolved approval/transport interruption; native backend tests passed.",
    "sampleQuality": "Four genuine pp/ff banks: cello C2–G2, violin C4–G4, trumpet C4–G4 and C5–B5. Preserved source levels, exact roots, no loop/pitch correction/normalization. Note-on velocity 1–63 pp / 64–127 ff; additional velocity amplitude scaling remains. New 12-language virtual/audition strength control and recorded-note strength display. Prior full-take ff variants retain wider cello/violin ranges. Natural take lengths/noise/tuning vary; held notes capped at 8s plus release. No new flute/marimba dynamics.",
    "rangeMatrix": "reports/music/dynamics-1/RANGE-MATRIX.md and range-matrix.json distinguish recorded roots, playable maps and existing source-key-zone transposition. New Iowa dynamics use no pitch shifting. Higher trumpet fingering remains explicitly unverified.",
    "sampleMemory": "Verified four-part pp/ff song:37,899,540 decoded bytes(36.14 MiB), or62,306,244 bytes(59.42 MiB) with active cello fully playable. All72 samples still require105,185,556 bytes and fail admission. Native cache pressure reached99,146,516 bytes(94.55 MiB) while protecting live/future voice buffers. See reports/music/memory-1/IMPLEMENTATION.md."
  },
  "sampleCoverageGaps": [
    "No bundled recorded bank for Ukulele, Organ, Electric piano, Synth, Pad, Tambourine, Cajon, Bongos, Congas, Glockenspiel, Drum kit, String ensemble, Saxophone, Harmonica. Source availability is distinct from completed integration.",
    "String ensemble remains absent: solo string recordings are not labeled as ensemble. Glockenspiel remains absent: Iowa Bells physical identity/model was not established in this pass.",
    "No grand piano, steel-string folk guitar or acoustic drum kit. Shinyguitar is archtop pickup/microphone with 3-second takes; Iowa v1 banks have up to 4-second takes; separate full-take cello/violin/trumpet variants are now available. Electronic machine kits retain six mapped pads.",
    "Restricted VSCO/VCSL and other prior download/mapping targets remain untouched; exact list in reports/music/catalog-expansion-2/DENIED-REQUESTS.md. Iowa is an independent original recording source.",
    "Karoryfer cello remains held for the prior octave ambiguity; the new independent Iowa cello uses its own verified source pitches. Philharmonia prohibits sampler redistribution; Terkelsen marimba lacked an explicit repository license; String Cyborgs is a processed synth library, not clean orchestral coverage.",
    "User sample and malformed-project picker outcomes remain uncertain and untouched; native backend tests do not establish picker approval. Custom PCM WAV restrictions, archive retention and hardware-unverified status remain unchanged."
  ],
  "sequentialLayerVerification": {
    "report": "reports/music/layers-1/IMPLEMENTATION.md",
    "nodeTests": "87/87",
    "nativeChecks": "14/14",
    "behavior": "One selected live instrument; changing instrument after recording creates a distinct empty track; Free play retains backing parts.",
    "uiNotes": [
      3,
      10,
      4
    ],
    "limitsUnchanged": true,
    "hardwareVerified": false
  },
  "rhythmGame": {
    "implemented": "Separate tab; 12 original 16-bar verses, four distinct phrases and cadence, 46.83-60 seconds; 4 arranged parts per song; Easy/Standard density differences; song cards; 29-family exercises separate; saved Studio-note practice; strict actual-input parts, backing, pause/retry, combo/timing/results, isolated local collections, safe Studio append",
    "provenance": "Mellow original compositions and independent arrangements, CC0-1.0. No third-party song or recording incorporated in score catalog. Existing tone licenses remain separate.",
    "scoring": "Pitch/onset thresholds unchanged; misses and wrong inputs retained; section/wait practice do not create performance layers; recorded is not passed",
    "limits": "16 parts / 4096 notes per song, 3 MiB local catalog; virtual input in game; no physical technique grading, no mid-sustain reconstruction on resume; no arbitrary song memory-fit promise",
    "tests": "129 Node regressions; 14 native full-verse checks plus retained earlier native checks",
    "report": "reports/music/verse-game-1/IMPLEMENTATION.md"
  },
  "audioTools": {
    "implemented": "Custom PCM WAV sample waveform/selection, trim/gain/fades, envelope gate/high-pass, original/processed A-B, undo/redo, preview, immutable edited copies, processed WAV and portable original+processed v2 bundle",
    "limits": "Short sampled-instrument editor remains 8 seconds. Separate recorded-audio clip workflow supports PCM16 WAV up to 30 seconds; see recordedAudioClips. No universal denoising/time stretch.",
    "tests": "12 native IDB/live/offline/bundle checks; deterministic DSP and integrity regressions",
    "report": "reports/music/game-editor-1/IMPLEMENTATION.md"
  },
  "recordedAudioClips": {
    "implemented": "Separate project audio layers; nondestructive recipe and original storage; waveform, trim, gain, fades, gate/high-pass, A/B, undo/redo, preview, placement, volume/mute/solo, portable original bundle, processed/full mix WAV",
    "limits": "PCM16 WAV44.1/48k mono/stereo,0.05-30s,6MiB/file;4clips;8originals/24MiB;60s song;Free play100%;32MiB combined portable audio;96MiB shared decoded admission;no destructive source purge UI",
    "tests": "23 native checks, generated fixture only; actual file-picker acceptance unverified",
    "report": "reports/music/clips-long-game-1/IMPLEMENTATION.md"
  },
  "focusedRhythmGame": {
    "status": "implemented and local-browser tested; not deployed",
    "navigation": [
      "Studio",
      "Songs",
      "Rhythm Play",
      "Audio Editing"
    ],
    "surface": [
      "vertical audio-clock lanes",
      "aligned playable keys/chords",
      "real hit/miss feedback",
      "compact verified chord shapes",
      "results and next part",
      "safe pause across tabs"
    ],
    "locales": 12,
    "nodeTests": 136,
    "nativeChecks": 8,
    "viewportChecks": [
      "390x844",
      "320x640 layout",
      "1280x720"
    ],
    "actualSongTest": {
      "title": "Rain Window",
      "seconds": 60,
      "pianoNotes": 2,
      "guitarNotes": 22,
      "score": 0,
      "wrongInputsPreserved": true,
      "wavSeconds": 63.1,
      "peakMemoryBytes": 56456264
    },
    "limits": [
      "No physical Android or hardware permission testing",
      "No screen-recording tool capability",
      "In-flight take not durable across reload",
      "Pause stops backing tails; future onsets resume",
      "Narrow screens use key banks"
    ],
    "report": "reports/music/focused-game-1/IMPLEMENTATION.md",
    "supersededSurface": "Direct tile game replaces key banks; see directTileGame. Historical tests retained."
  },
  "directTileGame": {
    "version": 17,
    "status": "Implemented and tested locally; not deployed",
    "surface": [
      "four directly tappable descending lanes",
      "actual duration holds with separate release judgment",
      "stable-board pointer capture and cancellation",
      "wrong/miss feedback and honest results",
      "optional note/chord guide"
    ],
    "mapping": {
      "arrangements": 96,
      "lanes": 4,
      "maxOverlappingHolds": 2,
      "maxHoldSeconds": 7.5,
      "minOnsetSeconds": 0.36,
      "simultaneousPitches": "explicit chord macro",
      "incompatibleCharts": "reject explicitly"
    },
    "nodeTests": 152,
    "nativeAudioProjectChecks": 9,
    "nativeUiHold": {
      "onsetScore": 100,
      "finalScore": 94,
      "holds": "7/8; one deliberate early release",
      "input": "explicit simulated keyboard events"
    },
    "nativeUiCapture": {
      "eventSeconds": 0.9513000000119209,
      "storedSeconds": 0.9512909999761581,
      "previousLayersPreserved": true,
      "temporaryFixtureRestored": true
    },
    "actualUiSong": {
      "id": "night-tram",
      "seconds": 48,
      "pianoNotes": 1,
      "guitarNotes": 6,
      "scores": 0,
      "wrongInputsPreserved": true,
      "wavSeconds": 51.1,
      "peakMemoryBytes": 40763876
    },
    "viewports": [
      "390x844",
      "1280x720"
    ],
    "locales": 12,
    "limits": [
      "Physical Android multitouch unverified",
      "In-flight take not durable across reload",
      "Pause ends active holds and backing tails; future onsets resume",
      "No screen recording capability",
      "Game lanes are not physical fingering",
      "Chord macros are not independent fingers",
      "Existing minimum note duration .02 beats"
    ],
    "report": "reports/music/tile-game-1/IMPLEMENTATION.md"
  },
  "scoreImport": {
    "formats": {
      "midi": "SMF formats 0/1, PPQ timing, running status, track/channel/program parts, velocity, polyphony, tempo maps and sustain pedal duration",
      "musicxml": "UTF-8 score-partwise subset: divisions, time signatures, rests, chord/backup/forward voices, concert transpose, contiguous ties, simple non-nested repeat expansion"
    },
    "unsupported": [
      "Compressed MXL (rejected before decompression)",
      "MIDI format2/SMPTE time division",
      "MusicXML DTD/entities, alternate endings/jumps/grace/cue/unpitched notation, complex tempo-only metronome and unsupported playback constructs",
      "PDF/photo OMR"
    ],
    "limits": {
      "sourceBytes": 262144,
      "sourceNotes": 12000,
      "midiEvents": 60000,
      "parsedParts": 32,
      "sourceBeats": 4096,
      "sourceSeconds": 3600,
      "outputBeats": 64,
      "outputNotes": 4096,
      "mappedParts": 8,
      "uniqueInstrumentPerPart": true,
      "attachmentsPerProjectOrGameCatalog": 2,
      "maxSourceBase64Total": 700000,
      "maxHeldNoteSeconds": 8
    },
    "implemented": [
      "Source bytes and SHA-256 stored separately from targets; portable project and original download",
      "Explicit section boundaries, clipping consent, tempo-to-elapsed or fixed-beat conversion, transpose, part/sample mapping",
      "Review and audition; exact Studio notes or disclosed melody simplification for game",
      "Actual game performance remains separate; no generated successes or quantization",
      "Worker cancellation; malformed and oversized input rejection; previous project preserved"
    ],
    "verification": {
      "nodeMusicTests": 171,
      "repositoryTests": 651,
      "native": "Worker MIDI/MusicXML/cancel, WebAudio and OfflineAudioContext, UI restore/review/add, sequential wrong taps, 5-track save/reload and source integrity; no physical picker or Android acceptance",
      "wav": {
        "seconds": 7.1,
        "sampleRate": 44100,
        "bytes": 1252484,
        "peak": 9826
      },
      "cacheAfterExport": {
        "bytes": 5815808,
        "pins": 0,
        "external": 0,
        "budget": 100663296
      }
    },
    "limitations": [
      "No full notation engraving or physical fingering assessment from imported source",
      "Expression/controllers/articulations not reproduced, disclosed before approval",
      "Source files with DTD must be exported without DTD for this first strict parser",
      "Exact four-lane charts reject unequal chord durations, dense onsets or incompatible holds; melody changes are explicit",
      "Imported game entries currently limited to 2; no catalog removal UI yet"
    ]
  }
}