Create Kokoro TTS JavaScript library (#3)
* Set up JS project * Finalise JS library * Update README * Fix package.json repository url * Rename package -> `kokoro-js` * Fix samples in README * Cleanup README * Bump `phonemizer` version * Create web demo * Run prettier * Link to model used in demo * Enable multithreading in HF space demo (~40% faster) * Add link to demo in README * Bump to v1.0.1
This commit is contained in:
95
kokoro.js/tests/phonemize.test.js
Normal file
95
kokoro.js/tests/phonemize.test.js
Normal file
@@ -0,0 +1,95 @@
|
||||
import { describe, test, expect } from "vitest";
|
||||
import { phonemize } from "../src/phonemize.js";
|
||||
|
||||
const A_TEST_CASES = new Map([
|
||||
["‘Hello’", "həlˈoʊ"],
|
||||
["‘Test’ and ‘Example’", "tˈɛst ænd ɛɡzˈæmpəl"],
|
||||
["«Bonjour»", '"bɔːnʒˈʊɹ"'],
|
||||
["«Test «nested» quotes»", '"tˈɛst "nˈɛstᵻd" kwˈoʊts"'],
|
||||
["(Hello)", "«həlˈoʊ»"],
|
||||
["(Nested (Parentheses))", "«nˈɛstᵻd «pɚɹˈɛnθəsˌiːz»»"],
|
||||
["こんにちは、世界!", "dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ, tʃˈaɪniːzlˌɛɾɚ tʃˈaɪniːzlˌɛɾɚ!"],
|
||||
["これはテストです:はい?", "dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ: dʒˈæpəniːzlˌɛɾɚ dʒˈæpəniːzlˌɛɾɚ?"],
|
||||
["Hello World", "həlˈoʊ wˈɜːld"],
|
||||
["Hello World", "həlˈoʊ wˈɜːld"],
|
||||
["Hello\n \nWorld", "həlˈoʊ wˈɜːld"],
|
||||
["Dr. Smith", "dˈɑːktɚ smˈɪθ"],
|
||||
["DR. Brown", "dˈɑːktɚ bɹˈaʊn"],
|
||||
["Mr. Smith", "mˈɪstɚ smˈɪθ"],
|
||||
["MR. Anderson", "mˈɪstɚɹ ˈændɚsən"],
|
||||
["Ms. Taylor", "mˈɪs tˈeɪlɚ"],
|
||||
["MS. Carter", "mˈɪs kˈɑːɹɾɚ"],
|
||||
["Mrs. Johnson", "mˈɪsɪz dʒˈɑːnsən"],
|
||||
["MRS. Wilson", "mˈɪsɪz wˈɪlsən"],
|
||||
["Apples, oranges, etc.", "ˈæpəlz, ˈɔɹɪndʒᵻz, ɛtsˈɛtɹə"],
|
||||
["Apples, etc. Pears.", "ˈæpəlz, ɛtsˈɛtɹə. pˈɛɹz."],
|
||||
["Yeah", "jˈɛə"],
|
||||
["yeah", "jˈɛə"],
|
||||
["1990", "nˈaɪntiːn nˈaɪndi"],
|
||||
["12:34", "twˈɛlv θˈɜːɾi fˈoːɹ"],
|
||||
["2022s", "twˈɛnti twˈɛnti tˈuːz"],
|
||||
["1,000", "wˈʌn θˈaʊzənd"],
|
||||
["12,345,678", "twˈɛlv mˈɪliən θɹˈiː hˈʌndɹɪd fˈoːɹɾi fˈaɪv θˈaʊzənd sˈɪks hˈʌndɹɪd sˈɛvənti ˈeɪt"],
|
||||
["$100", "wˈʌn hˈʌndɹɪd dˈɑːlɚz"],
|
||||
["£1.50", "wˈʌn pˈaʊnd ænd fˈɪfti pˈɛns"],
|
||||
["12.34", "twˈɛlv pˈɔɪnt θɹˈiː fˈoːɹ"],
|
||||
["0.01", "zˈiəɹoʊ pˈɔɪnt zˈiəɹoʊ wˈʌn"],
|
||||
["10-20", "tˈɛn tə twˈɛnti"],
|
||||
["5-10", "fˈaɪv tə tˈɛn"],
|
||||
["10S", "tˈɛn ˈɛs"],
|
||||
["5S", "fˈaɪv ˈɛs"],
|
||||
["Cat's tail", "kˈæts tˈeɪl"],
|
||||
["X's mark", "ˈɛksᵻz mˈɑːɹk"],
|
||||
["U.S.A.", "jˈuːˈɛsˈeɪ."],
|
||||
["A.B.C", "ˈeɪbˈiːsˈiː"],
|
||||
]);
|
||||
|
||||
const B_TEST_CASES = new Map([
|
||||
["‘Hello’", "həlˈəʊ"],
|
||||
["‘Test’ and ‘Example’", "tˈɛst and ɛɡzˈampəl"],
|
||||
["«Bonjour»", '"bɔːnʒˈʊə"'],
|
||||
["«Test «nested» quotes»", '"tˈɛst "nˈɛstɪd" kwˈəʊts"'],
|
||||
["(Hello)", "«həlˈəʊ»"],
|
||||
["(Nested (Parentheses))", "«nˈɛstɪd «pəɹˈɛnθəsˌiːz»»"],
|
||||
["こんにちは、世界!", "dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə, tʃˈaɪniːzlˌɛtə tʃˈaɪniːzlˌɛtə!"],
|
||||
["これはテストです:はい?", "dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə: dʒˈapəniːzlˌɛtə dʒˈapəniːzlˌɛtə?"],
|
||||
["Hello World", "həlˈəʊ wˈɜːld"],
|
||||
["Hello World", "həlˈəʊ wˈɜːld"],
|
||||
["Hello\n \nWorld", "həlˈəʊ wˈɜːld"],
|
||||
["Dr. Smith", "dˈɒktə smˈɪθ"],
|
||||
["DR. Brown", "dˈɒktə bɹˈaʊn"],
|
||||
["Mr. Smith", "mˈɪstə smˈɪθ"],
|
||||
["MR. Anderson", "mˈɪstəɹ ˈandəsən"],
|
||||
["Ms. Taylor", "mˈɪs tˈeɪlə"],
|
||||
["MS. Carter", "mˈɪs kˈɑːtə"],
|
||||
["Mrs. Johnson", "mˈɪsɪz dʒˈɒnsən"],
|
||||
["Apples, oranges, etc.", "ˈapəlz, ˈɒɹɪndʒɪz, ɛtsˈɛtɹə"],
|
||||
["Apples, etc. Pears.", "ˈapəlz, ɛtsˈɛtɹə. pˈeəz."],
|
||||
["1990", "nˈaɪntiːn nˈaɪnti"],
|
||||
["12:34", "twˈɛlv θˈɜːti fˈɔː"],
|
||||
["1,000", "wˈɒn θˈaʊzənd"],
|
||||
["12,345,678", "twˈɛlv mˈɪliən θɹˈiː hˈʌndɹɪdən fˈɔːti fˈaɪv θˈaʊzənd sˈɪks hˈʌndɹɪdən sˈɛvənti ˈeɪt"],
|
||||
["$100", "wˈɒn hˈʌndɹɪd dˈɒləz"],
|
||||
["£1.50", "wˈɒn pˈaʊnd and fˈɪfti pˈɛns"],
|
||||
["12.34", "twˈɛlv pˈɔɪnt θɹˈiː fˈɔː"],
|
||||
["0.01", "zˈiəɹəʊ pˈɔɪnt zˈiəɹəʊ wˈɒn"],
|
||||
["Cat's tail", "kˈats tˈeɪl"],
|
||||
["X's mark", "ˈɛksɪz mˈɑːk"],
|
||||
]);
|
||||
|
||||
describe("phonemize", () => {
|
||||
describe("en-us", () => {
|
||||
for (const [input, expected] of A_TEST_CASES) {
|
||||
test(`phonemize("${input}")`, async () => {
|
||||
expect(await phonemize(input)).toEqual(expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
describe("en-gb", () => {
|
||||
for (const [input, expected] of B_TEST_CASES) {
|
||||
test(`phonemize("${input}")`, async () => {
|
||||
expect(await phonemize(input, "b")).toEqual(expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user