API for OpenUtau plugin development. They are also used in OpenUtau.Plugin.Builtin project. You can refer to them as example.
Experimental. Subject to change. Feedback welcomed.
API documented in:
Heavily commented example implementations, from simplest to most complex:
The main method to implement is:
public abstract Phoneme[] Process(Note[] notes, Note? prevNeighbour, Note? nextNeighbour);
notes
: A group of notes. The first note contains the lyric. The rest are extender notes with lyric "+" or "+n" (n is a number).
prevNeighbour
and nextNeighbour
: Useful info for creating diphones, if applicable. E.g., creating proper leading diphone in VCV.
returns
: An array of phonemes, positioned relative to the first note.
For actual document read comments in Phonemizer.cs.
A complete Phonemizer should:
- Produce phonemes (or diphones) from the lyric, and previous / next notes if exsit.
- Distribute phonemes to positions relative to the first note.
- Supports phonetic hinting, e.g., lyric like "read", "read[r iy d]" or "[r iy d]".
- Supports extender note aligments if the language is multisyllabic, i.e., "+n" notes.
Tips:
- To load singer specific resouce, Implement resouce loading in SetSinger() and use singer.Location to look for files.
- If uses expensive resource, load it lazily when the phonemizer is created the first time. Use your best adjudgement to decide its lifetime.