Skip to content

Language packages

A language package supplies the two operations that convert a vocal score into renderable language material:

OperationPurpose
planConvert the authored track into a phoneme plan.
finalizeApply timing edits and return the engine score.

Declare the package as role = "language" in plugin.toml; do not set a hook stage for that role. Multiple language packages may be enabled together. At render time, Amadeus resolves each voice’s selected language to the first enabled package, in manifest order, that advertises support for that language.

Language packages should preserve stable phone identities when applying user timing edits, so edits remain associated with the intended phones after the plan is rebuilt. Treat lyric planning, manual pronunciation overrides, slurs, and timing corrections as authored musical data rather than incidental text conversion.

ConditionOperationRequired result
Lyrics, notes, overrides, or slurs change.planReturn a valid phoneme plan whose identities remain stable for unchanged material.
Timing Nudges change.finalizeApply the edits to their identified phones and return a renderable score.
The package cannot support the requested language or material.Either operationReturn a user-readable diagnostic or supported failure result.

Use a separate post-pitch member when language-specific pitch shaping is needed. See Post-pitch hooks and the Plugin API.

For the complete domain shapes and Sinsy serialization rules, see the Language contract reference.