Skip to content

Doremi Lyric Fallback - #2488

Open
maiko3tattun wants to merge 6 commits into
openutau:masterfrom
maiko3tattun:261004_DoemiLyric
Open

maiko3tattun wants to merge 6 commits into
openutau:masterfrom
maiko3tattun:261004_DoemiLyric

Conversation

@maiko3tattun

Copy link
Copy Markdown
Contributor
  • When lyrics are empty, the app falls back to solfège (do-re-mi notation).
  • Each phonemizer can have its own solfège notation.
  • Fallback lyrics are displayed faintly on the note.
  • Also changed the default lyrics to empty string ("").

@maiko3tattun
maiko3tattun requested a review from a team October 3, 2026 17:54
@stakira

stakira commented Oct 4, 2026 •

Copy link
Copy Markdown
Collaborator

🤖 Review written by Claude (an AI assistant).

Summary: this feature adds little value. The fallback rarely triggers, and when it does, it only produces singable lyrics for a subset of phonemizers and voicebanks, while adding a Phonemizer API surface, derived state on UNote and a change to the default lyric. It is not worth adding in this form.

Limited applicability

  • The fallback passes fixed lyric strings to the phonemizer. They are singable only with the three Japanese phonemizers that override Solfages, on banks that include every syllable (including ふぁ). The other Japanese phonemizers receive Latin "do re mi"; English, Korean, Chinese, DiffSinger, ENUNU and others receive syllables their dictionaries or voicebanks may not contain.
  • New notes and imported MIDI notes are filled with DefaultLyric, so empty lyrics are rare. Changing the default to "" affects fresh installs only: notepresets.json stores DefaultLyric, so users with a saved presets file keep "a". Projects that already contain empty-lyric notes would change what they sing.

Implementation issues

  • CompletedLyric is written as a side effect of ToPhonemizerNote (also called from LyricBatchEdits) and reads DocManager.Inst.Project.key instead of the project passed into validation. Right after a lyric edit, the properties panel and the note text can show a stale value.
  • The kana table is duplicated in three phonemizers; keying a single table by Language would cover every Japanese phonemizer.
  • new SolidColorBrush(Colors.White, 0.6) is allocated per note per frame. TextLayoutCache keys by brush instance, so the cache grows on every repaint. A static brush avoids this.

@maiko3tattun

maiko3tattun commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor Author

The fallback passes fixed lyric strings to the phonemizer. They are singable only with the three Japanese phonemizers that override Solfages, on banks that include every syllable (including ふぁ). The other Japanese phonemizers receive Latin "do re mi"; English, Korean, Chinese, DiffSinger, ENUNU and others receive syllables their dictionaries or voicebanks may not contain.

For languages that cannot read the default solfège notation, each phonemizer will need to implement code to override it in the future.

New notes and imported MIDI notes are filled with DefaultLyric, so empty lyrics are rare. Changing the default to "" affects fresh installs only: notepresets.json stores DefaultLyric, so users with a saved presets file keep "a". Projects that already contain empty-lyric notes would change what they sing.

Yes, I don't think we should force existing users to change their default lyrics.

CompletedLyric is written as a side effect of ToPhonemizerNote (also called from LyricBatchEdits) and reads DocManager.Inst.Project.key instead of the project passed into validation. Right after a lyric edit, the properties panel and the note text can show a stale value.

This is incorrect. DocManager.Inst.Project.key is the scale key, and it is not changed in this scenario. Edits to the lyrics and pitch shifts are reflected immediately in the UI.

The kana table is duplicated in three phonemizers; keying a single table by Language would cover every Japanese phonemizer.

Since this should be determined based on the singer's language rather than the UI language, it needs to be stored in Phonemizer rather than in the translation resources.

@maiko3tattun

Copy link
Copy Markdown
Contributor Author

Made it possible to set blank lyrics in the Note Properties panel.

@nagotown

nagotown commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

could a toggle for this be added?

@maiko3tattun

maiko3tattun commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor Author

@nagotown Do you mean that you want it to display an error instead of falling back when the lyrics are empty? Or are you assuming that existing lyrics will be temporarily ignored and everything will be sung "do-re-mi"?

@nagotown

nagotown commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

oops, i misinterpreted the pr... i was thinking about the default lyric setting

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants