diff --git a/apps/ui/src/App.tsx b/apps/ui/src/App.tsx index 0d77f70e..244c8af1 100644 --- a/apps/ui/src/App.tsx +++ b/apps/ui/src/App.tsx @@ -1018,7 +1018,7 @@ export default function App() {
STEM PITCH/NOTE TRANSLATION
- Optional. Slower and heavier. Turns on the extra stem-based note draft. The separate melody guide may still appear when measurement can produce one. + Optional. Slower and heavier. Turns on the stem-aware note draft (Demucs + torchcrepe on bass and lead). When off, the measurement-layer melody contour and Gemini stem listening notes can still appear when those stages run.
- What this is for -
-- This is a plain-language musical summary of the separated stems. It is useful for understanding the role of the bass and upper material, not for exact MIDI truth. -
- {stemSummary?.summary && ( -- {truncateAtSentenceBoundary(stemSummary.summary, 320)} -
- )} -- {truncateAtSentenceBoundary(stem.summary, 220)} -
-- Notes: {bar.noteHypotheses.join(', ')} -
- )} - {bar.scaleDegreeHypotheses.length > 0 && ( -- Scale degrees: {bar.scaleDegreeHypotheses.join(', ')} -
- )} -- Rhythm: {truncateAtSentenceBoundary(bar.rhythmicPattern, 180)} -
-- Uncertainty: {truncateAtSentenceBoundary(bar.uncertaintyReason, 180)} -
-- Global pattern -
-- Bass role: {truncateAtSentenceBoundary(stem.globalPatterns.bassRole, 180)} -
-- Musical role: {truncateAtSentenceBoundary(stem.globalPatterns.melodicRole, 180)} -
-- Movement: {truncateAtSentenceBoundary(stem.globalPatterns.pumpingOrModulation, 180)} -
-- Synthesis: {truncateAtSentenceBoundary(stem.globalPatterns.synthesisCharacter, 180)} -
-- Vocal presence: {truncateAtSentenceBoundary(stem.globalPatterns.vocalPresence, 180)} -
-- Bass character: {truncateAtSentenceBoundary(stem.globalPatterns.bassCharacter, 180)} -
-- {panelSummaryTitle} -
-- {panelSummaryBody} -
-- Stem pitch/note extraction is off. -
-- This panel is showing the measurement-layer melody guide instead, so preview and MIDI export still work, but this is not the stem note draft. + {panelSummary}
- Pitch/note translation is off. + Pitch/note translation is off
-- Re-enable the Stem Pitch/Note Translation toggle in the request panel to preview and export the melody guide. +
+ {offBannerCopy}
PITCH & MELODY UNAVAILABLE
-- Run with pitch/note translation enabled, or ensure melodyDetail is present in the DSP payload for a melody guide +
+ Neither stem-aware transcription nor a measurement-layer melody contour were produced for this run. Check the stem listening notes if interpretation ran.
+ What this is for +
++ Plain-language descriptions of the bass and lead stems from Gemini. Reading these is the path that stays useful even when the note draft above is rough. +
+ {topSummary && ( ++ {truncateAtSentenceBoundary(topSummary, 320)} +
+ )} ++ {truncateAtSentenceBoundary(stem.summary, 220)} +
++ Notes: {bar.noteHypotheses.join(', ')} +
+ )} + {bar.scaleDegreeHypotheses.length > 0 && ( ++ Scale degrees: {bar.scaleDegreeHypotheses.join(', ')} +
+ )} ++ Rhythm: {truncateAtSentenceBoundary(bar.rhythmicPattern, 180)} +
++ Uncertainty: {truncateAtSentenceBoundary(bar.uncertaintyReason, 180)} +
++ Global pattern +
++ Bass role: {truncateAtSentenceBoundary(stem.globalPatterns.bassRole, 180)} +
++ Musical role: {truncateAtSentenceBoundary(stem.globalPatterns.melodicRole, 180)} +
++ Movement: {truncateAtSentenceBoundary(stem.globalPatterns.pumpingOrModulation, 180)} +
++ Synthesis: {truncateAtSentenceBoundary(stem.globalPatterns.synthesisCharacter, 180)} +
++ Vocal presence: {truncateAtSentenceBoundary(stem.globalPatterns.vocalPresence, 180)} +
++ Bass character: {truncateAtSentenceBoundary(stem.globalPatterns.bassCharacter, 180)} +
++ {copyText} +
+{SUBTITLE}
++ {RAN_WITH_NO_RESULT_NOTICE} +
++ Melody metadata +
++ Melody MIDI: {melodyDetail.midiFile ? 'available' : 'none'} · Vibrato: {vibratoLabel} +
++ {subtitle} +
+ )} +{notice}
+ )} ++ Confidence slider filtered every note. Lower the threshold to see and export anything. +
+ )} + ++ {STAYS_USEFUL_HEADLINE} +
++ {STAYS_USEFUL_DETAIL} +
+