UNPKG

native-lyrics-tools

Version:

A JavaScript library for parsing and generating various lyric formats.

6 lines (4 loc) 2.64 kB
import { parseTTML } from './ttml.js'; const sample = `<?xml version="1.0" encoding="UTF-8"?>\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 });