native-lyrics-tools
Version:
A JavaScript library for parsing and generating various lyric formats.
6 lines (4 loc) • 2.64 kB
JavaScript
import { parseTTML } from './ttml.js';
const sample = `\n<tt xmlns="http://www.w3.org/ns/ttml">\n <head>\n <metadata>\n <amll:meta key="example" value="all combinations" />\n </metadata>\n </head>\n <body>\n <div>\n <!-- 1. Plain line -->\n <p begin="00:00:01.000" end="00:00:03.000">\n <span begin="00:00:01.000" end="00:00:02.000">Hello</span>\n <span begin="00:00:02.000" end="00:00:03.000">world</span>\n </p>\n\n <!-- 2. is_bg -->\n <p begin="00:00:04.000" end="00:00:06.000">\n <span ttm:role="x-bg" begin="00:00:04.000" end="00:00:05.000">Harmony</span>\n <span ttm:role="x-bg" begin="00:00:05.000" end="00:00:06.000">part</span>\n </p>\n\n <!-- 3. is_duet -->\n <p ttm:agent="duet" begin="00:00:06.000" end="00:00:08.000">\n <span begin="00:00:06.000" end="00:00:07.000">Sing</span>\n <span begin="00:00:07.000" end="00:00:08.000">together</span>\n </p>\n\n <!-- 4. translated_lyric -->\n <p begin="00:00:09.000" end="00:00:12.000">\n <span begin="00:00:09.000" end="00:00:10.000">Bonjour</span>\n <span begin="00:00:10.000" end="00:00:11.000">le</span>\n <span begin="00:00:11.000" end="00:00:12.000">monde</span>\n <span ttm:role="x-translation">Hello world</span>\n </p>\n\n <!-- 5. roman_lyric -->\n <p begin="00:00:13.000" end="00:00:14.000">\n <span begin="00:00:13.000" end="00:00:14.000">こんにちは</span>\n <span ttm:role="x-roman">Konnichiwa</span>\n </p>\n\n <!-- 6. is_bg + is_duet -->\n <p ttm:agent="duet" begin="00:00:15.000" end="00:00:16.000">\n <span ttm:role="x-bg" begin="00:00:15.000" end="00:00:15.500">Backup</span>\n <span ttm:role="x-bg" begin="00:00:15.500" end="00:00:16.000">vocals</span>\n </p>\n\n <!-- 7. translated_lyric + roman_lyric -->\n <p begin="00:00:16.000" end="00:00:17.000">\n <span begin="00:00:16.000" end="00:00:17.000">世界</span>\n <span ttm:role="x-translation">World</span>\n <span ttm:role="x-roman">Sekai</span>\n </p>\n\n <!-- 8. is_bg + is_duet + translated_lyric + roman_lyric (all true) -->\n <p ttm:agent="duet" begin="00:00:18.000" end="00:00:19.000">\n <span ttm:role="x-bg" begin="00:00:18.000" end="00:00:19.000">合唱</span>\n <span ttm:role="x-translation">Chorus</span>\n <span ttm:role="x-roman">Gasshou</span>\n </p>\n </div>\n </body>\n</tt>`;
const result = parseTTML(sample);
console.dir(result, { depth: null, colors: true });