aquavox/packages/core/lyrics/ttml/index.ts

33 lines
1.1 KiB
TypeScript

import type { LrcJsonData } from '../type';
import { parseTTML as ttmlParser } from './parser';
import type { LyricLine } from './ttml-types';
export type * from './ttml-types';
export function parseTTML(text: string) {
let lyrics: LrcJsonData;
const lyricLines = ttmlParser(text).lyricLines;
lyrics = {
scripts: lyricLines.map((value: LyricLine, _index: number, _array: LyricLine[]) => {
let words = value.words.length == 0 ? undefined : value.words;
if (words) {
words = words.map((word) => {
let r = word;
r.startTime /= 1000;
r.endTime /= 1000;
return r;
});
}
return {
text: value.words.map((word) => word.word).join(''),
start: value.startTime / 1000,
end: value.endTime / 1000,
translation: value.translatedLyric || undefined,
singer: value.singer || undefined,
words: words
};
})
};
return lyrics;
}