Skip to content

Analyze Voice Leading

Tool name: analyze-voice-leading

Compares two chord voicings (paired strictly by index) and flags parallel 5ths/octaves and leaps > octave.

HintValue
readOnlyHint
idempotentHint
destructiveHint
openWorldHint
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"from": {
"type": "object",
"properties": {
"chord": {
"type": "string",
"minLength": 1,
"description": "Chord symbol for context."
},
"voicing": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Notes in scientific pitch notation (e.g. [\"C4\",\"E4\",\"G4\"])."
}
},
"required": [
"chord",
"voicing"
],
"additionalProperties": false
},
"to": {
"type": "object",
"properties": {
"chord": {
"type": "string",
"minLength": 1,
"description": "Chord symbol for context."
},
"voicing": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Notes in scientific pitch notation (e.g. [\"C4\",\"E4\",\"G4\"])."
}
},
"required": [
"chord",
"voicing"
],
"additionalProperties": false
}
},
"required": [
"from",
"to"
],
"additionalProperties": false
}

Returned as structuredContent. The text rendering is a short human-readable summary.

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"perVoice": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"semitones": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"direction": {
"type": "string",
"enum": [
"up",
"down",
"static"
]
}
},
"required": [
"from",
"to",
"semitones",
"direction"
],
"additionalProperties": false
},
"description": "Per-voice motion, paired by index."
},
"warnings": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "parallel-fifths"
},
"voices": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
},
"required": [
"type",
"voices"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "parallel-octaves"
},
"voices": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
},
"required": [
"type",
"voices"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "large-leap"
},
"voice": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"semitones": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"type",
"voice",
"semitones"
],
"additionalProperties": false
}
]
},
"description": "Voice-leading warnings: parallel 5ths/octaves and leaps > octave."
}
},
"required": [
"perVoice",
"warnings"
],
"additionalProperties": false
}