cueLine

Word/syllable-level timing data for a lyrics line.
{
  "index": 0,
  "start": 2747,
  "end": 6214,
  "value": "눈을 뜬 순간",
  "cue": [
    { "start": 2747, "end": 3018, "value": "눈", "byteStart": 0, "byteEnd": 2 },
    { "start": 3018, "end": 3179, "value": "을", "byteStart": 3, "byteEnd": 5 },
    { "start": 3179, "end": 3582, "value": " ", "byteStart": 6, "byteEnd": 6 },
    { "start": 3582, "end": 4100, "value": "뜬", "byteStart": 7, "byteEnd": 9 },
    { "start": 4100, "end": 4500, "value": " ", "byteStart": 10, "byteEnd": 10 },
    { "start": 4500, "end": 5200, "value": "순", "byteStart": 11, "byteEnd": 13 },
    { "start": 5200, "end": 6214, "value": "간", "byteStart": 14, "byteEnd": 16 }
  ]
}
<cueLine index="0" start="2747" end="6214" value="눈을 뜬 순간">
  <cue start="2747" end="3018" byteStart="0" byteEnd="2"></cue>
  <cue start="3018" end="3179" byteStart="3" byteEnd="5"></cue>
  <cue start="3179" end="3582" byteStart="6" byteEnd="6"> </cue>
  <cue start="3582" end="4100" byteStart="7" byteEnd="9"></cue>
  <cue start="4100" end="4500" byteStart="10" byteEnd="10"> </cue>
  <cue start="4500" end="5200" byteStart="11" byteEnd="13"></cue>
  <cue start="5200" end="6214" byteStart="14" byteEnd="16"></cue>
</cueLine>
Does not exist.
Example with agent attribution
{
  "index": 0,
  "start": 1000,
  "end": 4000,
  "value": "You and I",
  "agentId": "lead",
  "cue": [
    { "start": 1000, "end": 1800, "value": "You ", "byteStart": 0, "byteEnd": 3 },
    { "start": 1800, "end": 2400, "value": "and ", "byteStart": 4, "byteEnd": 7 },
    { "start": 2400, "end": 3200, "value": "I", "byteStart": 8, "byteEnd": 8 }
  ]
}
<cueLine index="0" start="1000" end="4000" value="You and I" agentId="lead">
  <cue start="1000" end="1800" byteStart="0" byteEnd="3">You </cue>
  <cue start="1800" end="2400" byteStart="4" byteEnd="7">and </cue>
  <cue start="2400" end="3200" byteStart="8" byteEnd="8">I</cue>
</cueLine>
Does not exist.
Example with ambiguous repeated text

When untimed text appears between timed cues, cueLine.value plus cue byteStart / byteEnd offsets identifies the exact occurrence of a repeated token:

{
  "index": 0,
  "start": 0,
  "end": 2400,
  "value": "Oh love love me tonight",
  "cue": [
    { "start": 0, "end": 300, "value": "Oh", "byteStart": 0, "byteEnd": 1 },
    { "start": 900, "end": 1300, "value": "love", "byteStart": 8, "byteEnd": 11 },
    { "start": 1300, "end": 1600, "value": "me", "byteStart": 13, "byteEnd": 14 },
    { "start": 1600, "end": 2400, "value": "tonight", "byteStart": 16, "byteEnd": 22 }
  ]
}
<cueLine index="0" start="0" end="2400" value="Oh love love me tonight">
  <cue start="0" end="300" byteStart="0" byteEnd="1">Oh</cue>
  <cue start="900" end="1300" byteStart="8" byteEnd="11">love</cue>
  <cue start="1300" end="1600" byteStart="13" byteEnd="14">me</cue>
  <cue start="1600" end="2400" byteStart="16" byteEnd="22">tonight</cue>
</cueLine>
Does not exist.
FieldTypeReq.OpenS.Details
indexintegerYesYesZero-based index into the parent line array this cueLine corresponds to
startintegerNoYesStart time in milliseconds (may differ from the parent line if cues are more precise)
endintegerNoYesEnd time in milliseconds
valuestringYesYesFull text of the line. Required because every nested cue defines byteStart / byteEnd against this exact final UTF-8 string
agentIdstringNoYesOpaque identifier referencing an agent in the same structuredLyrics entry. If the parent structuredLyrics entry includes agents, every cueLine in that entry must include agentId, and the value must match exactly one agents[].id in that entry. If the parent entry does not include agents, cueLines must not include agentId. When multiple cueLines share the same index, the cueLine whose referenced agent has role: "main" must come first
cueArray of cueYesYesOrdered list of word/syllable cues. Every cue must include byteStart / byteEnd offsets into value