diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..44505cfd2545ba70372e604943bea03df4bc0c1f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+__pycache__
+.gradio
diff --git a/app.py b/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..c666e2c464d36ccc577bb3007015753c75655747
--- /dev/null
+++ b/app.py
@@ -0,0 +1,316 @@
+import os
+import torch
+import librosa
+import numpy as np
+import gradio as gr
+import pyopenjtalk
+from util import preprocess_input, postprocess_phn, get_tokenizer, load_pitch_dict, get_pinyin
+
+from espnet_model_zoo.downloader import ModelDownloader
+from espnet2.bin.svs_inference import SingingGenerate
+
+
+singer_embeddings = {
+ "Model①(Chinese)-zh": {
+ "singer1 (male)": 1,
+ "singer2 (female)": 12,
+ "singer3 (male)": 23,
+ "singer4 (female)": 29,
+ "singer5 (male)": 18,
+ "singer6 (female)": 8,
+ "singer7 (male)": 25,
+ "singer8 (female)": 5,
+ "singer9 (male)": 10,
+ "singer10 (female)": 15,
+ },
+ "Model②(Multilingual)-zh": {
+ "singer1 (male)": "resource/singer/singer_embedding_ace-1.npy",
+ "singer2 (female)": "resource/singer/singer_embedding_ace-2.npy",
+ "singer3 (male)": "resource/singer/singer_embedding_ace-3.npy",
+ "singer4 (female)": "resource/singer/singer_embedding_ace-8.npy",
+ "singer5 (male)": "resource/singer/singer_embedding_ace-7.npy",
+ "singer6 (female)": "resource/singer/singer_embedding_itako.npy",
+ "singer7 (male)": "resource/singer/singer_embedding_ofuton.npy",
+ "singer8 (female)": "resource/singer/singer_embedding_kising_orange.npy",
+ "singer9 (male)": "resource/singer/singer_embedding_m4singer_Tenor-1.npy",
+ "singer10 (female)": "resource/singer/singer_embedding_m4singer_Alto-4.npy",
+ },
+ "Model②(Multilingual)-jp": {
+ "singer1 (male)": "resource/singer/singer_embedding_ace-1.npy",
+ "singer2 (female)": "resource/singer/singer_embedding_ace-2.npy",
+ "singer3 (male)": "resource/singer/singer_embedding_ace-3.npy",
+ "singer4 (female)": "resource/singer/singer_embedding_ace-8.npy",
+ "singer5 (male)": "resource/singer/singer_embedding_ace-7.npy",
+ "singer6 (female)": "resource/singer/singer_embedding_itako.npy",
+ "singer7 (male)": "resource/singer/singer_embedding_ofuton.npy",
+ "singer8 (female)": "resource/singer/singer_embedding_kising_orange.npy",
+ "singer9 (male)": "resource/singer/singer_embedding_m4singer_Tenor-1.npy",
+ "singer10 (female)": "resource/singer/singer_embedding_m4singer_Alto-4.npy",
+ }
+}
+
+model_dict = {
+ "Model①(Chinese)-zh": "espnet/aceopencpop_svs_visinger2_40singer_pretrain",
+ "Model②(Multilingual)-zh": "espnet/mixdata_svs_visinger2_spkembed_lang_pretrained",
+ "Model②(Multilingual)-jp": "espnet/mixdata_svs_visinger2_spkembed_lang_pretrained",
+}
+
+total_singers = list(singer_embeddings["Model②(Multilingual)-zh"].keys())
+
+langs = {
+ "zh": 2,
+ "jp": 1,
+}
+
+def gen_song(model_name, spk, texts, durs, pitchs):
+ fs = 44100
+ tempo = 120
+ lang = model_name.split("-")[-1]
+ PRETRAIN_MODEL = model_dict[model_name]
+ if texts is None:
+ return (fs, np.array([0.0])), "Error: No Text provided!"
+ if durs is None:
+ return (fs, np.array([0.0])), "Error: No Dur provided!"
+ if pitchs is None:
+ return (fs, np.array([0.0])), "Error: No Pitch provided!"
+
+ # preprocess
+ if lang == "zh":
+ texts = preprocess_input(texts, "")
+ text_list = get_pinyin(texts)
+ elif lang == "jp":
+ texts = preprocess_input(texts, " ")
+ text_list = texts.strip().split()
+ durs = preprocess_input(durs, " ")
+ dur_list = durs.strip().split()
+ pitchs = preprocess_input(pitchs, " ")
+ pitch_list = pitchs.strip().split()
+
+ if len(text_list) != len(dur_list):
+ return (fs, np.array([0.0])), f"Error: len in text({len(text_list)}) mismatch with duration({len(dur_list)})!"
+ if len(text_list) != len(pitch_list):
+ return (fs, np.array([0.0])), f"Error: len in text({len(text_list)}) mismatch with pitch({len(pitch_list)})!"
+
+ ## text to phoneme
+ tokenizer = get_tokenizer(model_name, lang)
+ sybs = []
+ for text in text_list:
+ if text == "AP" or text == "SP":
+ rev = [text]
+ elif text == "-" or text == "——":
+ rev = [text]
+ else:
+ rev = tokenizer(text)
+ if rev == False:
+ return (fs, np.array([0.0])), f"Error: text `{text}` is invalid!"
+ rev = postprocess_phn(rev, model_name, lang)
+ phns = "_".join(rev)
+ sybs.append(phns)
+
+ pitch_dict = load_pitch_dict()
+
+ labels = []
+ notes = []
+ st = 0
+ pre_phn = ""
+ for phns, dur, pitch in zip(sybs, dur_list, pitch_list):
+ if phns == "-" or phns == "——":
+ phns = pre_phn
+ if pitch not in pitch_dict:
+ return (fs, np.array([0.0])), f"Error: pitch `{pitch}` is invalid!"
+ pitch = pitch_dict[pitch]
+ phn_list = phns.split("_")
+ lyric = "".join(phn_list)
+ dur = float(dur)
+ note = [st, st + dur, lyric, pitch, phns]
+ st += dur
+ notes.append(note)
+ for phn in phn_list:
+ labels.append(phn)
+ pre_phn = labels[-1]
+
+ phns_str = " ".join(labels)
+ batch = {
+ "score": (
+ int(tempo),
+ notes,
+ ),
+ "text": phns_str,
+ }
+ print(batch)
+ # return (fs, np.array([0.0])), "success!"
+
+ # Infer
+ device = "cpu"
+ # device = "cuda" if torch.cuda.is_available() else "cpu"
+ d = ModelDownloader()
+ pretrain_downloaded = d.download_and_unpack(PRETRAIN_MODEL)
+ svs = SingingGenerate(
+ train_config = pretrain_downloaded["train_config"],
+ model_file = pretrain_downloaded["model_file"],
+ device = device
+ )
+ if model_name == "Model①(Chinese)-zh":
+ sid = np.array([singer_embeddings[model_name][spk]])
+ output_dict = svs(batch, sids=sid)
+ else:
+ lid = np.array([langs[lang]])
+ spk_embed = np.load(singer_embeddings[model_name][spk])
+ output_dict = svs(batch, lids=lid, spembs=spk_embed)
+ wav_info = output_dict["wav"].cpu().numpy()
+
+ # mos prediction with sr=16k
+ predictor = torch.hub.load("South-Twilight/SingMOS:v0.2.0", "singing_ssl_mos", trust_repo=True)
+ wav_mos = librosa.resample(wav_info, orig_sr=fs, target_sr=16000)
+ wav_mos = torch.from_numpy(wav_mos).unsqueeze(0)
+ len_mos = torch.tensor([wav_mos.shape[1]])
+ score = predictor(wav_mos, len_mos)
+ return (fs, wav_info), "success!", round(score.item(), 2)
+
+
+# SP: silence, AP: aspirate.
+examples = [
+ ["Model①(Chinese)-zh", "singer1 (male)", "雨 淋 湿 了 SP 天 空 AP\n毁 的 SP 很 讲 究 AP", "0.23 0.16 0.36 0.16 0.07 0.28 0.5 0.21\n0.3 0.12 0.12 0.25 0.5 0.48 0.34", "60 62 62 62 0 62 58 0\n58 58 0 58 58 63 0"],
+ ["Model①(Chinese)-zh", "singer3 (male)", "雨 淋 湿 了 SP 天 空 AP\n毁 的 SP 很 讲 究 AP", "0.23 0.16 0.36 0.16 0.07 0.28 0.5 0.21\n0.3 0.12 0.12 0.25 0.5 0.48 0.34", "C4 D4 D4 D4 rest D4 A#3 rest\nA#3 A#3 rest A#3 A#3 D#4 rest"], # midi note
+ ["Model①(Chinese)-zh", "singer3 (male)", "雨 淋 湿 了 SP 天 空 AP\n毁 的 SP 很 讲 究 AP", "0.23 0.16 0.36 0.16 0.07 0.28 0.5 0.21\n0.3 0.12 0.12 0.25 0.5 0.48 0.34", "C#4 D#4 D#4 D#4 rest D#4 B3 rest\nB3 B3 rest B3 B3 E4 rest"], # up 1 key
+ ["Model①(Chinese)-zh", "singer3 (male)", "雨 淋 湿 了 SP 大 地 AP\n毁 的 SP 很 讲 究 AP", "0.23 0.16 0.36 0.16 0.07 0.28 0.5 0.21\n0.3 0.12 0.12 0.25 0.5 0.48 0.34", "C4 D4 D4 D4 rest D4 A#3 rest\nA#3 A#3 rest A#3 A#3 D#4 rest"], # lyrics
+ ["Model②(Multilingual)-zh", "singer3 (male)", "你 说 你 不 SP 懂\n 为 何 在 这 时 牵 手 AP", "0.11 0.33 0.29 0.13 0.15 0.48\n0.24 0.18 0.34 0.15 0.27 0.28 0.63 0.44", "63 63 63 63 0 63\n62 62 62 63 65 63 62 0"],
+ ["Model②(Multilingual)-zh", "singer3 (male)", "你 说 你 不 SP 懂\n 为 何 在 这 时 牵 手 AP", "0.23 0.66 0.58 0.27 0.3 0.97\n0.48 0.36 0.69 0.3 0.53 0.56 1.27 0.89", "63 63 63 63 0 63\n62 62 62 63 65 63 62 0"], # double duration
+ ["Model①(Chinese)-zh", "singer3 (male)", "雨 淋 湿 了 SP 天 空 AP\n毁 的 SP 很 讲 究 AP\n你 说 你 不 SP 懂\n 为 何 在 这 时 牵 手 AP", "0.23 0.16 0.36 0.16 0.07 0.28 0.5 0.21\n0.3 0.12 0.12 0.25 0.5 0.48 0.34\n0.11 0.33 0.29 0.13 0.15 0.48\n0.24 0.18 0.34 0.15 0.27 0.28 0.63 0.44", "60 62 62 62 0 62 58 0\n58 58 0 58 58 63 0\n63 63 63 63 0 63\n62 62 62 63 65 63 62 0"], # long
+ ["Model①(Chinese)-zh", "singer3 (male)", "修 炼 爱 情 的 心 酸 SP AP", "0.42 0.21 0.19 0.28 0.22 0.33 1.53 0.1 0.29", "68 70 68 66 63 68 68 0 0"],
+ ["Model①(Chinese)-zh", "singer3 (male)", "学 会 放 好 以 前 的 渴 望 SP AP", "0.3 0.22 0.29 0.27 0.25 0.44 0.54 0.29 1.03 0.08 0.39", "68 70 68 66 61 68 68 65 66 0 0"],
+ ["Model①(Chinese)-zh", "singer3 (male)", "SP 我 不 - 是 一 定 要 你 回 - 来 SP", "0.37 0.45 0.47 0.17 0.52 0.28 0.46 0.31 0.44 0.45 0.2 2.54 0.19", "0 51 60 61 59 59 57 57 59 60 61 59 0"], # slur
+ ["Model①(Chinese)-zh", "singer4 (female)", "AP 我 多 想 再 见 你\n哪 怕 匆 - 匆 一 AP 眼 就 别 离 AP", "0.13 0.24 0.68 0.78 0.86 0.4 0.94 0.54 0.3 0.56 0.16 0.86 0.26 0.22 0.28 0.78 0.68 1.5 0.32", "0 57 66 63 63 63 63 60 61 61 63 66 66 0 61 61 59 58 0"],
+ ["Model②(Multilingual)-jp", "singer8 (female)", "い じ ん さ ん に つ れ ら れ て", "0.6 0.3 0.3 0.3 0.3 0.6 0.6 0.3 0.3 0.6 0.23", "60 60 60 56 56 56 55 55 55 53 56"],
+ ["Model②(Multilingual)-jp", "singer8 (female)", "い じ ん さ ん に つ れ ら れ て", "0.6 0.3 0.3 0.3 0.3 0.6 0.6 0.3 0.3 0.6 0.23", "62 62 62 58 58 58 57 57 57 55 58"], # pitch
+ ["Model②(Multilingual)-jp", "singer8 (female)", "い じ ん さ ん に つ れ ら れ て", "1.2 0.6 0.6 0.6 0.6 1.2 1.2 0.6 0.6 1.2 0.45", "60 60 60 56 56 56 55 55 55 53 56"], # double dur
+ ["Model②(Multilingual)-jp", "singer8 (female)", "い じ ん さ ん に つ れ ら れ て", "0.3 0.15 0.15 0.15 0.15 0.3 0.3 0.15 0.15 0.3 0.11", "60 60 60 56 56 56 55 55 55 53 56"], # half dur
+ ["Model②(Multilingual)-jp", "singer8 (female)", "きっ と と べ ば そ ら ま で と ど く AP", "0.39 2.76 0.2 0.2 0.39 0.39 0.2 0.2 0.39 0.2 0.2 0.59 1.08", "64 71 68 69 71 71 69 68 66 68 69 68 0"],
+ ["Model②(Multilingual)-jp", "singer8 (female)", "じゃ の め で お む か え う れ し い な", "0.43 0.14 0.43 0.14 0.43 0.14 0.43 0.14 0.43 0.14 0.43 0.14 0.65", "60 60 60 62 64 67 69 69 64 64 64 62 60"],
+ ["Model②(Multilingual)-jp", "singer10 (female)", "お と め わ ら い か ふぁ い や ら い か ん な い す ぶ ろ うぃ ん ぶ ろ うぃ ん い ん ざ うぃ ん", "0.15 0.15 0.15 0.15 0.3 0.15 0.3 0.15 0.15 0.3 0.07 0.07 0.15 0.15 0.15 0.15 0.15 0.15 0.45 0.07 0.07 0.07 0.38 0.07 0.07 0.15 0.15 0.3 0.15 0.15", "67 67 67 67 67 67 69 67 67 69 67 67 64 64 64 64 64 64 62 64 64 62 62 64 64 62 62 59 59 59"],
+]
+
+with gr.Blocks() as demo:
+ gr.Markdown(
+ """
+
Demo of Singing Voice Synthesis in Muskits-ESPnet
+
+
+This is the demo page of our toolkit
Muskits-ESPnet: A Comprehensive Toolkit for Singing Voice Synthesis in New Paradigm.
+
+Singing Voice Synthesis (SVS) takes a music score as input and generates singing vocal with the voice of a specific singer.
+
+Music score usually includes lyrics, as well as duration and pitch of each word in lyrics,
+
+
How to use:
+
+ - Choose Model-Language:
+
+ - "zh" indicates lyrics input in Chinese, and "jp" indicates lyrics input in Japanese.
+ - For example, "Model②(Mulitlingual)-zh" means model "Model②(Multilingual)" with lyrics input in Chinese.
+
+
+ - [Optional] Choose Singer: Choose one singer you like from the drop-down list.
+ - Input lyrics:
+
+ - Lyrics use Chinese characters when the language is 'zh' and hiragana when the language is 'jp'.
+ - Special characters such as 'AP' (breath), 'SP' (silence), and '-' (slur, only for Chinese lyrics) can also be used.
+ - Lyrics sequence should be separated by either a space (' ') or a newline ('\\n'), without the quotation marks.
+
+
+ - Input durations:
+
+ - Durations use float number as input.
+ - Length of duration sequence should be same as lyric sequence, with each duration corresponding to the respective lyric.
+ - Durations sequence should be separated by either a space (' ') or a newline ('\\n'), without the quotation marks.
+
+
+ - Input pitches:
+
+ - Pitches use MIDI note or MIDI note number as input. Specially, "69" in MIDI note number represents "A4" in MIDI note.
+ - Length of pitch sequence should be same as lyric sequence, with each pitch corresponding to the respective lyric.
+ - Pitches sequence should be separated by either a space (' ') or a newline ('\\n'), without the quotation marks.
+
+
+ - Hit "Generate" and listen to the result!
+
+
+
+Notice:
+
+ - Plenty of exmpales are provided.
+ - Extreme values may result in suboptimal generation quality!
+
+"""
+ )
+ # Row-1
+ with gr.Row():
+ with gr.Column(variant="panel"):
+ model_name = gr.Radio(
+ label="Model-Language",
+ choices=[
+ "Model①(Chinese)-zh",
+ "Model②(Multilingual)-zh",
+ "Model②(Multilingual)-jp",
+ ],
+ )
+
+ with gr.Column(variant="panel"):
+ singer = gr.Dropdown(
+ label="Singer",
+ choices=total_singers,
+ )
+
+ # def set_model(model_name_str: str):
+ # """
+ # gets value from `model_name`. either
+ # uses cached list of speakers for the given model name
+ # or loads the addon and checks what are the speakers.
+ # """
+ # speakers = list(singer_embeddings[model_name_str].keys())
+ # value = speakers[0]
+ # return gr.update(
+ # choices=speakers, value=value, visible=True, interactive=True
+ # )
+
+ # model_name.change(set_model, inputs=model_name, outputs=singer)
+
+ # Row-2
+ with gr.Row():
+ with gr.Column(variant="panel"):
+ lyrics = gr.Textbox(label="Lyrics")
+ duration = gr.Textbox(label="Duration")
+ pitch = gr.Textbox(label="Pitch")
+ generate = gr.Button("Generate")
+ with gr.Column(variant="panel"):
+ gened_song = gr.Audio(label="Generated Song", type="numpy")
+ run_status = gr.Textbox(label="Running Status")
+ pred_mos = gr.Textbox(label=" Pseudo MOS")
+
+ gr.Examples(
+ examples=examples,
+ inputs=[model_name, singer, lyrics, duration, pitch],
+ outputs=[singer],
+ label="Examples",
+ examples_per_page=20,
+ )
+
+ gr.Markdown("""
+
+"""
+ )
+
+ generate.click(
+ fn=gen_song,
+ inputs=[model_name, singer, lyrics, duration, pitch],
+ outputs=[gened_song, run_status, pred_mos],
+ )
+
+demo.launch()
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c7d620f846c886aa0f2e406e6233d66dcc38bd8a
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,10 @@
+git+https://github.com/South-Twilight/espnet
+torch
+numpy
+librosa
+espnet_model_zoo
+importlib
+pathlib
+pypinyin
+torchaudio
+pyopenjtalk
diff --git a/resource/Muskits_ESPnet_logo.png b/resource/Muskits_ESPnet_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..04cb70a4d348dbdce041c97cc68f09eb3e6a6ed2
Binary files /dev/null and b/resource/Muskits_ESPnet_logo.png differ
diff --git a/resource/__init__.py b/resource/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/resource/all_plans.json b/resource/all_plans.json
new file mode 100644
index 0000000000000000000000000000000000000000..94af8af22ad17cadfaf4505caae44c71fff6561e
--- /dev/null
+++ b/resource/all_plans.json
@@ -0,0 +1,7660 @@
+{
+ "jp_word2romaji":
+ {
+ "うぁ": "wa",
+ "うぉ": "wo",
+ "ぁ": "a",
+ "ぃ": "i",
+ "ぅ": "u",
+ "ぇ": "e",
+ "ぉ": "o",
+ "ゃ": "ya",
+ "ゅ": "yu",
+ "ょ": "yo",
+ "ウァ": "wa",
+ "ウォ": "wo",
+ "ァ": "a",
+ "ィ": "i",
+ "ゥ": "u",
+ "ェ": "e",
+ "ォ": "o",
+ "ャ": "ya",
+ "ュ": "yu",
+ "ョ": "yo",
+ "ウァ": "wa",
+ "ウォ": "wo",
+ "ァ": "a",
+ "ィ": "i",
+ "ゥ": "u",
+ "ェ": "e",
+ "ォ": "o",
+ "ャ": "ya",
+ "ュ": "yu",
+ "ョ": "yo",
+ "よ": "yo",
+ "びゅ": "byu",
+ "ら": "ra",
+ "ジャ": "ja",
+ "り": "ri",
+ "キャ": "kya",
+ "ツェ": "tse",
+ "る": "ru",
+ "キュ": "kyu",
+ "フェ": "fe",
+ "れ": "re",
+ "びょ": "byo",
+ "ジュ": "ju",
+ "ろ": "ro",
+ "キュ": "kyu",
+ "リェ": "rye",
+ "ツォ": "tso",
+ "リャ": "rya",
+ "キョ": "kyo",
+ "フォ": "fo",
+ "わ": "wa",
+ "コ゚": "ngo",
+ "ジョ": "jo",
+ "リュ": "ryu",
+ "キョ": "kyo",
+ "リョ": "ryo",
+ "を": "wo",
+ "ク゚": "ngu",
+ "ん": "N",
+ "キ゚ャ": "ngya",
+ "キ゚ェ": "ngye",
+ "ガ": "ga",
+ "ふぁ": "fa",
+ "クァ": "kwa",
+ "キ゚ュ": "ngyu",
+ "ブ": "bu",
+ "ふぃ": "fi",
+ "キ゚ャ": "ngya",
+ "プ": "pu",
+ "クィ": "kwi",
+ "ア": "a",
+ "ふぅ": "fu",
+ "ズィ": "zi",
+ "きゃ": "kya",
+ "じゃ": "ja",
+ "ズィ": "zi",
+ "イ": "i",
+ "キ゚ョ": "ngyo",
+ "キ゚ュ": "ngyu",
+ "ブュ": "vyu",
+ "スィ": "si",
+ "ふぇ": "fe",
+ "ウ": "u",
+ "きゅ": "kyu",
+ "じゅ": "ju",
+ "イェ": "ye",
+ "イェ": "ye",
+ "キ゚ョ": "ngyo",
+ "エ": "e",
+ "きょ": "kyo",
+ "ふぉ": "fo",
+ "じょ": "jo",
+ "オ": "o",
+ "カ": "ka",
+ "ガ": "ga",
+ "キ": "ki",
+ "ピャ": "pya",
+ "ギ": "gi",
+ "ク": "ku",
+ "ミャ": "mya",
+ "グ": "gu",
+ "リャ": "rya",
+ "ケ": "ke",
+ "ピュ": "pyu",
+ "ゲ": "ge",
+ "ミュ": "myu",
+ "コ": "ko",
+ "リュ": "ryu",
+ "ゴ": "go",
+ "ピョ": "pyo",
+ "サ": "sa",
+ "ミョ": "myo",
+ "ザ": "za",
+ "ドゥ": "du",
+ "リョ": "ryo",
+ "シ": "shi",
+ "くぁ": "kwa",
+ "ジ": "ji",
+ "ス": "su",
+ "ズ": "zu",
+ "セ": "se",
+ "くぃ": "kwi",
+ "ゼ": "ze",
+ "ずぃ": "zi",
+ "ソ": "so",
+ "ジ": "ji",
+ "ゾ": "zo",
+ "タ": "ta",
+ "ダ": "da",
+ "いぇ": "ye",
+ "チ": "chi",
+ "ヲ": "wo",
+ "くぇ": "kwe",
+ "ッ": "cl",
+ "ツ": "tsu",
+ "クァ": "kwa",
+ "くぉ": "kwo",
+ "クィ": "kwi",
+ "テ": "te",
+ "ティ": "ti",
+ "デ": "de",
+ "ぴゃ": "pya",
+ "ト": "to",
+ "き゚": "ngi",
+ "ド": "do",
+ "みゃ": "mya",
+ "ギャ": "gya",
+ "りゃ": "rya",
+ "ナ": "na",
+ "ぴゅ": "pyu",
+ "ニ": "ni",
+ "テェ": "tye",
+ "ヴぁ": "va",
+ "ア": "a",
+ "ヌ": "nu",
+ "ネ": "ne",
+ "イ": "i",
+ "りゅ": "ryu",
+ "テャ": "tya",
+ "ギュ": "gyu",
+ "ぴょ": "pyo",
+ "ノ": "no",
+ "ヴぃ": "vi",
+ "ハ": "ha",
+ "バ": "ba",
+ "みゅ": "myu",
+ "ギョ": "gyo",
+ "りょ": "ryo",
+ "カ": "ka",
+ "パ": "pa",
+ "ヒ": "hi",
+ "キ": "ki",
+ "みょ": "myo",
+ "ビ": "bi",
+ "ニェ": "nye",
+ "ビャ": "bya",
+ "ピ": "pi",
+ "ウ": "u",
+ "テュ": "tyu",
+ "フ": "hu",
+ "ビュ": "byu",
+ "ク": "ku",
+ "ヴぇ": "ve",
+ "サ": "sa",
+ "ブ": "bu",
+ "プ": "pu",
+ "シ": "shi",
+ "エ": "e",
+ "ヘ": "he",
+ "ス": "su",
+ "ケ": "ke",
+ "ベ": "be",
+ "ヴぉ": "vo",
+ "セ": "se",
+ "ペ": "pe",
+ "ジェ": "je",
+ "ビェ": "bye",
+ "ホ": "ho",
+ "タ": "ta",
+ "オ": "o",
+ "ボ": "bo",
+ "チ": "chi",
+ "コ": "ko",
+ "ポ": "po",
+ "ツ": "tsu",
+ "ギ": "gi",
+ "マ": "ma",
+ "テ": "te",
+ "ソ": "so",
+ "ミ": "mi",
+ "ト": "to",
+ "ジャ": "ja",
+ "グァ": "gwa",
+ "ナ": "na",
+ "ム": "mu",
+ "メ": "me",
+ "ニ": "ni",
+ "ベ": "be",
+ "モ": "mo",
+ "ヌ": "nu",
+ "ジュ": "ju",
+ "ペ": "pe",
+ "グィ": "gwi",
+ "ネ": "ne",
+ "ヤ": "ya",
+ "ぎゃ": "gya",
+ "ディ": "di",
+ "ノ": "no",
+ "ハ": "ha",
+ "ジョ": "jo",
+ "ウィ": "wi",
+ "ヒ": "hi",
+ "にぇ": "nye",
+ "ティ": "ti",
+ "ユ": "yu",
+ "ぎゅ": "gyu",
+ "ヨ": "yo",
+ "フ": "hu",
+ "ヘ": "he",
+ "ラ": "ra",
+ "ウェ": "we",
+ "ホ": "ho",
+ "こ゚": "ngo",
+ "マ": "ma",
+ "リ": "ri",
+ "ル": "ru",
+ "ミ": "mi",
+ "ぎょ": "gyo",
+ "レ": "re",
+ "ム": "mu",
+ "テェ": "tye",
+ "ロ": "ro",
+ "グォ": "gwo",
+ "メ": "me",
+ "デェ": "de",
+ "カ゚": "nga",
+ "モ": "mo",
+ "ワ": "wa",
+ "ヤ": "ya",
+ "フャ": "fya",
+ "ビョ": "byo",
+ "ユ": "yu",
+ "デャ": "dya",
+ "ッ": "cl",
+ "ヨ": "yo",
+ "ヲ": "wo",
+ "ラ": "ra",
+ "フュ": "fyu",
+ "リ": "ri",
+ "ン": "N",
+ "ヴ": "vu",
+ "ル": "ru",
+ "カ゚": "nga",
+ "デュ": "dyu",
+ "レ": "re",
+ "フョ": "fyo",
+ "ロ": "ro",
+ "デョ": "tyo",
+ "ワ": "wa",
+ "ン": "N",
+ "ピェ": "pye",
+ "ぐぁ": "gwa",
+ "き゚ゃ": "ngya",
+ "ぐぃ": "gwi",
+ "ピャ": "pya",
+ "ズ": "zu",
+ "てぃ": "ti",
+ "ピュ": "pyu",
+ "き゚ゅ": "ngyu",
+ "ぐぇ": "gwe",
+ "ピョ": "pyo",
+ "てぇ": "tye",
+ "ぐぉ": "gwo",
+ "き゚ょ": "ngyo",
+ "ふゃ": "fya",
+ "トゥ": "tu",
+ "ふゅ": "fyu",
+ "チェ": "che",
+ "ふょ": "fyo",
+ "ケ゚": "nge",
+ "グ": "gu",
+ "ヴァ": "va",
+ "ボ": "bo",
+ "ウィ": "wi",
+ "ポ": "po",
+ "ヴィ": "vi",
+ "ちぇ": "che",
+ "ディ": "di",
+ "ウェ": "we",
+ "ヴェ": "ve",
+ "ヴォ": "vo",
+ "デェ": "dye",
+ "ヒェ": "hye",
+ "キ゚": "ngi",
+ "ニャ": "nya",
+ "ヴャ": "vya",
+ "ニュ": "nyu",
+ "ブュ": "vyu",
+ "ニョ": "nyo",
+ "ヴゃ": "vya",
+ "ヴゅ": "vyu",
+ "うぃ": "wi",
+ "ヴ": "vu",
+ "ヴょ": "vyo",
+ "ゼ": "ze",
+ "でぃ": "di",
+ "うぇ": "we",
+ "でぇ": "dye",
+ "ひぇ": "hye",
+ "にゃ": "nya",
+ "く゚": "ngu",
+ "にゅ": "nyu",
+ "シェ": "she",
+ "キ゚ェ": "ngye",
+ "コォ": "kwo",
+ "ミェ": "mye",
+ "テャ": "tya",
+ "にょ": "nyo",
+ "ミャ": "mya",
+ "テュ": "tyu",
+ "ミュ": "myu",
+ "ミョ": "myo",
+ "ゲ": "ge",
+ "ド": "do",
+ "しぇ": "she",
+ "ぢぇ": "dye",
+ "てゃ": "tya",
+ "ヴァ": "va",
+ "トゥ": "tu",
+ "てゅ": "tyu",
+ "ヴィ": "vi",
+ "ヒェ": "hye",
+ "チャ": "cha",
+ "てょ": "tyo",
+ "ビェ": "bye",
+ "ク゚": "ngu",
+ "ヒャ": "hya",
+ "チュ": "chu",
+ "ヒュ": "hyu",
+ "ヴェ": "ve",
+ "ヒョ": "hyo",
+ "チョ": "cho",
+ "キ゚": "ngi",
+ "ヴォ": "vo",
+ "ゾ": "zo",
+ "バ": "ba",
+ "パ": "pa",
+ "とぅ": "tu",
+ "ちゃ": "cha",
+ "びぇ": "bye",
+ "ちゅ": "chu",
+ "キェ": "kye",
+ "ジェ": "je",
+ "ニェ": "nye",
+ "ちょ": "cho",
+ "デャ": "dya",
+ "ニャ": "nya",
+ "ヒャ": "hya",
+ "ニュ": "nyu",
+ "デュ": "dyu",
+ "グァ": "gwa",
+ "ニョ": "nyo",
+ "ヒュ": "hyu",
+ "グィ": "gwi",
+ "デョ": "tyo",
+ "コ゚": "ngo",
+ "ヒョ": "hyo",
+ "グォ": "gwo",
+ "ゴ": "go",
+ "きぇ": "kye",
+ "じぇ": "je",
+ "あ": "a",
+ "でゃ": "dya",
+ "ファ": "fa",
+ "ひゃ": "hya",
+ "い": "i",
+ "フィ": "fi",
+ "か゚": "nga",
+ "ドゥ": "du",
+ "でゅ": "dyu",
+ "う": "u",
+ "フゥ": "fu",
+ "チェ": "che",
+ "ひゅ": "hyu",
+ "シャ": "sha",
+ "フェ": "fe",
+ "き゚ぇ": "ngye",
+ "え": "e",
+ "コォ": "kwo",
+ "フォ": "fo",
+ "チャ": "cha",
+ "ピェ": "pye",
+ "ひょ": "hyo",
+ "シュ": "shu",
+ "か": "ka",
+ "フャ": "fya",
+ "ミェ": "mye",
+ "が": "ga",
+ "リェ": "rye",
+ "お": "o",
+ "き": "ki",
+ "チュ": "chu",
+ "フュ": "fyu",
+ "ぎ": "gi",
+ "ショ": "sho",
+ "ケ゚": "nge",
+ "く": "ku",
+ "チョ": "cho",
+ "フョ": "fyo",
+ "ぐ": "gu",
+ "け": "ke",
+ "げ": "ge",
+ "こ": "ko",
+ "ご": "go",
+ "さ": "sa",
+ "ざ": "za",
+ "し": "shi",
+ "じ": "ji",
+ "す": "su",
+ "ず": "zu",
+ "せ": "se",
+ "ダ": "da",
+ "ぜ": "ze",
+ "ビ": "bi",
+ "そ": "so",
+ "ぞ": "zo",
+ "ピ": "pi",
+ "ツァ": "tsa",
+ "た": "ta",
+ "どぅ": "du",
+ "だ": "da",
+ "スィ": "si",
+ "ち": "chi",
+ "しゃ": "sha",
+ "ツィ": "tsi",
+ "っ": "cl",
+ "ぴぇ": "pye",
+ "つ": "tsu",
+ "しゅ": "shu",
+ "みぇ": "mye",
+ "て": "te",
+ "け゚": "nge",
+ "りぇ": "rye",
+ "で": "de",
+ "ギェ": "gye",
+ "シェ": "she",
+ "と": "to",
+ "しょ": "sho",
+ "ツェ": "tse",
+ "ど": "do",
+ "ぢょ": "dyo",
+ "ギェ": "gye",
+ "な": "na",
+ "シャ": "sha",
+ "に": "ni",
+ "ビャ": "bya",
+ "ぬ": "nu",
+ "ツォ": "tso",
+ "ギャ": "gya",
+ "ね": "ne",
+ "シュ": "shu",
+ "ショ": "sho",
+ "の": "no",
+ "は": "ha",
+ "ビュ": "byu",
+ "ヴャ": "vya",
+ "ば": "ba",
+ "ギュ": "gyu",
+ "ぱ": "pa",
+ "ひ": "hi",
+ "ビョ": "byo",
+ "ギョ": "gyo",
+ "び": "bi",
+ "ぴ": "pi",
+ "ふ": "hu",
+ "ぶ": "bu",
+ "ぷ": "pu",
+ "へ": "he",
+ "つぁ": "tsa",
+ "べ": "be",
+ "ぺ": "pe",
+ "すぃ": "si",
+ "ほ": "ho",
+ "ザ": "za",
+ "つぃ": "tsi",
+ "ぼ": "bo",
+ "ぽ": "po",
+ "ま": "ma",
+ "み": "mi",
+ "む": "mu",
+ "ぎぇ": "gye",
+ "め": "me",
+ "ファ": "fa",
+ "も": "mo",
+ "つぇ": "tse",
+ "ツァ": "tsa",
+ "や": "ya",
+ "ツィ": "tsi",
+ "フィ": "fi",
+ "びゃ": "bya",
+ "つぉ": "tso",
+ "ゆ": "yu",
+ "キェ": "kye",
+ "キャ": "kya",
+ "フゥ": "fu",
+ "づ": "zu"
+ },
+ "plans":
+ [
+ {
+ "language": "zh",
+ "syllable_alias":
+ {
+ "lue": "lve",
+ "m": "mm",
+ "n": "nn",
+ "yvan": "yuan",
+ "yv": "yu",
+ "qvan": "quan",
+ "xv": "xu",
+ "qv": "qu",
+ "jve": "jue",
+ "xvn": "xun",
+ "qve": "que",
+ "xvan": "xuan",
+ "qvn": "qun",
+ "jvn": "jun",
+ "xve": "xue",
+ "yve": "yue",
+ "yvn": "yun",
+ "jvan": "juan"
+ },
+ "dict":
+ {
+ "zi":
+ [
+ "z",
+ "ii"
+ ],
+ "ci":
+ [
+ "c",
+ "ii"
+ ],
+ "si":
+ [
+ "s",
+ "ii"
+ ],
+ "ii":
+ [
+ "ii"
+ ],
+ "zhi":
+ [
+ "zh",
+ "iii"
+ ],
+ "chi":
+ [
+ "ch",
+ "iii"
+ ],
+ "shi":
+ [
+ "sh",
+ "iii"
+ ],
+ "ri":
+ [
+ "r",
+ "iii"
+ ],
+ "iii":
+ [
+ "iii"
+ ],
+ "bi":
+ [
+ "b",
+ "i"
+ ],
+ "pi":
+ [
+ "p",
+ "i"
+ ],
+ "mi":
+ [
+ "m",
+ "i"
+ ],
+ "fi":
+ [
+ "f",
+ "i"
+ ],
+ "di":
+ [
+ "d",
+ "i"
+ ],
+ "ti":
+ [
+ "t",
+ "i"
+ ],
+ "ni":
+ [
+ "n",
+ "i"
+ ],
+ "li":
+ [
+ "l",
+ "i"
+ ],
+ "zyi":
+ [
+ "z",
+ "i"
+ ],
+ "cyi":
+ [
+ "c",
+ "i"
+ ],
+ "syi":
+ [
+ "s",
+ "i"
+ ],
+ "zhyi":
+ [
+ "zh",
+ "i"
+ ],
+ "chyi":
+ [
+ "ch",
+ "i"
+ ],
+ "shyi":
+ [
+ "sh",
+ "i"
+ ],
+ "ji":
+ [
+ "j",
+ "i"
+ ],
+ "qi":
+ [
+ "q",
+ "i"
+ ],
+ "xi":
+ [
+ "x",
+ "i"
+ ],
+ "gi":
+ [
+ "g",
+ "i"
+ ],
+ "ki":
+ [
+ "k",
+ "i"
+ ],
+ "hi":
+ [
+ "h",
+ "i"
+ ],
+ "ryi":
+ [
+ "r",
+ "i"
+ ],
+ "yi":
+ [
+ "y",
+ "i"
+ ],
+ "i":
+ [
+ "i"
+ ],
+ "bu":
+ [
+ "b",
+ "u"
+ ],
+ "pu":
+ [
+ "p",
+ "u"
+ ],
+ "mu":
+ [
+ "m",
+ "u"
+ ],
+ "fu":
+ [
+ "f",
+ "u"
+ ],
+ "du":
+ [
+ "d",
+ "u"
+ ],
+ "tu":
+ [
+ "t",
+ "u"
+ ],
+ "nu":
+ [
+ "n",
+ "u"
+ ],
+ "lu":
+ [
+ "l",
+ "u"
+ ],
+ "zu":
+ [
+ "z",
+ "u"
+ ],
+ "cu":
+ [
+ "c",
+ "u"
+ ],
+ "su":
+ [
+ "s",
+ "u"
+ ],
+ "zhu":
+ [
+ "zh",
+ "u"
+ ],
+ "chu":
+ [
+ "ch",
+ "u"
+ ],
+ "shu":
+ [
+ "sh",
+ "u"
+ ],
+ "gu":
+ [
+ "g",
+ "u"
+ ],
+ "ku":
+ [
+ "k",
+ "u"
+ ],
+ "hu":
+ [
+ "h",
+ "u"
+ ],
+ "ru":
+ [
+ "r",
+ "u"
+ ],
+ "wu":
+ [
+ "w",
+ "u"
+ ],
+ "u":
+ [
+ "u"
+ ],
+ "bv":
+ [
+ "b",
+ "v"
+ ],
+ "pv":
+ [
+ "p",
+ "v"
+ ],
+ "mv":
+ [
+ "m",
+ "v"
+ ],
+ "fv":
+ [
+ "f",
+ "v"
+ ],
+ "dv":
+ [
+ "d",
+ "v"
+ ],
+ "tv":
+ [
+ "t",
+ "v"
+ ],
+ "nv":
+ [
+ "n",
+ "v"
+ ],
+ "lv":
+ [
+ "l",
+ "v"
+ ],
+ "zv":
+ [
+ "z",
+ "v"
+ ],
+ "cv":
+ [
+ "c",
+ "v"
+ ],
+ "sv":
+ [
+ "s",
+ "v"
+ ],
+ "zhv":
+ [
+ "zh",
+ "v"
+ ],
+ "chv":
+ [
+ "ch",
+ "v"
+ ],
+ "shv":
+ [
+ "sh",
+ "v"
+ ],
+ "ju":
+ [
+ "j",
+ "v"
+ ],
+ "qu":
+ [
+ "q",
+ "v"
+ ],
+ "xu":
+ [
+ "x",
+ "v"
+ ],
+ "gv":
+ [
+ "g",
+ "v"
+ ],
+ "kv":
+ [
+ "k",
+ "v"
+ ],
+ "hv":
+ [
+ "h",
+ "v"
+ ],
+ "rv":
+ [
+ "r",
+ "v"
+ ],
+ "yu":
+ [
+ "y",
+ "v"
+ ],
+ "v":
+ [
+ "v"
+ ],
+ "ba":
+ [
+ "b",
+ "a"
+ ],
+ "pa":
+ [
+ "p",
+ "a"
+ ],
+ "ma":
+ [
+ "m",
+ "a"
+ ],
+ "fa":
+ [
+ "f",
+ "a"
+ ],
+ "da":
+ [
+ "d",
+ "a"
+ ],
+ "ta":
+ [
+ "t",
+ "a"
+ ],
+ "na":
+ [
+ "n",
+ "a"
+ ],
+ "la":
+ [
+ "l",
+ "a"
+ ],
+ "za":
+ [
+ "z",
+ "a"
+ ],
+ "ca":
+ [
+ "c",
+ "a"
+ ],
+ "sa":
+ [
+ "s",
+ "a"
+ ],
+ "zha":
+ [
+ "zh",
+ "a"
+ ],
+ "cha":
+ [
+ "ch",
+ "a"
+ ],
+ "sha":
+ [
+ "sh",
+ "a"
+ ],
+ "ga":
+ [
+ "g",
+ "a"
+ ],
+ "ka":
+ [
+ "k",
+ "a"
+ ],
+ "ha":
+ [
+ "h",
+ "a"
+ ],
+ "ra":
+ [
+ "r",
+ "a"
+ ],
+ "a":
+ [
+ "a"
+ ],
+ "bia":
+ [
+ "b",
+ "ia"
+ ],
+ "pia":
+ [
+ "p",
+ "ia"
+ ],
+ "mia":
+ [
+ "m",
+ "ia"
+ ],
+ "fia":
+ [
+ "f",
+ "ia"
+ ],
+ "dia":
+ [
+ "d",
+ "ia"
+ ],
+ "tia":
+ [
+ "t",
+ "ia"
+ ],
+ "nia":
+ [
+ "n",
+ "ia"
+ ],
+ "lia":
+ [
+ "l",
+ "ia"
+ ],
+ "zia":
+ [
+ "z",
+ "ia"
+ ],
+ "cia":
+ [
+ "c",
+ "ia"
+ ],
+ "sia":
+ [
+ "s",
+ "ia"
+ ],
+ "jia":
+ [
+ "j",
+ "ia"
+ ],
+ "qia":
+ [
+ "q",
+ "ia"
+ ],
+ "xia":
+ [
+ "x",
+ "ia"
+ ],
+ "gia":
+ [
+ "g",
+ "ia"
+ ],
+ "kia":
+ [
+ "k",
+ "ia"
+ ],
+ "hia":
+ [
+ "h",
+ "ia"
+ ],
+ "ya":
+ [
+ "y",
+ "ia"
+ ],
+ "ia":
+ [
+ "ia"
+ ],
+ "bua":
+ [
+ "b",
+ "ua"
+ ],
+ "pua":
+ [
+ "p",
+ "ua"
+ ],
+ "mua":
+ [
+ "m",
+ "ua"
+ ],
+ "fua":
+ [
+ "f",
+ "ua"
+ ],
+ "dua":
+ [
+ "d",
+ "ua"
+ ],
+ "tua":
+ [
+ "t",
+ "ua"
+ ],
+ "nua":
+ [
+ "n",
+ "ua"
+ ],
+ "lua":
+ [
+ "l",
+ "ua"
+ ],
+ "zua":
+ [
+ "z",
+ "ua"
+ ],
+ "cua":
+ [
+ "c",
+ "ua"
+ ],
+ "sua":
+ [
+ "s",
+ "ua"
+ ],
+ "zhua":
+ [
+ "zh",
+ "ua"
+ ],
+ "chua":
+ [
+ "ch",
+ "ua"
+ ],
+ "shua":
+ [
+ "sh",
+ "ua"
+ ],
+ "gua":
+ [
+ "g",
+ "ua"
+ ],
+ "kua":
+ [
+ "k",
+ "ua"
+ ],
+ "hua":
+ [
+ "h",
+ "ua"
+ ],
+ "rua":
+ [
+ "r",
+ "ua"
+ ],
+ "wa":
+ [
+ "w",
+ "ua"
+ ],
+ "ua":
+ [
+ "ua"
+ ],
+ "beh":
+ [
+ "b",
+ "eh"
+ ],
+ "peh":
+ [
+ "p",
+ "eh"
+ ],
+ "meh":
+ [
+ "m",
+ "eh"
+ ],
+ "feh":
+ [
+ "f",
+ "eh"
+ ],
+ "deh":
+ [
+ "d",
+ "eh"
+ ],
+ "teh":
+ [
+ "t",
+ "eh"
+ ],
+ "neh":
+ [
+ "n",
+ "eh"
+ ],
+ "leh":
+ [
+ "l",
+ "eh"
+ ],
+ "zeh":
+ [
+ "z",
+ "eh"
+ ],
+ "ceh":
+ [
+ "c",
+ "eh"
+ ],
+ "seh":
+ [
+ "s",
+ "eh"
+ ],
+ "zheh":
+ [
+ "zh",
+ "eh"
+ ],
+ "cheh":
+ [
+ "ch",
+ "eh"
+ ],
+ "sheh":
+ [
+ "sh",
+ "eh"
+ ],
+ "geh":
+ [
+ "g",
+ "eh"
+ ],
+ "keh":
+ [
+ "k",
+ "eh"
+ ],
+ "heh":
+ [
+ "h",
+ "eh"
+ ],
+ "reh":
+ [
+ "r",
+ "eh"
+ ],
+ "eh":
+ [
+ "eh"
+ ],
+ "be":
+ [
+ "b",
+ "e"
+ ],
+ "pe":
+ [
+ "p",
+ "e"
+ ],
+ "me":
+ [
+ "m",
+ "e"
+ ],
+ "fe":
+ [
+ "f",
+ "e"
+ ],
+ "de":
+ [
+ "d",
+ "e"
+ ],
+ "te":
+ [
+ "t",
+ "e"
+ ],
+ "ne":
+ [
+ "n",
+ "e"
+ ],
+ "le":
+ [
+ "l",
+ "e"
+ ],
+ "ze":
+ [
+ "z",
+ "e"
+ ],
+ "ce":
+ [
+ "c",
+ "e"
+ ],
+ "se":
+ [
+ "s",
+ "e"
+ ],
+ "zhe":
+ [
+ "zh",
+ "e"
+ ],
+ "che":
+ [
+ "ch",
+ "e"
+ ],
+ "she":
+ [
+ "sh",
+ "e"
+ ],
+ "ge":
+ [
+ "g",
+ "e"
+ ],
+ "ke":
+ [
+ "k",
+ "e"
+ ],
+ "he":
+ [
+ "h",
+ "e"
+ ],
+ "re":
+ [
+ "r",
+ "e"
+ ],
+ "e":
+ [
+ "e"
+ ],
+ "bo":
+ [
+ "b",
+ "uo"
+ ],
+ "po":
+ [
+ "p",
+ "uo"
+ ],
+ "mo":
+ [
+ "m",
+ "uo"
+ ],
+ "fo":
+ [
+ "f",
+ "uo"
+ ],
+ "duo":
+ [
+ "d",
+ "uo"
+ ],
+ "tuo":
+ [
+ "t",
+ "uo"
+ ],
+ "nuo":
+ [
+ "n",
+ "uo"
+ ],
+ "luo":
+ [
+ "l",
+ "uo"
+ ],
+ "zuo":
+ [
+ "z",
+ "uo"
+ ],
+ "cuo":
+ [
+ "c",
+ "uo"
+ ],
+ "suo":
+ [
+ "s",
+ "uo"
+ ],
+ "zhuo":
+ [
+ "zh",
+ "uo"
+ ],
+ "chuo":
+ [
+ "ch",
+ "uo"
+ ],
+ "shuo":
+ [
+ "sh",
+ "uo"
+ ],
+ "guo":
+ [
+ "g",
+ "uo"
+ ],
+ "kuo":
+ [
+ "k",
+ "uo"
+ ],
+ "huo":
+ [
+ "h",
+ "uo"
+ ],
+ "ruo":
+ [
+ "r",
+ "uo"
+ ],
+ "wo":
+ [
+ "w",
+ "uo"
+ ],
+ "uo":
+ [
+ "uo"
+ ],
+ "no":
+ [
+ "n",
+ "o"
+ ],
+ "lo":
+ [
+ "l",
+ "o"
+ ],
+ "so":
+ [
+ "s",
+ "o"
+ ],
+ "go":
+ [
+ "g",
+ "o"
+ ],
+ "ko":
+ [
+ "k",
+ "o"
+ ],
+ "ho":
+ [
+ "h",
+ "o"
+ ],
+ "o":
+ [
+ "o"
+ ],
+ "yo":
+ [
+ "y",
+ "io"
+ ],
+ "io":
+ [
+ "io"
+ ],
+ "bae":
+ [
+ "b",
+ "ae"
+ ],
+ "pae":
+ [
+ "p",
+ "ae"
+ ],
+ "mae":
+ [
+ "m",
+ "ae"
+ ],
+ "fae":
+ [
+ "f",
+ "ae"
+ ],
+ "dae":
+ [
+ "d",
+ "ae"
+ ],
+ "tae":
+ [
+ "t",
+ "ae"
+ ],
+ "nae":
+ [
+ "n",
+ "ae"
+ ],
+ "lae":
+ [
+ "l",
+ "ae"
+ ],
+ "zae":
+ [
+ "z",
+ "ae"
+ ],
+ "cae":
+ [
+ "c",
+ "ae"
+ ],
+ "sae":
+ [
+ "s",
+ "ae"
+ ],
+ "zhae":
+ [
+ "zh",
+ "ae"
+ ],
+ "chae":
+ [
+ "ch",
+ "ae"
+ ],
+ "shae":
+ [
+ "sh",
+ "ae"
+ ],
+ "gae":
+ [
+ "g",
+ "ae"
+ ],
+ "kae":
+ [
+ "k",
+ "ae"
+ ],
+ "hae":
+ [
+ "h",
+ "ae"
+ ],
+ "rae":
+ [
+ "r",
+ "ae"
+ ],
+ "ae":
+ [
+ "ae"
+ ],
+ "bie":
+ [
+ "b",
+ "ie"
+ ],
+ "pie":
+ [
+ "p",
+ "ie"
+ ],
+ "mie":
+ [
+ "m",
+ "ie"
+ ],
+ "fie":
+ [
+ "f",
+ "ie"
+ ],
+ "die":
+ [
+ "d",
+ "ie"
+ ],
+ "tie":
+ [
+ "t",
+ "ie"
+ ],
+ "nie":
+ [
+ "n",
+ "ie"
+ ],
+ "lie":
+ [
+ "l",
+ "ie"
+ ],
+ "zie":
+ [
+ "z",
+ "ie"
+ ],
+ "cie":
+ [
+ "c",
+ "ie"
+ ],
+ "sie":
+ [
+ "s",
+ "ie"
+ ],
+ "zhie":
+ [
+ "zh",
+ "ie"
+ ],
+ "chie":
+ [
+ "ch",
+ "ie"
+ ],
+ "shie":
+ [
+ "sh",
+ "ie"
+ ],
+ "jie":
+ [
+ "j",
+ "ie"
+ ],
+ "qie":
+ [
+ "q",
+ "ie"
+ ],
+ "xie":
+ [
+ "x",
+ "ie"
+ ],
+ "gie":
+ [
+ "g",
+ "ie"
+ ],
+ "kie":
+ [
+ "k",
+ "ie"
+ ],
+ "hie":
+ [
+ "h",
+ "ie"
+ ],
+ "rie":
+ [
+ "r",
+ "ie"
+ ],
+ "ye":
+ [
+ "y",
+ "ie"
+ ],
+ "ie":
+ [
+ "ie"
+ ],
+ "ruae":
+ [
+ "r",
+ "uae"
+ ],
+ "wae":
+ [
+ "w",
+ "uae"
+ ],
+ "uae":
+ [
+ "uae"
+ ],
+ "bve":
+ [
+ "b",
+ "ve"
+ ],
+ "pve":
+ [
+ "p",
+ "ve"
+ ],
+ "mve":
+ [
+ "m",
+ "ve"
+ ],
+ "fve":
+ [
+ "f",
+ "ve"
+ ],
+ "dve":
+ [
+ "d",
+ "ve"
+ ],
+ "tve":
+ [
+ "t",
+ "ve"
+ ],
+ "nve":
+ [
+ "n",
+ "ve"
+ ],
+ "lve":
+ [
+ "l",
+ "ve"
+ ],
+ "chue":
+ [
+ "ch",
+ "ve"
+ ],
+ "jue":
+ [
+ "j",
+ "ve"
+ ],
+ "que":
+ [
+ "q",
+ "ve"
+ ],
+ "xue":
+ [
+ "x",
+ "ve"
+ ],
+ "gve":
+ [
+ "g",
+ "ve"
+ ],
+ "kve":
+ [
+ "k",
+ "ve"
+ ],
+ "hve":
+ [
+ "h",
+ "ve"
+ ],
+ "rue":
+ [
+ "r",
+ "ve"
+ ],
+ "yue":
+ [
+ "y",
+ "ve"
+ ],
+ "ve":
+ [
+ "ve"
+ ],
+ "bai":
+ [
+ "b",
+ "ai"
+ ],
+ "pai":
+ [
+ "p",
+ "ai"
+ ],
+ "mai":
+ [
+ "m",
+ "ai"
+ ],
+ "fai":
+ [
+ "f",
+ "ai"
+ ],
+ "dai":
+ [
+ "d",
+ "ai"
+ ],
+ "tai":
+ [
+ "t",
+ "ai"
+ ],
+ "nai":
+ [
+ "n",
+ "ai"
+ ],
+ "lai":
+ [
+ "l",
+ "ai"
+ ],
+ "zai":
+ [
+ "z",
+ "ai"
+ ],
+ "cai":
+ [
+ "c",
+ "ai"
+ ],
+ "sai":
+ [
+ "s",
+ "ai"
+ ],
+ "zhai":
+ [
+ "zh",
+ "ai"
+ ],
+ "chai":
+ [
+ "ch",
+ "ai"
+ ],
+ "shai":
+ [
+ "sh",
+ "ai"
+ ],
+ "gai":
+ [
+ "g",
+ "ai"
+ ],
+ "kai":
+ [
+ "k",
+ "ai"
+ ],
+ "hai":
+ [
+ "h",
+ "ai"
+ ],
+ "rai":
+ [
+ "r",
+ "ai"
+ ],
+ "ai":
+ [
+ "ai"
+ ],
+ "yai":
+ [
+ "y",
+ "iai"
+ ],
+ "iai":
+ [
+ "iai"
+ ],
+ "buai":
+ [
+ "b",
+ "uai"
+ ],
+ "puai":
+ [
+ "p",
+ "uai"
+ ],
+ "muai":
+ [
+ "m",
+ "uai"
+ ],
+ "fuai":
+ [
+ "f",
+ "uai"
+ ],
+ "duai":
+ [
+ "d",
+ "uai"
+ ],
+ "tuai":
+ [
+ "t",
+ "uai"
+ ],
+ "nuai":
+ [
+ "n",
+ "uai"
+ ],
+ "luai":
+ [
+ "l",
+ "uai"
+ ],
+ "zuai":
+ [
+ "z",
+ "uai"
+ ],
+ "cuai":
+ [
+ "c",
+ "uai"
+ ],
+ "suai":
+ [
+ "s",
+ "uai"
+ ],
+ "zhuai":
+ [
+ "zh",
+ "uai"
+ ],
+ "chuai":
+ [
+ "ch",
+ "uai"
+ ],
+ "shuai":
+ [
+ "sh",
+ "uai"
+ ],
+ "guai":
+ [
+ "g",
+ "uai"
+ ],
+ "kuai":
+ [
+ "k",
+ "uai"
+ ],
+ "huai":
+ [
+ "h",
+ "uai"
+ ],
+ "ruai":
+ [
+ "r",
+ "uai"
+ ],
+ "wai":
+ [
+ "w",
+ "uai"
+ ],
+ "uai":
+ [
+ "uai"
+ ],
+ "bei":
+ [
+ "b",
+ "ei"
+ ],
+ "pei":
+ [
+ "p",
+ "ei"
+ ],
+ "mei":
+ [
+ "m",
+ "ei"
+ ],
+ "fei":
+ [
+ "f",
+ "ei"
+ ],
+ "dei":
+ [
+ "d",
+ "ei"
+ ],
+ "tei":
+ [
+ "t",
+ "ei"
+ ],
+ "nei":
+ [
+ "n",
+ "ei"
+ ],
+ "lei":
+ [
+ "l",
+ "ei"
+ ],
+ "zei":
+ [
+ "z",
+ "ei"
+ ],
+ "cei":
+ [
+ "c",
+ "ei"
+ ],
+ "sei":
+ [
+ "s",
+ "ei"
+ ],
+ "zhei":
+ [
+ "zh",
+ "ei"
+ ],
+ "chei":
+ [
+ "ch",
+ "ei"
+ ],
+ "shei":
+ [
+ "sh",
+ "ei"
+ ],
+ "gei":
+ [
+ "g",
+ "ei"
+ ],
+ "kei":
+ [
+ "k",
+ "ei"
+ ],
+ "hei":
+ [
+ "h",
+ "ei"
+ ],
+ "rei":
+ [
+ "r",
+ "ei"
+ ],
+ "ei":
+ [
+ "ei"
+ ],
+ "yei":
+ [
+ "y",
+ "iei"
+ ],
+ "iei":
+ [
+ "iei"
+ ],
+ "bui":
+ [
+ "b",
+ "uei"
+ ],
+ "pui":
+ [
+ "p",
+ "uei"
+ ],
+ "mui":
+ [
+ "m",
+ "uei"
+ ],
+ "fui":
+ [
+ "f",
+ "uei"
+ ],
+ "dui":
+ [
+ "d",
+ "uei"
+ ],
+ "tui":
+ [
+ "t",
+ "uei"
+ ],
+ "nui":
+ [
+ "n",
+ "uei"
+ ],
+ "lui":
+ [
+ "l",
+ "uei"
+ ],
+ "zui":
+ [
+ "z",
+ "uei"
+ ],
+ "cui":
+ [
+ "c",
+ "uei"
+ ],
+ "sui":
+ [
+ "s",
+ "uei"
+ ],
+ "zhui":
+ [
+ "zh",
+ "uei"
+ ],
+ "chui":
+ [
+ "ch",
+ "uei"
+ ],
+ "shui":
+ [
+ "sh",
+ "uei"
+ ],
+ "gui":
+ [
+ "g",
+ "uei"
+ ],
+ "kui":
+ [
+ "k",
+ "uei"
+ ],
+ "hui":
+ [
+ "h",
+ "uei"
+ ],
+ "rui":
+ [
+ "r",
+ "uei"
+ ],
+ "wei":
+ [
+ "w",
+ "uei"
+ ],
+ "uei":
+ [
+ "uei"
+ ],
+ "bao":
+ [
+ "b",
+ "ao"
+ ],
+ "pao":
+ [
+ "p",
+ "ao"
+ ],
+ "mao":
+ [
+ "m",
+ "ao"
+ ],
+ "fao":
+ [
+ "f",
+ "ao"
+ ],
+ "dao":
+ [
+ "d",
+ "ao"
+ ],
+ "tao":
+ [
+ "t",
+ "ao"
+ ],
+ "nao":
+ [
+ "n",
+ "ao"
+ ],
+ "lao":
+ [
+ "l",
+ "ao"
+ ],
+ "zao":
+ [
+ "z",
+ "ao"
+ ],
+ "cao":
+ [
+ "c",
+ "ao"
+ ],
+ "sao":
+ [
+ "s",
+ "ao"
+ ],
+ "zhao":
+ [
+ "zh",
+ "ao"
+ ],
+ "chao":
+ [
+ "ch",
+ "ao"
+ ],
+ "shao":
+ [
+ "sh",
+ "ao"
+ ],
+ "gao":
+ [
+ "g",
+ "ao"
+ ],
+ "kao":
+ [
+ "k",
+ "ao"
+ ],
+ "hao":
+ [
+ "h",
+ "ao"
+ ],
+ "rao":
+ [
+ "r",
+ "ao"
+ ],
+ "ao":
+ [
+ "ao"
+ ],
+ "biao":
+ [
+ "b",
+ "iao"
+ ],
+ "piao":
+ [
+ "p",
+ "iao"
+ ],
+ "miao":
+ [
+ "m",
+ "iao"
+ ],
+ "fiao":
+ [
+ "f",
+ "iao"
+ ],
+ "diao":
+ [
+ "d",
+ "iao"
+ ],
+ "tiao":
+ [
+ "t",
+ "iao"
+ ],
+ "niao":
+ [
+ "n",
+ "iao"
+ ],
+ "liao":
+ [
+ "l",
+ "iao"
+ ],
+ "ziao":
+ [
+ "z",
+ "iao"
+ ],
+ "ciao":
+ [
+ "c",
+ "iao"
+ ],
+ "siao":
+ [
+ "s",
+ "iao"
+ ],
+ "jiao":
+ [
+ "j",
+ "iao"
+ ],
+ "qiao":
+ [
+ "q",
+ "iao"
+ ],
+ "xiao":
+ [
+ "x",
+ "iao"
+ ],
+ "giao":
+ [
+ "g",
+ "iao"
+ ],
+ "kiao":
+ [
+ "k",
+ "iao"
+ ],
+ "hiao":
+ [
+ "h",
+ "iao"
+ ],
+ "yao":
+ [
+ "y",
+ "iao"
+ ],
+ "iao":
+ [
+ "iao"
+ ],
+ "wao":
+ [
+ "w",
+ "uao"
+ ],
+ "uao":
+ [
+ "uao"
+ ],
+ "bou":
+ [
+ "b",
+ "ou"
+ ],
+ "pou":
+ [
+ "p",
+ "ou"
+ ],
+ "mou":
+ [
+ "m",
+ "ou"
+ ],
+ "fou":
+ [
+ "f",
+ "ou"
+ ],
+ "dou":
+ [
+ "d",
+ "ou"
+ ],
+ "tou":
+ [
+ "t",
+ "ou"
+ ],
+ "nou":
+ [
+ "n",
+ "ou"
+ ],
+ "lou":
+ [
+ "l",
+ "ou"
+ ],
+ "zou":
+ [
+ "z",
+ "ou"
+ ],
+ "cou":
+ [
+ "c",
+ "ou"
+ ],
+ "sou":
+ [
+ "s",
+ "ou"
+ ],
+ "zhou":
+ [
+ "zh",
+ "ou"
+ ],
+ "chou":
+ [
+ "ch",
+ "ou"
+ ],
+ "shou":
+ [
+ "sh",
+ "ou"
+ ],
+ "gou":
+ [
+ "g",
+ "ou"
+ ],
+ "kou":
+ [
+ "k",
+ "ou"
+ ],
+ "hou":
+ [
+ "h",
+ "ou"
+ ],
+ "rou":
+ [
+ "r",
+ "ou"
+ ],
+ "ou":
+ [
+ "ou"
+ ],
+ "biu":
+ [
+ "b",
+ "iou"
+ ],
+ "piu":
+ [
+ "p",
+ "iou"
+ ],
+ "miu":
+ [
+ "m",
+ "iou"
+ ],
+ "fiu":
+ [
+ "f",
+ "iou"
+ ],
+ "diu":
+ [
+ "d",
+ "iou"
+ ],
+ "tiu":
+ [
+ "t",
+ "iou"
+ ],
+ "niu":
+ [
+ "n",
+ "iou"
+ ],
+ "liu":
+ [
+ "l",
+ "iou"
+ ],
+ "jiu":
+ [
+ "j",
+ "iou"
+ ],
+ "qiu":
+ [
+ "q",
+ "iou"
+ ],
+ "xiu":
+ [
+ "x",
+ "iou"
+ ],
+ "kiu":
+ [
+ "k",
+ "iou"
+ ],
+ "you":
+ [
+ "y",
+ "iou"
+ ],
+ "iou":
+ [
+ "iou"
+ ],
+ "wou":
+ [
+ "w",
+ "uou"
+ ],
+ "uou":
+ [
+ "uou"
+ ],
+ "ban":
+ [
+ "b",
+ "an"
+ ],
+ "pan":
+ [
+ "p",
+ "an"
+ ],
+ "man":
+ [
+ "m",
+ "an"
+ ],
+ "fan":
+ [
+ "f",
+ "an"
+ ],
+ "dan":
+ [
+ "d",
+ "an"
+ ],
+ "tan":
+ [
+ "t",
+ "an"
+ ],
+ "nan":
+ [
+ "n",
+ "an"
+ ],
+ "lan":
+ [
+ "l",
+ "an"
+ ],
+ "zan":
+ [
+ "z",
+ "an"
+ ],
+ "can":
+ [
+ "c",
+ "an"
+ ],
+ "san":
+ [
+ "s",
+ "an"
+ ],
+ "zhan":
+ [
+ "zh",
+ "an"
+ ],
+ "chan":
+ [
+ "ch",
+ "an"
+ ],
+ "shan":
+ [
+ "sh",
+ "an"
+ ],
+ "gan":
+ [
+ "g",
+ "an"
+ ],
+ "kan":
+ [
+ "k",
+ "an"
+ ],
+ "han":
+ [
+ "h",
+ "an"
+ ],
+ "ran":
+ [
+ "r",
+ "an"
+ ],
+ "an":
+ [
+ "an"
+ ],
+ "buan":
+ [
+ "b",
+ "uan"
+ ],
+ "puan":
+ [
+ "p",
+ "uan"
+ ],
+ "muan":
+ [
+ "m",
+ "uan"
+ ],
+ "fuan":
+ [
+ "f",
+ "uan"
+ ],
+ "duan":
+ [
+ "d",
+ "uan"
+ ],
+ "tuan":
+ [
+ "t",
+ "uan"
+ ],
+ "nuan":
+ [
+ "n",
+ "uan"
+ ],
+ "luan":
+ [
+ "l",
+ "uan"
+ ],
+ "zuan":
+ [
+ "z",
+ "uan"
+ ],
+ "cuan":
+ [
+ "c",
+ "uan"
+ ],
+ "suan":
+ [
+ "s",
+ "uan"
+ ],
+ "zhuan":
+ [
+ "zh",
+ "uan"
+ ],
+ "chuan":
+ [
+ "ch",
+ "uan"
+ ],
+ "shuan":
+ [
+ "sh",
+ "uan"
+ ],
+ "guan":
+ [
+ "g",
+ "uan"
+ ],
+ "kuan":
+ [
+ "k",
+ "uan"
+ ],
+ "huan":
+ [
+ "h",
+ "uan"
+ ],
+ "ruan":
+ [
+ "r",
+ "uan"
+ ],
+ "wan":
+ [
+ "w",
+ "uan"
+ ],
+ "uan":
+ [
+ "uan"
+ ],
+ "kaen":
+ [
+ "k",
+ "aen"
+ ],
+ "haen":
+ [
+ "h",
+ "aen"
+ ],
+ "aen":
+ [
+ "aen"
+ ],
+ "bian":
+ [
+ "b",
+ "ian"
+ ],
+ "pian":
+ [
+ "p",
+ "ian"
+ ],
+ "mian":
+ [
+ "m",
+ "ian"
+ ],
+ "fian":
+ [
+ "f",
+ "ian"
+ ],
+ "dian":
+ [
+ "d",
+ "ian"
+ ],
+ "tian":
+ [
+ "t",
+ "ian"
+ ],
+ "nian":
+ [
+ "n",
+ "ian"
+ ],
+ "lian":
+ [
+ "l",
+ "ian"
+ ],
+ "zian":
+ [
+ "z",
+ "ian"
+ ],
+ "cian":
+ [
+ "c",
+ "ian"
+ ],
+ "sian":
+ [
+ "s",
+ "ian"
+ ],
+ "zhian":
+ [
+ "zh",
+ "ian"
+ ],
+ "jian":
+ [
+ "j",
+ "ian"
+ ],
+ "qian":
+ [
+ "q",
+ "ian"
+ ],
+ "xian":
+ [
+ "x",
+ "ian"
+ ],
+ "kian":
+ [
+ "k",
+ "ian"
+ ],
+ "yan":
+ [
+ "y",
+ "ian"
+ ],
+ "ian":
+ [
+ "ian"
+ ],
+ "juan":
+ [
+ "j",
+ "van"
+ ],
+ "quan":
+ [
+ "q",
+ "van"
+ ],
+ "xuan":
+ [
+ "x",
+ "van"
+ ],
+ "yuan":
+ [
+ "y",
+ "van"
+ ],
+ "van":
+ [
+ "van"
+ ],
+ "ben":
+ [
+ "b",
+ "en"
+ ],
+ "pen":
+ [
+ "p",
+ "en"
+ ],
+ "men":
+ [
+ "m",
+ "en"
+ ],
+ "fen":
+ [
+ "f",
+ "en"
+ ],
+ "den":
+ [
+ "d",
+ "en"
+ ],
+ "ten":
+ [
+ "t",
+ "en"
+ ],
+ "nen":
+ [
+ "n",
+ "en"
+ ],
+ "len":
+ [
+ "l",
+ "en"
+ ],
+ "zen":
+ [
+ "z",
+ "en"
+ ],
+ "cen":
+ [
+ "c",
+ "en"
+ ],
+ "sen":
+ [
+ "s",
+ "en"
+ ],
+ "zhen":
+ [
+ "zh",
+ "en"
+ ],
+ "chen":
+ [
+ "ch",
+ "en"
+ ],
+ "shen":
+ [
+ "sh",
+ "en"
+ ],
+ "xen":
+ [
+ "x",
+ "en"
+ ],
+ "gen":
+ [
+ "g",
+ "en"
+ ],
+ "ken":
+ [
+ "k",
+ "en"
+ ],
+ "hen":
+ [
+ "h",
+ "en"
+ ],
+ "ren":
+ [
+ "r",
+ "en"
+ ],
+ "en":
+ [
+ "en"
+ ],
+ "bun":
+ [
+ "b",
+ "uen"
+ ],
+ "pun":
+ [
+ "p",
+ "uen"
+ ],
+ "mun":
+ [
+ "m",
+ "uen"
+ ],
+ "fun":
+ [
+ "f",
+ "uen"
+ ],
+ "dun":
+ [
+ "d",
+ "uen"
+ ],
+ "tun":
+ [
+ "t",
+ "uen"
+ ],
+ "nun":
+ [
+ "n",
+ "uen"
+ ],
+ "lun":
+ [
+ "l",
+ "uen"
+ ],
+ "zun":
+ [
+ "z",
+ "uen"
+ ],
+ "cun":
+ [
+ "c",
+ "uen"
+ ],
+ "sun":
+ [
+ "s",
+ "uen"
+ ],
+ "zhun":
+ [
+ "zh",
+ "uen"
+ ],
+ "chun":
+ [
+ "ch",
+ "uen"
+ ],
+ "shun":
+ [
+ "sh",
+ "uen"
+ ],
+ "gun":
+ [
+ "g",
+ "uen"
+ ],
+ "kun":
+ [
+ "k",
+ "uen"
+ ],
+ "hun":
+ [
+ "h",
+ "uen"
+ ],
+ "run":
+ [
+ "r",
+ "uen"
+ ],
+ "wen":
+ [
+ "w",
+ "uen"
+ ],
+ "uen":
+ [
+ "uen"
+ ],
+ "bin":
+ [
+ "b",
+ "in"
+ ],
+ "pin":
+ [
+ "p",
+ "in"
+ ],
+ "min":
+ [
+ "m",
+ "in"
+ ],
+ "fin":
+ [
+ "f",
+ "in"
+ ],
+ "din":
+ [
+ "d",
+ "in"
+ ],
+ "tin":
+ [
+ "t",
+ "in"
+ ],
+ "nin":
+ [
+ "n",
+ "in"
+ ],
+ "lin":
+ [
+ "l",
+ "in"
+ ],
+ "zin":
+ [
+ "z",
+ "in"
+ ],
+ "cin":
+ [
+ "c",
+ "in"
+ ],
+ "sin":
+ [
+ "s",
+ "in"
+ ],
+ "jin":
+ [
+ "j",
+ "in"
+ ],
+ "qin":
+ [
+ "q",
+ "in"
+ ],
+ "xin":
+ [
+ "x",
+ "in"
+ ],
+ "yin":
+ [
+ "y",
+ "in"
+ ],
+ "in":
+ [
+ "in"
+ ],
+ "jun":
+ [
+ "j",
+ "vn"
+ ],
+ "qun":
+ [
+ "q",
+ "vn"
+ ],
+ "xun":
+ [
+ "x",
+ "vn"
+ ],
+ "yun":
+ [
+ "y",
+ "vn"
+ ],
+ "vn":
+ [
+ "vn"
+ ],
+ "bang":
+ [
+ "b",
+ "ang"
+ ],
+ "pang":
+ [
+ "p",
+ "ang"
+ ],
+ "mang":
+ [
+ "m",
+ "ang"
+ ],
+ "fang":
+ [
+ "f",
+ "ang"
+ ],
+ "dang":
+ [
+ "d",
+ "ang"
+ ],
+ "tang":
+ [
+ "t",
+ "ang"
+ ],
+ "nang":
+ [
+ "n",
+ "ang"
+ ],
+ "lang":
+ [
+ "l",
+ "ang"
+ ],
+ "zang":
+ [
+ "z",
+ "ang"
+ ],
+ "cang":
+ [
+ "c",
+ "ang"
+ ],
+ "sang":
+ [
+ "s",
+ "ang"
+ ],
+ "zhang":
+ [
+ "zh",
+ "ang"
+ ],
+ "chang":
+ [
+ "ch",
+ "ang"
+ ],
+ "shang":
+ [
+ "sh",
+ "ang"
+ ],
+ "gang":
+ [
+ "g",
+ "ang"
+ ],
+ "kang":
+ [
+ "k",
+ "ang"
+ ],
+ "hang":
+ [
+ "h",
+ "ang"
+ ],
+ "rang":
+ [
+ "r",
+ "ang"
+ ],
+ "ang":
+ [
+ "ang"
+ ],
+ "biang":
+ [
+ "b",
+ "iang"
+ ],
+ "piang":
+ [
+ "p",
+ "iang"
+ ],
+ "miang":
+ [
+ "m",
+ "iang"
+ ],
+ "fiang":
+ [
+ "f",
+ "iang"
+ ],
+ "diang":
+ [
+ "d",
+ "iang"
+ ],
+ "tiang":
+ [
+ "t",
+ "iang"
+ ],
+ "niang":
+ [
+ "n",
+ "iang"
+ ],
+ "liang":
+ [
+ "l",
+ "iang"
+ ],
+ "ziang":
+ [
+ "z",
+ "iang"
+ ],
+ "ciang":
+ [
+ "c",
+ "iang"
+ ],
+ "siang":
+ [
+ "s",
+ "iang"
+ ],
+ "jiang":
+ [
+ "j",
+ "iang"
+ ],
+ "qiang":
+ [
+ "q",
+ "iang"
+ ],
+ "xiang":
+ [
+ "x",
+ "iang"
+ ],
+ "yang":
+ [
+ "y",
+ "iang"
+ ],
+ "iang":
+ [
+ "iang"
+ ],
+ "luang":
+ [
+ "l",
+ "uang"
+ ],
+ "zuang":
+ [
+ "z",
+ "uang"
+ ],
+ "cuang":
+ [
+ "c",
+ "uang"
+ ],
+ "suang":
+ [
+ "s",
+ "uang"
+ ],
+ "zhuang":
+ [
+ "zh",
+ "uang"
+ ],
+ "chuang":
+ [
+ "ch",
+ "uang"
+ ],
+ "shuang":
+ [
+ "sh",
+ "uang"
+ ],
+ "guang":
+ [
+ "g",
+ "uang"
+ ],
+ "kuang":
+ [
+ "k",
+ "uang"
+ ],
+ "huang":
+ [
+ "h",
+ "uang"
+ ],
+ "ruang":
+ [
+ "r",
+ "uang"
+ ],
+ "wang":
+ [
+ "w",
+ "uang"
+ ],
+ "uang":
+ [
+ "uang"
+ ],
+ "beng":
+ [
+ "b",
+ "eng"
+ ],
+ "peng":
+ [
+ "p",
+ "eng"
+ ],
+ "meng":
+ [
+ "m",
+ "eng"
+ ],
+ "feng":
+ [
+ "f",
+ "eng"
+ ],
+ "deng":
+ [
+ "d",
+ "eng"
+ ],
+ "teng":
+ [
+ "t",
+ "eng"
+ ],
+ "neng":
+ [
+ "n",
+ "eng"
+ ],
+ "leng":
+ [
+ "l",
+ "eng"
+ ],
+ "zeng":
+ [
+ "z",
+ "eng"
+ ],
+ "ceng":
+ [
+ "c",
+ "eng"
+ ],
+ "seng":
+ [
+ "s",
+ "eng"
+ ],
+ "zheng":
+ [
+ "zh",
+ "eng"
+ ],
+ "cheng":
+ [
+ "ch",
+ "eng"
+ ],
+ "sheng":
+ [
+ "sh",
+ "eng"
+ ],
+ "geng":
+ [
+ "g",
+ "eng"
+ ],
+ "keng":
+ [
+ "k",
+ "eng"
+ ],
+ "heng":
+ [
+ "h",
+ "eng"
+ ],
+ "reng":
+ [
+ "r",
+ "eng"
+ ],
+ "eng":
+ [
+ "eng"
+ ],
+ "weng":
+ [
+ "w",
+ "ueng"
+ ],
+ "ueng":
+ [
+ "ueng"
+ ],
+ "bing":
+ [
+ "b",
+ "ing"
+ ],
+ "ping":
+ [
+ "p",
+ "ing"
+ ],
+ "ming":
+ [
+ "m",
+ "ing"
+ ],
+ "fing":
+ [
+ "f",
+ "ing"
+ ],
+ "ding":
+ [
+ "d",
+ "ing"
+ ],
+ "ting":
+ [
+ "t",
+ "ing"
+ ],
+ "ning":
+ [
+ "n",
+ "ing"
+ ],
+ "ling":
+ [
+ "l",
+ "ing"
+ ],
+ "zing":
+ [
+ "z",
+ "ing"
+ ],
+ "cing":
+ [
+ "c",
+ "ing"
+ ],
+ "sing":
+ [
+ "s",
+ "ing"
+ ],
+ "jing":
+ [
+ "j",
+ "ing"
+ ],
+ "qing":
+ [
+ "q",
+ "ing"
+ ],
+ "xing":
+ [
+ "x",
+ "ing"
+ ],
+ "ging":
+ [
+ "g",
+ "ing"
+ ],
+ "king":
+ [
+ "k",
+ "ing"
+ ],
+ "hing":
+ [
+ "h",
+ "ing"
+ ],
+ "ying":
+ [
+ "y",
+ "ing"
+ ],
+ "ing":
+ [
+ "ing"
+ ],
+ "bong":
+ [
+ "b",
+ "ong"
+ ],
+ "pong":
+ [
+ "p",
+ "ong"
+ ],
+ "mong":
+ [
+ "m",
+ "ong"
+ ],
+ "fong":
+ [
+ "f",
+ "ong"
+ ],
+ "dong":
+ [
+ "d",
+ "ong"
+ ],
+ "tong":
+ [
+ "t",
+ "ong"
+ ],
+ "nong":
+ [
+ "n",
+ "ong"
+ ],
+ "long":
+ [
+ "l",
+ "ong"
+ ],
+ "zong":
+ [
+ "z",
+ "ong"
+ ],
+ "cong":
+ [
+ "c",
+ "ong"
+ ],
+ "song":
+ [
+ "s",
+ "ong"
+ ],
+ "zhong":
+ [
+ "zh",
+ "ong"
+ ],
+ "chong":
+ [
+ "ch",
+ "ong"
+ ],
+ "shong":
+ [
+ "sh",
+ "ong"
+ ],
+ "gong":
+ [
+ "g",
+ "ong"
+ ],
+ "kong":
+ [
+ "k",
+ "ong"
+ ],
+ "hong":
+ [
+ "h",
+ "ong"
+ ],
+ "rong":
+ [
+ "r",
+ "ong"
+ ],
+ "ong":
+ [
+ "ong"
+ ],
+ "jiong":
+ [
+ "j",
+ "iong"
+ ],
+ "qiong":
+ [
+ "q",
+ "iong"
+ ],
+ "xiong":
+ [
+ "x",
+ "iong"
+ ],
+ "yong":
+ [
+ "y",
+ "iong"
+ ],
+ "iong":
+ [
+ "iong"
+ ],
+ "bar":
+ [
+ "b",
+ "ar"
+ ],
+ "par":
+ [
+ "p",
+ "ar"
+ ],
+ "mar":
+ [
+ "m",
+ "ar"
+ ],
+ "far":
+ [
+ "f",
+ "ar"
+ ],
+ "dar":
+ [
+ "d",
+ "ar"
+ ],
+ "tar":
+ [
+ "t",
+ "ar"
+ ],
+ "nar":
+ [
+ "n",
+ "ar"
+ ],
+ "lar":
+ [
+ "l",
+ "ar"
+ ],
+ "zar":
+ [
+ "z",
+ "ar"
+ ],
+ "car":
+ [
+ "c",
+ "ar"
+ ],
+ "sar":
+ [
+ "s",
+ "ar"
+ ],
+ "zhar":
+ [
+ "zh",
+ "ar"
+ ],
+ "char":
+ [
+ "ch",
+ "ar"
+ ],
+ "shar":
+ [
+ "sh",
+ "ar"
+ ],
+ "gar":
+ [
+ "g",
+ "ar"
+ ],
+ "kar":
+ [
+ "k",
+ "ar"
+ ],
+ "har":
+ [
+ "h",
+ "ar"
+ ],
+ "rar":
+ [
+ "r",
+ "ar"
+ ],
+ "ar":
+ [
+ "ar"
+ ],
+ "biar":
+ [
+ "b",
+ "iar"
+ ],
+ "piar":
+ [
+ "p",
+ "iar"
+ ],
+ "miar":
+ [
+ "m",
+ "iar"
+ ],
+ "fiar":
+ [
+ "f",
+ "iar"
+ ],
+ "diar":
+ [
+ "d",
+ "iar"
+ ],
+ "tiar":
+ [
+ "t",
+ "iar"
+ ],
+ "niar":
+ [
+ "n",
+ "iar"
+ ],
+ "liar":
+ [
+ "l",
+ "iar"
+ ],
+ "jiar":
+ [
+ "j",
+ "iar"
+ ],
+ "qiar":
+ [
+ "q",
+ "iar"
+ ],
+ "xiar":
+ [
+ "x",
+ "iar"
+ ],
+ "yar":
+ [
+ "y",
+ "iar"
+ ],
+ "iar":
+ [
+ "iar"
+ ],
+ "juar":
+ [
+ "j",
+ "var"
+ ],
+ "quar":
+ [
+ "q",
+ "var"
+ ],
+ "xuar":
+ [
+ "x",
+ "var"
+ ],
+ "yuar":
+ [
+ "y",
+ "var"
+ ],
+ "var":
+ [
+ "var"
+ ],
+ "duar":
+ [
+ "d",
+ "uar"
+ ],
+ "tuar":
+ [
+ "t",
+ "uar"
+ ],
+ "nuar":
+ [
+ "n",
+ "uar"
+ ],
+ "luar":
+ [
+ "l",
+ "uar"
+ ],
+ "zuar":
+ [
+ "z",
+ "uar"
+ ],
+ "cuar":
+ [
+ "c",
+ "uar"
+ ],
+ "suar":
+ [
+ "s",
+ "uar"
+ ],
+ "zhuar":
+ [
+ "zh",
+ "uar"
+ ],
+ "chuar":
+ [
+ "ch",
+ "uar"
+ ],
+ "shuar":
+ [
+ "sh",
+ "uar"
+ ],
+ "guar":
+ [
+ "g",
+ "uar"
+ ],
+ "kuar":
+ [
+ "k",
+ "uar"
+ ],
+ "huar":
+ [
+ "h",
+ "uar"
+ ],
+ "ruar":
+ [
+ "r",
+ "uar"
+ ],
+ "war":
+ [
+ "w",
+ "uar"
+ ],
+ "uar":
+ [
+ "uar"
+ ],
+ "baor":
+ [
+ "b",
+ "aor"
+ ],
+ "paor":
+ [
+ "p",
+ "aor"
+ ],
+ "maor":
+ [
+ "m",
+ "aor"
+ ],
+ "faor":
+ [
+ "f",
+ "aor"
+ ],
+ "daor":
+ [
+ "d",
+ "aor"
+ ],
+ "taor":
+ [
+ "t",
+ "aor"
+ ],
+ "naor":
+ [
+ "n",
+ "aor"
+ ],
+ "laor":
+ [
+ "l",
+ "aor"
+ ],
+ "zaor":
+ [
+ "z",
+ "aor"
+ ],
+ "caor":
+ [
+ "c",
+ "aor"
+ ],
+ "saor":
+ [
+ "s",
+ "aor"
+ ],
+ "zhaor":
+ [
+ "zh",
+ "aor"
+ ],
+ "chaor":
+ [
+ "ch",
+ "aor"
+ ],
+ "shaor":
+ [
+ "sh",
+ "aor"
+ ],
+ "gaor":
+ [
+ "g",
+ "aor"
+ ],
+ "kaor":
+ [
+ "k",
+ "aor"
+ ],
+ "haor":
+ [
+ "h",
+ "aor"
+ ],
+ "raor":
+ [
+ "r",
+ "aor"
+ ],
+ "aor":
+ [
+ "aor"
+ ],
+ "biaor":
+ [
+ "b",
+ "iaor"
+ ],
+ "piaor":
+ [
+ "p",
+ "iaor"
+ ],
+ "miaor":
+ [
+ "m",
+ "iaor"
+ ],
+ "fiaor":
+ [
+ "f",
+ "iaor"
+ ],
+ "diaor":
+ [
+ "d",
+ "iaor"
+ ],
+ "tiaor":
+ [
+ "t",
+ "iaor"
+ ],
+ "niaor":
+ [
+ "n",
+ "iaor"
+ ],
+ "liaor":
+ [
+ "l",
+ "iaor"
+ ],
+ "jiaor":
+ [
+ "j",
+ "iaor"
+ ],
+ "qiaor":
+ [
+ "q",
+ "iaor"
+ ],
+ "xiaor":
+ [
+ "x",
+ "iaor"
+ ],
+ "yaor":
+ [
+ "y",
+ "iaor"
+ ],
+ "iaor":
+ [
+ "iaor"
+ ],
+ "beer":
+ [
+ "b",
+ "eer"
+ ],
+ "peer":
+ [
+ "p",
+ "eer"
+ ],
+ "meer":
+ [
+ "m",
+ "eer"
+ ],
+ "feer":
+ [
+ "f",
+ "eer"
+ ],
+ "deer":
+ [
+ "d",
+ "eer"
+ ],
+ "teer":
+ [
+ "t",
+ "eer"
+ ],
+ "neer":
+ [
+ "n",
+ "eer"
+ ],
+ "leer":
+ [
+ "l",
+ "eer"
+ ],
+ "zeer":
+ [
+ "z",
+ "eer"
+ ],
+ "ceer":
+ [
+ "c",
+ "eer"
+ ],
+ "seer":
+ [
+ "s",
+ "eer"
+ ],
+ "zheer":
+ [
+ "zh",
+ "eer"
+ ],
+ "cheer":
+ [
+ "ch",
+ "eer"
+ ],
+ "sheer":
+ [
+ "sh",
+ "eer"
+ ],
+ "geer":
+ [
+ "g",
+ "eer"
+ ],
+ "keer":
+ [
+ "k",
+ "eer"
+ ],
+ "heer":
+ [
+ "h",
+ "eer"
+ ],
+ "reer":
+ [
+ "r",
+ "eer"
+ ],
+ "eer":
+ [
+ "eer"
+ ],
+ "bier":
+ [
+ "b",
+ "ier"
+ ],
+ "pier":
+ [
+ "p",
+ "ier"
+ ],
+ "mier":
+ [
+ "m",
+ "ier"
+ ],
+ "fier":
+ [
+ "f",
+ "ier"
+ ],
+ "dier":
+ [
+ "d",
+ "ier"
+ ],
+ "tier":
+ [
+ "t",
+ "ier"
+ ],
+ "nier":
+ [
+ "n",
+ "ier"
+ ],
+ "lier":
+ [
+ "l",
+ "ier"
+ ],
+ "jier":
+ [
+ "j",
+ "ier"
+ ],
+ "qier":
+ [
+ "q",
+ "ier"
+ ],
+ "xier":
+ [
+ "x",
+ "ier"
+ ],
+ "yer":
+ [
+ "y",
+ "ier"
+ ],
+ "ier":
+ [
+ "ier"
+ ],
+ "nver":
+ [
+ "n",
+ "ver"
+ ],
+ "lver":
+ [
+ "l",
+ "ver"
+ ],
+ "juer":
+ [
+ "j",
+ "ver"
+ ],
+ "quer":
+ [
+ "q",
+ "ver"
+ ],
+ "xuer":
+ [
+ "x",
+ "ver"
+ ],
+ "yuer":
+ [
+ "y",
+ "ver"
+ ],
+ "ver":
+ [
+ "ver"
+ ],
+ "bour":
+ [
+ "b",
+ "our"
+ ],
+ "pour":
+ [
+ "p",
+ "our"
+ ],
+ "mour":
+ [
+ "m",
+ "our"
+ ],
+ "four":
+ [
+ "f",
+ "our"
+ ],
+ "dour":
+ [
+ "d",
+ "our"
+ ],
+ "tour":
+ [
+ "t",
+ "our"
+ ],
+ "nour":
+ [
+ "n",
+ "our"
+ ],
+ "lour":
+ [
+ "l",
+ "our"
+ ],
+ "zour":
+ [
+ "z",
+ "our"
+ ],
+ "cour":
+ [
+ "c",
+ "our"
+ ],
+ "sour":
+ [
+ "s",
+ "our"
+ ],
+ "zhour":
+ [
+ "zh",
+ "our"
+ ],
+ "chour":
+ [
+ "ch",
+ "our"
+ ],
+ "shour":
+ [
+ "sh",
+ "our"
+ ],
+ "gour":
+ [
+ "g",
+ "our"
+ ],
+ "kour":
+ [
+ "k",
+ "our"
+ ],
+ "hour":
+ [
+ "h",
+ "our"
+ ],
+ "rour":
+ [
+ "r",
+ "our"
+ ],
+ "our":
+ [
+ "our"
+ ],
+ "biur":
+ [
+ "b",
+ "iour"
+ ],
+ "piur":
+ [
+ "p",
+ "iour"
+ ],
+ "miur":
+ [
+ "m",
+ "iour"
+ ],
+ "fiur":
+ [
+ "f",
+ "iour"
+ ],
+ "diur":
+ [
+ "d",
+ "iour"
+ ],
+ "tiur":
+ [
+ "t",
+ "iour"
+ ],
+ "niur":
+ [
+ "n",
+ "iour"
+ ],
+ "liur":
+ [
+ "l",
+ "iour"
+ ],
+ "jiur":
+ [
+ "j",
+ "iour"
+ ],
+ "qiur":
+ [
+ "q",
+ "iour"
+ ],
+ "xiur":
+ [
+ "x",
+ "iour"
+ ],
+ "your":
+ [
+ "y",
+ "iour"
+ ],
+ "iour":
+ [
+ "iour"
+ ],
+ "bor":
+ [
+ "b",
+ "uor"
+ ],
+ "por":
+ [
+ "p",
+ "uor"
+ ],
+ "mor":
+ [
+ "m",
+ "uor"
+ ],
+ "for":
+ [
+ "f",
+ "uor"
+ ],
+ "duor":
+ [
+ "d",
+ "uor"
+ ],
+ "tuor":
+ [
+ "t",
+ "uor"
+ ],
+ "nuor":
+ [
+ "n",
+ "uor"
+ ],
+ "luor":
+ [
+ "l",
+ "uor"
+ ],
+ "zuor":
+ [
+ "z",
+ "uor"
+ ],
+ "cuor":
+ [
+ "c",
+ "uor"
+ ],
+ "suor":
+ [
+ "s",
+ "uor"
+ ],
+ "zhuor":
+ [
+ "zh",
+ "uor"
+ ],
+ "chuor":
+ [
+ "ch",
+ "uor"
+ ],
+ "shuor":
+ [
+ "sh",
+ "uor"
+ ],
+ "guor":
+ [
+ "g",
+ "uor"
+ ],
+ "kuor":
+ [
+ "k",
+ "uor"
+ ],
+ "huor":
+ [
+ "h",
+ "uor"
+ ],
+ "ruor":
+ [
+ "r",
+ "uor"
+ ],
+ "wor":
+ [
+ "w",
+ "uor"
+ ],
+ "uor":
+ [
+ "uor"
+ ],
+ "ber":
+ [
+ "b",
+ "er"
+ ],
+ "per":
+ [
+ "p",
+ "er"
+ ],
+ "mer":
+ [
+ "m",
+ "er"
+ ],
+ "fer":
+ [
+ "f",
+ "er"
+ ],
+ "der":
+ [
+ "d",
+ "er"
+ ],
+ "ter":
+ [
+ "t",
+ "er"
+ ],
+ "ner":
+ [
+ "n",
+ "er"
+ ],
+ "ler":
+ [
+ "l",
+ "er"
+ ],
+ "zer":
+ [
+ "z",
+ "er"
+ ],
+ "cer":
+ [
+ "c",
+ "er"
+ ],
+ "ser":
+ [
+ "s",
+ "er"
+ ],
+ "zher":
+ [
+ "zh",
+ "er"
+ ],
+ "cher":
+ [
+ "ch",
+ "er"
+ ],
+ "sher":
+ [
+ "sh",
+ "er"
+ ],
+ "ger":
+ [
+ "g",
+ "er"
+ ],
+ "ker":
+ [
+ "k",
+ "er"
+ ],
+ "her":
+ [
+ "h",
+ "er"
+ ],
+ "rer":
+ [
+ "r",
+ "er"
+ ],
+ "er":
+ [
+ "er"
+ ],
+ "bir":
+ [
+ "b",
+ "ir"
+ ],
+ "pir":
+ [
+ "p",
+ "ir"
+ ],
+ "mir":
+ [
+ "m",
+ "ir"
+ ],
+ "fir":
+ [
+ "f",
+ "ir"
+ ],
+ "dir":
+ [
+ "d",
+ "ir"
+ ],
+ "tir":
+ [
+ "t",
+ "ir"
+ ],
+ "nir":
+ [
+ "n",
+ "ir"
+ ],
+ "lir":
+ [
+ "l",
+ "ir"
+ ],
+ "jir":
+ [
+ "j",
+ "ir"
+ ],
+ "qir":
+ [
+ "q",
+ "ir"
+ ],
+ "xir":
+ [
+ "x",
+ "ir"
+ ],
+ "yir":
+ [
+ "y",
+ "ir"
+ ],
+ "ir":
+ [
+ "ir"
+ ],
+ "nvr":
+ [
+ "n",
+ "vr"
+ ],
+ "lvr":
+ [
+ "l",
+ "vr"
+ ],
+ "jur":
+ [
+ "j",
+ "vr"
+ ],
+ "qur":
+ [
+ "q",
+ "vr"
+ ],
+ "xur":
+ [
+ "x",
+ "vr"
+ ],
+ "yur":
+ [
+ "y",
+ "vr"
+ ],
+ "vr":
+ [
+ "vr"
+ ],
+ "duer":
+ [
+ "d",
+ "uer"
+ ],
+ "tuer":
+ [
+ "t",
+ "uer"
+ ],
+ "nuer":
+ [
+ "n",
+ "uer"
+ ],
+ "luer":
+ [
+ "l",
+ "uer"
+ ],
+ "zuer":
+ [
+ "z",
+ "uer"
+ ],
+ "cuer":
+ [
+ "c",
+ "uer"
+ ],
+ "suer":
+ [
+ "s",
+ "uer"
+ ],
+ "zhuer":
+ [
+ "zh",
+ "uer"
+ ],
+ "chuer":
+ [
+ "ch",
+ "uer"
+ ],
+ "shuer":
+ [
+ "sh",
+ "uer"
+ ],
+ "guer":
+ [
+ "g",
+ "uer"
+ ],
+ "kuer":
+ [
+ "k",
+ "uer"
+ ],
+ "huer":
+ [
+ "h",
+ "uer"
+ ],
+ "ruer":
+ [
+ "r",
+ "uer"
+ ],
+ "wer":
+ [
+ "w",
+ "uer"
+ ],
+ "uer":
+ [
+ "uer"
+ ],
+ "bur":
+ [
+ "b",
+ "ur"
+ ],
+ "pur":
+ [
+ "p",
+ "ur"
+ ],
+ "mur":
+ [
+ "m",
+ "ur"
+ ],
+ "fur":
+ [
+ "f",
+ "ur"
+ ],
+ "dur":
+ [
+ "d",
+ "ur"
+ ],
+ "tur":
+ [
+ "t",
+ "ur"
+ ],
+ "nur":
+ [
+ "n",
+ "ur"
+ ],
+ "lur":
+ [
+ "l",
+ "ur"
+ ],
+ "zur":
+ [
+ "z",
+ "ur"
+ ],
+ "cur":
+ [
+ "c",
+ "ur"
+ ],
+ "sur":
+ [
+ "s",
+ "ur"
+ ],
+ "zhur":
+ [
+ "zh",
+ "ur"
+ ],
+ "chur":
+ [
+ "ch",
+ "ur"
+ ],
+ "shur":
+ [
+ "sh",
+ "ur"
+ ],
+ "gur":
+ [
+ "g",
+ "ur"
+ ],
+ "kur":
+ [
+ "k",
+ "ur"
+ ],
+ "hur":
+ [
+ "h",
+ "ur"
+ ],
+ "rur":
+ [
+ "r",
+ "ur"
+ ],
+ "wur":
+ [
+ "w",
+ "ur"
+ ],
+ "ur":
+ [
+ "ur"
+ ],
+ "bangr":
+ [
+ "b",
+ "angr"
+ ],
+ "pangr":
+ [
+ "p",
+ "angr"
+ ],
+ "mangr":
+ [
+ "m",
+ "angr"
+ ],
+ "fangr":
+ [
+ "f",
+ "angr"
+ ],
+ "dangr":
+ [
+ "d",
+ "angr"
+ ],
+ "tangr":
+ [
+ "t",
+ "angr"
+ ],
+ "nangr":
+ [
+ "n",
+ "angr"
+ ],
+ "langr":
+ [
+ "l",
+ "angr"
+ ],
+ "zangr":
+ [
+ "z",
+ "angr"
+ ],
+ "cangr":
+ [
+ "c",
+ "angr"
+ ],
+ "sangr":
+ [
+ "s",
+ "angr"
+ ],
+ "zhangr":
+ [
+ "zh",
+ "angr"
+ ],
+ "changr":
+ [
+ "ch",
+ "angr"
+ ],
+ "shangr":
+ [
+ "sh",
+ "angr"
+ ],
+ "gangr":
+ [
+ "g",
+ "angr"
+ ],
+ "kangr":
+ [
+ "k",
+ "angr"
+ ],
+ "hangr":
+ [
+ "h",
+ "angr"
+ ],
+ "rangr":
+ [
+ "r",
+ "angr"
+ ],
+ "angr":
+ [
+ "angr"
+ ],
+ "biangr":
+ [
+ "b",
+ "iangr"
+ ],
+ "niangr":
+ [
+ "n",
+ "iangr"
+ ],
+ "liangr":
+ [
+ "l",
+ "iangr"
+ ],
+ "jiangr":
+ [
+ "j",
+ "iangr"
+ ],
+ "qiangr":
+ [
+ "q",
+ "iangr"
+ ],
+ "xiangr":
+ [
+ "x",
+ "iangr"
+ ],
+ "yangr":
+ [
+ "y",
+ "iangr"
+ ],
+ "iangr":
+ [
+ "iangr"
+ ],
+ "zhuangr":
+ [
+ "zh",
+ "uangr"
+ ],
+ "chuangr":
+ [
+ "ch",
+ "uangr"
+ ],
+ "shuangr":
+ [
+ "sh",
+ "uangr"
+ ],
+ "guangr":
+ [
+ "g",
+ "uangr"
+ ],
+ "kuangr":
+ [
+ "k",
+ "uangr"
+ ],
+ "huangr":
+ [
+ "h",
+ "uangr"
+ ],
+ "ruangr":
+ [
+ "r",
+ "uangr"
+ ],
+ "wangr":
+ [
+ "w",
+ "uangr"
+ ],
+ "uangr":
+ [
+ "uangr"
+ ],
+ "bengr":
+ [
+ "b",
+ "engr"
+ ],
+ "pengr":
+ [
+ "p",
+ "engr"
+ ],
+ "mengr":
+ [
+ "m",
+ "engr"
+ ],
+ "fengr":
+ [
+ "f",
+ "engr"
+ ],
+ "dengr":
+ [
+ "d",
+ "engr"
+ ],
+ "tengr":
+ [
+ "t",
+ "engr"
+ ],
+ "nengr":
+ [
+ "n",
+ "engr"
+ ],
+ "lengr":
+ [
+ "l",
+ "engr"
+ ],
+ "zengr":
+ [
+ "z",
+ "engr"
+ ],
+ "cengr":
+ [
+ "c",
+ "engr"
+ ],
+ "sengr":
+ [
+ "s",
+ "engr"
+ ],
+ "zhengr":
+ [
+ "zh",
+ "engr"
+ ],
+ "chengr":
+ [
+ "ch",
+ "engr"
+ ],
+ "shengr":
+ [
+ "sh",
+ "engr"
+ ],
+ "gengr":
+ [
+ "g",
+ "engr"
+ ],
+ "kengr":
+ [
+ "k",
+ "engr"
+ ],
+ "hengr":
+ [
+ "h",
+ "engr"
+ ],
+ "rengr":
+ [
+ "r",
+ "engr"
+ ],
+ "engr":
+ [
+ "engr"
+ ],
+ "bingr":
+ [
+ "b",
+ "ingr"
+ ],
+ "pingr":
+ [
+ "p",
+ "ingr"
+ ],
+ "mingr":
+ [
+ "m",
+ "ingr"
+ ],
+ "fingr":
+ [
+ "f",
+ "ingr"
+ ],
+ "dingr":
+ [
+ "d",
+ "ingr"
+ ],
+ "tingr":
+ [
+ "t",
+ "ingr"
+ ],
+ "ningr":
+ [
+ "n",
+ "ingr"
+ ],
+ "lingr":
+ [
+ "l",
+ "ingr"
+ ],
+ "jingr":
+ [
+ "j",
+ "ingr"
+ ],
+ "qingr":
+ [
+ "q",
+ "ingr"
+ ],
+ "xingr":
+ [
+ "x",
+ "ingr"
+ ],
+ "yingr":
+ [
+ "y",
+ "ingr"
+ ],
+ "ingr":
+ [
+ "ingr"
+ ],
+ "wengr":
+ [
+ "w",
+ "uengr"
+ ],
+ "uengr":
+ [
+ "uengr"
+ ],
+ "dongr":
+ [
+ "d",
+ "ongr"
+ ],
+ "tongr":
+ [
+ "t",
+ "ongr"
+ ],
+ "nongr":
+ [
+ "n",
+ "ongr"
+ ],
+ "longr":
+ [
+ "l",
+ "ongr"
+ ],
+ "zongr":
+ [
+ "z",
+ "ongr"
+ ],
+ "congr":
+ [
+ "c",
+ "ongr"
+ ],
+ "songr":
+ [
+ "s",
+ "ongr"
+ ],
+ "zhongr":
+ [
+ "zh",
+ "ongr"
+ ],
+ "chongr":
+ [
+ "ch",
+ "ongr"
+ ],
+ "shongr":
+ [
+ "sh",
+ "ongr"
+ ],
+ "gongr":
+ [
+ "g",
+ "ongr"
+ ],
+ "kongr":
+ [
+ "k",
+ "ongr"
+ ],
+ "hongr":
+ [
+ "h",
+ "ongr"
+ ],
+ "rongr":
+ [
+ "r",
+ "ongr"
+ ],
+ "ongr":
+ [
+ "ongr"
+ ],
+ "jiongr":
+ [
+ "j",
+ "iongr"
+ ],
+ "qiongr":
+ [
+ "q",
+ "iongr"
+ ],
+ "xiongr":
+ [
+ "x",
+ "iongr"
+ ],
+ "yongr":
+ [
+ "y",
+ "iongr"
+ ],
+ "iongr":
+ [
+ "iongr"
+ ],
+ "mm":
+ [
+ "mm"
+ ],
+ "nn":
+ [
+ "nn"
+ ],
+ "ng":
+ [
+ "ng"
+ ]
+ },
+ "phon_class":
+ {
+ "head":
+ [
+ "b",
+ "z",
+ "l",
+ "sh",
+ "p",
+ "d",
+ "m",
+ "x",
+ "s",
+ "y",
+ "r",
+ "f",
+ "n",
+ "h",
+ "c",
+ "j",
+ "zh",
+ "ch",
+ "t",
+ "g",
+ "q",
+ "w",
+ "k"
+ ],
+ "tail":
+ [
+ "ia",
+ "i",
+ "ua",
+ "ei",
+ "van",
+ "iang",
+ "a",
+ "iong",
+ "uar",
+ "angr",
+ "nn",
+ "uengr",
+ "ng",
+ "ao",
+ "uo",
+ "iou",
+ "en",
+ "uang",
+ "er",
+ "eh",
+ "ier",
+ "v",
+ "ae",
+ "aor",
+ "vr",
+ "ing",
+ "iao",
+ "in",
+ "our",
+ "uei",
+ "ir",
+ "eer",
+ "iii",
+ "ong",
+ "ver",
+ "iour",
+ "iai",
+ "u",
+ "io",
+ "ie",
+ "aen",
+ "ueng",
+ "ur",
+ "engr",
+ "ingr",
+ "ongr",
+ "eng",
+ "ou",
+ "uen",
+ "o",
+ "uae",
+ "e",
+ "uao",
+ "ar",
+ "ve",
+ "iangr",
+ "ii",
+ "var",
+ "iar",
+ "iongr",
+ "uer",
+ "iei",
+ "iaor",
+ "uou",
+ "uan",
+ "ang",
+ "ai",
+ "uor",
+ "uangr",
+ "mm",
+ "an",
+ "uai",
+ "ian",
+ "vn"
+ ]
+ }
+ },
+ {
+ "language": "jp",
+ "syllable_alias":
+ {
+ "n": "nv",
+ "m": "mv",
+ "N": "nv",
+ "M": "mv",
+ "la": "ra",
+ "A": "ax",
+ "I": "ix",
+ "U": "ux",
+ "E": "ex",
+ "O": "ox",
+ "t": "cl",
+ "jya": "ja",
+ "jyu": "ju",
+ "jye": "je",
+ "jyo": "jo",
+ "sya": "sha",
+ "syu": "shu",
+ "sye": "she",
+ "syo": "sho",
+ "cya": "cha",
+ "cyu": "chu",
+ "cye": "che",
+ "cyo": "cho",
+ "kA": "kax",
+ "kE": "kex",
+ "kO": "kox",
+ "sA": "sax",
+ "sI": "six",
+ "sU": "sux",
+ "sE": "sex",
+ "sO": "sox",
+ "tA": "tax",
+ "tU": "tux",
+ "tE": "tex",
+ "tO": "tox",
+ "nA": "nax",
+ "nU": "nux",
+ "nE": "nex",
+ "nO": "nox",
+ "hA": "hax",
+ "hU": "hux",
+ "hE": "hex",
+ "hO": "hox",
+ "mA": "max",
+ "mU": "mux",
+ "mE": "mex",
+ "mO": "mox",
+ "yA": "yax",
+ "yU": "yux",
+ "yE": "yex",
+ "yO": "yox",
+ "rA": "rax",
+ "rU": "rux",
+ "rE": "rex",
+ "rO": "rox",
+ "rrA": "rrax",
+ "rrI": "rrix",
+ "rrU": "rrux",
+ "rrE": "rrex",
+ "rrO": "rrox",
+ "wA": "wax",
+ "wI": "wix",
+ "wE": "wex",
+ "wO": "wox",
+ "gA": "gax",
+ "gE": "gex",
+ "gO": "gox",
+ "zA": "zax",
+ "zI": "zix",
+ "zU": "zux",
+ "zE": "zex",
+ "zO": "zox",
+ "jA": "jax",
+ "jyA": "jax",
+ "jI": "jix",
+ "jU": "jux",
+ "jyU": "jux",
+ "jE": "jex",
+ "jyE": "jex",
+ "jO": "jox",
+ "jyO": "jox",
+ "dA": "dax",
+ "dU": "dux",
+ "dE": "dex",
+ "dO": "dox",
+ "bA": "bax",
+ "bU": "bux",
+ "bE": "bex",
+ "bO": "box",
+ "pA": "pax",
+ "pU": "pux",
+ "pE": "pex",
+ "pO": "pox",
+ "fA": "fax",
+ "fU": "fux",
+ "fE": "fex",
+ "fO": "fox",
+ "vA": "vax",
+ "vU": "vux",
+ "vE": "vex",
+ "vO": "vox",
+ "tsA": "tsax",
+ "tsI": "tsix",
+ "tsU": "tsux",
+ "tsE": "tsex",
+ "tsO": "tsox",
+ "ngA": "ngax",
+ "ngU": "ngux",
+ "ngE": "ngex",
+ "ngO": "ngox",
+ "shA": "shax",
+ "syA": "shax",
+ "shI": "shix",
+ "shU": "shux",
+ "syU": "shux",
+ "shE": "shex",
+ "syE": "shex",
+ "shO": "shox",
+ "syO": "shox",
+ "chA": "chax",
+ "cyA": "chax",
+ "chI": "chix",
+ "chU": "chux",
+ "cyU": "chux",
+ "chE": "chex",
+ "cyE": "chex",
+ "chO": "chox",
+ "cyO": "chox",
+ "kyA": "kyax",
+ "kI": "kix",
+ "kyU": "kyux",
+ "kyE": "kyex",
+ "kyO": "kyox",
+ "tyA": "tyax",
+ "tI": "tix",
+ "tyU": "tyux",
+ "tyE": "tyex",
+ "tyO": "tyox",
+ "myA": "myax",
+ "mI": "mix",
+ "myU": "myux",
+ "myE": "myex",
+ "myO": "myox",
+ "nyA": "nyax",
+ "nI": "nix",
+ "nyU": "nyux",
+ "nyE": "nyex",
+ "nyO": "nyox",
+ "hyA": "hyax",
+ "hI": "hix",
+ "hyU": "hyux",
+ "hyE": "hyex",
+ "hyO": "hyox",
+ "ryA": "ryax",
+ "rI": "rix",
+ "ryU": "ryux",
+ "ryE": "ryex",
+ "ryO": "ryox",
+ "gyA": "gyax",
+ "gI": "gix",
+ "gyU": "gyux",
+ "gyE": "gyex",
+ "gyO": "gyox",
+ "byA": "byax",
+ "bI": "bix",
+ "byU": "byux",
+ "byE": "byex",
+ "byO": "byox",
+ "pyA": "pyax",
+ "pI": "pix",
+ "pyU": "pyux",
+ "pyE": "pyex",
+ "pyO": "pyox",
+ "ngyA": "ngyax",
+ "ngI": "ngix",
+ "ngyU": "ngyux",
+ "ngyE": "ngyex",
+ "ngyO": "ngyox",
+ "fyA": "fyax",
+ "fI": "fix",
+ "fyU": "fyux",
+ "fyE": "fyex",
+ "fyO": "fyox",
+ "vyA": "vyax",
+ "vI": "vix",
+ "vyU": "vyux",
+ "vyE": "vyex",
+ "vyO": "vyox",
+ "kwA": "kwax",
+ "kwI": "kwix",
+ "kU": "kux",
+ "kwE": "kwex",
+ "kwO": "kwox",
+ "gwA": "gwax",
+ "gwI": "gwix",
+ "gU": "gux",
+ "gwE": "gwex",
+ "gwO": "gwox"
+ },
+ "dict":
+ {
+ "a":
+ [
+ "a"
+ ],
+ "i":
+ [
+ "i"
+ ],
+ "u":
+ [
+ "u"
+ ],
+ "e":
+ [
+ "e"
+ ],
+ "o":
+ [
+ "o"
+ ],
+ "ax":
+ [
+ "ax"
+ ],
+ "ix":
+ [
+ "ix"
+ ],
+ "ux":
+ [
+ "ux"
+ ],
+ "ex":
+ [
+ "ex"
+ ],
+ "ox":
+ [
+ "ox"
+ ],
+ "nv":
+ [
+ "nv"
+ ],
+ "mv":
+ [
+ "mv"
+ ],
+ "cl":
+ [
+ "cl"
+ ],
+ "ka":
+ [
+ "k",
+ "a"
+ ],
+ "ke":
+ [
+ "k",
+ "e"
+ ],
+ "ko":
+ [
+ "k",
+ "o"
+ ],
+ "kax":
+ [
+ "k",
+ "ax"
+ ],
+ "kex":
+ [
+ "k",
+ "ex"
+ ],
+ "kox":
+ [
+ "k",
+ "ox"
+ ],
+ "sa":
+ [
+ "s",
+ "a"
+ ],
+ "si":
+ [
+ "s",
+ "i"
+ ],
+ "su":
+ [
+ "s",
+ "u"
+ ],
+ "se":
+ [
+ "s",
+ "e"
+ ],
+ "so":
+ [
+ "s",
+ "o"
+ ],
+ "sax":
+ [
+ "s",
+ "ax"
+ ],
+ "six":
+ [
+ "s",
+ "ix"
+ ],
+ "sux":
+ [
+ "s",
+ "ux"
+ ],
+ "sex":
+ [
+ "s",
+ "ex"
+ ],
+ "sox":
+ [
+ "s",
+ "ox"
+ ],
+ "ta":
+ [
+ "t",
+ "a"
+ ],
+ "tu":
+ [
+ "t",
+ "u"
+ ],
+ "te":
+ [
+ "t",
+ "e"
+ ],
+ "to":
+ [
+ "t",
+ "o"
+ ],
+ "tax":
+ [
+ "t",
+ "ax"
+ ],
+ "tux":
+ [
+ "t",
+ "ux"
+ ],
+ "tex":
+ [
+ "t",
+ "ex"
+ ],
+ "tox":
+ [
+ "t",
+ "ox"
+ ],
+ "na":
+ [
+ "n",
+ "a"
+ ],
+ "nu":
+ [
+ "n",
+ "u"
+ ],
+ "ne":
+ [
+ "n",
+ "e"
+ ],
+ "no":
+ [
+ "n",
+ "o"
+ ],
+ "nax":
+ [
+ "n",
+ "ax"
+ ],
+ "nux":
+ [
+ "n",
+ "ux"
+ ],
+ "nex":
+ [
+ "n",
+ "ex"
+ ],
+ "nox":
+ [
+ "n",
+ "ox"
+ ],
+ "ha":
+ [
+ "h",
+ "a"
+ ],
+ "hu":
+ [
+ "h",
+ "u"
+ ],
+ "he":
+ [
+ "h",
+ "e"
+ ],
+ "ho":
+ [
+ "h",
+ "o"
+ ],
+ "hax":
+ [
+ "h",
+ "ax"
+ ],
+ "hux":
+ [
+ "h",
+ "ux"
+ ],
+ "hex":
+ [
+ "h",
+ "ex"
+ ],
+ "hox":
+ [
+ "h",
+ "ox"
+ ],
+ "ma":
+ [
+ "m",
+ "a"
+ ],
+ "mu":
+ [
+ "m",
+ "u"
+ ],
+ "me":
+ [
+ "m",
+ "e"
+ ],
+ "mo":
+ [
+ "m",
+ "o"
+ ],
+ "max":
+ [
+ "m",
+ "ax"
+ ],
+ "mux":
+ [
+ "m",
+ "ux"
+ ],
+ "mex":
+ [
+ "m",
+ "ex"
+ ],
+ "mox":
+ [
+ "m",
+ "ox"
+ ],
+ "ya":
+ [
+ "y",
+ "a"
+ ],
+ "yu":
+ [
+ "y",
+ "u"
+ ],
+ "ye":
+ [
+ "y",
+ "e"
+ ],
+ "yo":
+ [
+ "y",
+ "o"
+ ],
+ "yax":
+ [
+ "y",
+ "ax"
+ ],
+ "yux":
+ [
+ "y",
+ "ux"
+ ],
+ "yex":
+ [
+ "y",
+ "ex"
+ ],
+ "yox":
+ [
+ "y",
+ "ox"
+ ],
+ "ra":
+ [
+ "r",
+ "a"
+ ],
+ "ru":
+ [
+ "r",
+ "u"
+ ],
+ "re":
+ [
+ "r",
+ "e"
+ ],
+ "ro":
+ [
+ "r",
+ "o"
+ ],
+ "rax":
+ [
+ "r",
+ "ax"
+ ],
+ "rux":
+ [
+ "r",
+ "ux"
+ ],
+ "rex":
+ [
+ "r",
+ "ex"
+ ],
+ "rox":
+ [
+ "r",
+ "ox"
+ ],
+ "rra":
+ [
+ "rr",
+ "a"
+ ],
+ "rri":
+ [
+ "rr",
+ "i"
+ ],
+ "rru":
+ [
+ "rr",
+ "u"
+ ],
+ "rre":
+ [
+ "rr",
+ "e"
+ ],
+ "rro":
+ [
+ "rr",
+ "o"
+ ],
+ "rrax":
+ [
+ "rr",
+ "ax"
+ ],
+ "rrix":
+ [
+ "rr",
+ "ix"
+ ],
+ "rrux":
+ [
+ "rr",
+ "ux"
+ ],
+ "rrex":
+ [
+ "rr",
+ "ex"
+ ],
+ "rrox":
+ [
+ "rr",
+ "ox"
+ ],
+ "wa":
+ [
+ "w",
+ "a"
+ ],
+ "wi":
+ [
+ "w",
+ "i"
+ ],
+ "we":
+ [
+ "w",
+ "e"
+ ],
+ "wo":
+ [
+ "w",
+ "o"
+ ],
+ "wax":
+ [
+ "w",
+ "ax"
+ ],
+ "wix":
+ [
+ "w",
+ "ix"
+ ],
+ "wex":
+ [
+ "w",
+ "ex"
+ ],
+ "wox":
+ [
+ "w",
+ "ox"
+ ],
+ "ga":
+ [
+ "g",
+ "a"
+ ],
+ "ge":
+ [
+ "g",
+ "e"
+ ],
+ "go":
+ [
+ "g",
+ "o"
+ ],
+ "gax":
+ [
+ "g",
+ "ax"
+ ],
+ "gex":
+ [
+ "g",
+ "ex"
+ ],
+ "gox":
+ [
+ "g",
+ "ox"
+ ],
+ "za":
+ [
+ "z",
+ "a"
+ ],
+ "zi":
+ [
+ "z",
+ "i"
+ ],
+ "zu":
+ [
+ "z",
+ "u"
+ ],
+ "ze":
+ [
+ "z",
+ "e"
+ ],
+ "zo":
+ [
+ "z",
+ "o"
+ ],
+ "zax":
+ [
+ "z",
+ "ax"
+ ],
+ "zix":
+ [
+ "z",
+ "ix"
+ ],
+ "zux":
+ [
+ "z",
+ "ux"
+ ],
+ "zex":
+ [
+ "z",
+ "ex"
+ ],
+ "zox":
+ [
+ "z",
+ "ox"
+ ],
+ "ja":
+ [
+ "j",
+ "a"
+ ],
+ "ji":
+ [
+ "j",
+ "i"
+ ],
+ "ju":
+ [
+ "j",
+ "u"
+ ],
+ "je":
+ [
+ "j",
+ "e"
+ ],
+ "jo":
+ [
+ "j",
+ "o"
+ ],
+ "jax":
+ [
+ "j",
+ "ax"
+ ],
+ "jix":
+ [
+ "j",
+ "ix"
+ ],
+ "jux":
+ [
+ "j",
+ "ux"
+ ],
+ "jex":
+ [
+ "j",
+ "ex"
+ ],
+ "jox":
+ [
+ "j",
+ "ox"
+ ],
+ "da":
+ [
+ "d",
+ "a"
+ ],
+ "du":
+ [
+ "d",
+ "u"
+ ],
+ "de":
+ [
+ "d",
+ "e"
+ ],
+ "do":
+ [
+ "d",
+ "o"
+ ],
+ "dax":
+ [
+ "d",
+ "ax"
+ ],
+ "dux":
+ [
+ "d",
+ "ux"
+ ],
+ "dex":
+ [
+ "d",
+ "ex"
+ ],
+ "dox":
+ [
+ "d",
+ "ox"
+ ],
+ "ba":
+ [
+ "b",
+ "a"
+ ],
+ "bu":
+ [
+ "b",
+ "u"
+ ],
+ "be":
+ [
+ "b",
+ "e"
+ ],
+ "bo":
+ [
+ "b",
+ "o"
+ ],
+ "bax":
+ [
+ "b",
+ "ax"
+ ],
+ "bux":
+ [
+ "b",
+ "ux"
+ ],
+ "bex":
+ [
+ "b",
+ "ex"
+ ],
+ "box":
+ [
+ "b",
+ "ox"
+ ],
+ "pa":
+ [
+ "p",
+ "a"
+ ],
+ "pu":
+ [
+ "p",
+ "u"
+ ],
+ "pe":
+ [
+ "p",
+ "e"
+ ],
+ "po":
+ [
+ "p",
+ "o"
+ ],
+ "pax":
+ [
+ "p",
+ "ax"
+ ],
+ "pux":
+ [
+ "p",
+ "ux"
+ ],
+ "pex":
+ [
+ "p",
+ "ex"
+ ],
+ "pox":
+ [
+ "p",
+ "ox"
+ ],
+ "fa":
+ [
+ "f",
+ "a"
+ ],
+ "fu":
+ [
+ "f",
+ "u"
+ ],
+ "fe":
+ [
+ "f",
+ "e"
+ ],
+ "fo":
+ [
+ "f",
+ "o"
+ ],
+ "fax":
+ [
+ "f",
+ "ax"
+ ],
+ "fux":
+ [
+ "f",
+ "ux"
+ ],
+ "fex":
+ [
+ "f",
+ "ex"
+ ],
+ "fox":
+ [
+ "f",
+ "ox"
+ ],
+ "va":
+ [
+ "v",
+ "a"
+ ],
+ "vu":
+ [
+ "v",
+ "u"
+ ],
+ "ve":
+ [
+ "v",
+ "e"
+ ],
+ "vo":
+ [
+ "v",
+ "o"
+ ],
+ "vax":
+ [
+ "v",
+ "ax"
+ ],
+ "vux":
+ [
+ "v",
+ "ux"
+ ],
+ "vex":
+ [
+ "v",
+ "ex"
+ ],
+ "vox":
+ [
+ "v",
+ "ox"
+ ],
+ "tsa":
+ [
+ "ts",
+ "a"
+ ],
+ "tsi":
+ [
+ "ts",
+ "i"
+ ],
+ "tsu":
+ [
+ "ts",
+ "u"
+ ],
+ "tse":
+ [
+ "ts",
+ "e"
+ ],
+ "tso":
+ [
+ "ts",
+ "o"
+ ],
+ "tsax":
+ [
+ "ts",
+ "ax"
+ ],
+ "tsix":
+ [
+ "ts",
+ "ix"
+ ],
+ "tsux":
+ [
+ "ts",
+ "ux"
+ ],
+ "tsex":
+ [
+ "ts",
+ "ex"
+ ],
+ "tsox":
+ [
+ "ts",
+ "ox"
+ ],
+ "nga":
+ [
+ "ng",
+ "a"
+ ],
+ "ngu":
+ [
+ "ng",
+ "u"
+ ],
+ "nge":
+ [
+ "ng",
+ "e"
+ ],
+ "ngo":
+ [
+ "ng",
+ "o"
+ ],
+ "ngax":
+ [
+ "ng",
+ "ax"
+ ],
+ "ngux":
+ [
+ "ng",
+ "ux"
+ ],
+ "ngex":
+ [
+ "ng",
+ "ex"
+ ],
+ "ngox":
+ [
+ "ng",
+ "ox"
+ ],
+ "sha":
+ [
+ "sh",
+ "a"
+ ],
+ "shi":
+ [
+ "sh",
+ "i"
+ ],
+ "shu":
+ [
+ "sh",
+ "u"
+ ],
+ "she":
+ [
+ "sh",
+ "e"
+ ],
+ "sho":
+ [
+ "sh",
+ "o"
+ ],
+ "shax":
+ [
+ "sh",
+ "ax"
+ ],
+ "shix":
+ [
+ "sh",
+ "ix"
+ ],
+ "shux":
+ [
+ "sh",
+ "ux"
+ ],
+ "shex":
+ [
+ "sh",
+ "ex"
+ ],
+ "shox":
+ [
+ "sh",
+ "ox"
+ ],
+ "cha":
+ [
+ "ch",
+ "a"
+ ],
+ "chi":
+ [
+ "ch",
+ "i"
+ ],
+ "chu":
+ [
+ "ch",
+ "u"
+ ],
+ "che":
+ [
+ "ch",
+ "e"
+ ],
+ "cho":
+ [
+ "ch",
+ "o"
+ ],
+ "chax":
+ [
+ "ch",
+ "ax"
+ ],
+ "chix":
+ [
+ "ch",
+ "ix"
+ ],
+ "chux":
+ [
+ "ch",
+ "ux"
+ ],
+ "chex":
+ [
+ "ch",
+ "ex"
+ ],
+ "chox":
+ [
+ "ch",
+ "ox"
+ ],
+ "kya":
+ [
+ "ky",
+ "a"
+ ],
+ "ki":
+ [
+ "ky",
+ "i"
+ ],
+ "kyu":
+ [
+ "ky",
+ "u"
+ ],
+ "kye":
+ [
+ "ky",
+ "e"
+ ],
+ "kyo":
+ [
+ "ky",
+ "o"
+ ],
+ "kyax":
+ [
+ "ky",
+ "ax"
+ ],
+ "kix":
+ [
+ "ky",
+ "ix"
+ ],
+ "kyux":
+ [
+ "ky",
+ "ux"
+ ],
+ "kyex":
+ [
+ "ky",
+ "ex"
+ ],
+ "kyox":
+ [
+ "ky",
+ "ox"
+ ],
+ "tya":
+ [
+ "ty",
+ "a"
+ ],
+ "ti":
+ [
+ "ty",
+ "i"
+ ],
+ "tyu":
+ [
+ "ty",
+ "u"
+ ],
+ "tye":
+ [
+ "ty",
+ "e"
+ ],
+ "tyo":
+ [
+ "ty",
+ "o"
+ ],
+ "tyax":
+ [
+ "ty",
+ "ax"
+ ],
+ "tix":
+ [
+ "ty",
+ "ix"
+ ],
+ "tyux":
+ [
+ "ty",
+ "ux"
+ ],
+ "tyex":
+ [
+ "ty",
+ "ex"
+ ],
+ "tyox":
+ [
+ "ty",
+ "ox"
+ ],
+ "mya":
+ [
+ "my",
+ "a"
+ ],
+ "mi":
+ [
+ "my",
+ "i"
+ ],
+ "myu":
+ [
+ "my",
+ "u"
+ ],
+ "mye":
+ [
+ "my",
+ "e"
+ ],
+ "myo":
+ [
+ "my",
+ "o"
+ ],
+ "myax":
+ [
+ "my",
+ "ax"
+ ],
+ "mix":
+ [
+ "my",
+ "ix"
+ ],
+ "myux":
+ [
+ "my",
+ "ux"
+ ],
+ "myex":
+ [
+ "my",
+ "ex"
+ ],
+ "myox":
+ [
+ "my",
+ "ox"
+ ],
+ "nya":
+ [
+ "ny",
+ "a"
+ ],
+ "ni":
+ [
+ "ny",
+ "i"
+ ],
+ "nyu":
+ [
+ "ny",
+ "u"
+ ],
+ "nye":
+ [
+ "ny",
+ "e"
+ ],
+ "nyo":
+ [
+ "ny",
+ "o"
+ ],
+ "nyax":
+ [
+ "ny",
+ "ax"
+ ],
+ "nix":
+ [
+ "ny",
+ "ix"
+ ],
+ "nyux":
+ [
+ "ny",
+ "ux"
+ ],
+ "nyex":
+ [
+ "ny",
+ "ex"
+ ],
+ "nyox":
+ [
+ "ny",
+ "ox"
+ ],
+ "hya":
+ [
+ "hy",
+ "a"
+ ],
+ "hi":
+ [
+ "hy",
+ "i"
+ ],
+ "hyu":
+ [
+ "hy",
+ "u"
+ ],
+ "hye":
+ [
+ "hy",
+ "e"
+ ],
+ "hyo":
+ [
+ "hy",
+ "o"
+ ],
+ "hyax":
+ [
+ "hy",
+ "ax"
+ ],
+ "hix":
+ [
+ "hy",
+ "ix"
+ ],
+ "hyux":
+ [
+ "hy",
+ "ux"
+ ],
+ "hyex":
+ [
+ "hy",
+ "ex"
+ ],
+ "hyox":
+ [
+ "hy",
+ "ox"
+ ],
+ "rya":
+ [
+ "ry",
+ "a"
+ ],
+ "ri":
+ [
+ "ry",
+ "i"
+ ],
+ "ryu":
+ [
+ "ry",
+ "u"
+ ],
+ "rye":
+ [
+ "ry",
+ "e"
+ ],
+ "ryo":
+ [
+ "ry",
+ "o"
+ ],
+ "ryax":
+ [
+ "ry",
+ "ax"
+ ],
+ "rix":
+ [
+ "ry",
+ "ix"
+ ],
+ "ryux":
+ [
+ "ry",
+ "ux"
+ ],
+ "ryex":
+ [
+ "ry",
+ "ex"
+ ],
+ "ryox":
+ [
+ "ry",
+ "ox"
+ ],
+ "gya":
+ [
+ "gy",
+ "a"
+ ],
+ "gi":
+ [
+ "gy",
+ "i"
+ ],
+ "gyu":
+ [
+ "gy",
+ "u"
+ ],
+ "gye":
+ [
+ "gy",
+ "e"
+ ],
+ "gyo":
+ [
+ "gy",
+ "o"
+ ],
+ "gyax":
+ [
+ "gy",
+ "ax"
+ ],
+ "gix":
+ [
+ "gy",
+ "ix"
+ ],
+ "gyux":
+ [
+ "gy",
+ "ux"
+ ],
+ "gyex":
+ [
+ "gy",
+ "ex"
+ ],
+ "gyox":
+ [
+ "gy",
+ "ox"
+ ],
+ "bya":
+ [
+ "by",
+ "a"
+ ],
+ "bi":
+ [
+ "by",
+ "i"
+ ],
+ "byu":
+ [
+ "by",
+ "u"
+ ],
+ "bye":
+ [
+ "by",
+ "e"
+ ],
+ "byo":
+ [
+ "by",
+ "o"
+ ],
+ "byax":
+ [
+ "by",
+ "ax"
+ ],
+ "bix":
+ [
+ "by",
+ "ix"
+ ],
+ "byux":
+ [
+ "by",
+ "ux"
+ ],
+ "byex":
+ [
+ "by",
+ "ex"
+ ],
+ "byox":
+ [
+ "by",
+ "ox"
+ ],
+ "pya":
+ [
+ "py",
+ "a"
+ ],
+ "pi":
+ [
+ "py",
+ "i"
+ ],
+ "pyu":
+ [
+ "py",
+ "u"
+ ],
+ "pye":
+ [
+ "py",
+ "e"
+ ],
+ "pyo":
+ [
+ "py",
+ "o"
+ ],
+ "pyax":
+ [
+ "py",
+ "ax"
+ ],
+ "pix":
+ [
+ "py",
+ "ix"
+ ],
+ "pyux":
+ [
+ "py",
+ "ux"
+ ],
+ "pyex":
+ [
+ "py",
+ "ex"
+ ],
+ "pyox":
+ [
+ "py",
+ "ox"
+ ],
+ "dya":
+ [
+ "dy",
+ "a"
+ ],
+ "di":
+ [
+ "dy",
+ "i"
+ ],
+ "dyu":
+ [
+ "dy",
+ "u"
+ ],
+ "dye":
+ [
+ "dy",
+ "e"
+ ],
+ "dyo":
+ [
+ "dy",
+ "o"
+ ],
+ "dyax":
+ [
+ "dy",
+ "ax"
+ ],
+ "dix":
+ [
+ "dy",
+ "ix"
+ ],
+ "dyux":
+ [
+ "dy",
+ "ux"
+ ],
+ "dyex":
+ [
+ "dy",
+ "ex"
+ ],
+ "dyox":
+ [
+ "dy",
+ "ox"
+ ],
+ "ngya":
+ [
+ "ngy",
+ "a"
+ ],
+ "ngi":
+ [
+ "ngy",
+ "i"
+ ],
+ "ngyu":
+ [
+ "ngy",
+ "u"
+ ],
+ "ngye":
+ [
+ "ngy",
+ "e"
+ ],
+ "ngyo":
+ [
+ "ngy",
+ "o"
+ ],
+ "ngyax":
+ [
+ "ngy",
+ "ax"
+ ],
+ "ngix":
+ [
+ "ngy",
+ "ix"
+ ],
+ "ngyux":
+ [
+ "ngy",
+ "ux"
+ ],
+ "ngyex":
+ [
+ "ngy",
+ "ex"
+ ],
+ "ngyox":
+ [
+ "ngy",
+ "ox"
+ ],
+ "fya":
+ [
+ "fy",
+ "a"
+ ],
+ "fi":
+ [
+ "fy",
+ "i"
+ ],
+ "fyu":
+ [
+ "fy",
+ "u"
+ ],
+ "fye":
+ [
+ "fy",
+ "e"
+ ],
+ "fyo":
+ [
+ "fy",
+ "o"
+ ],
+ "fyax":
+ [
+ "fy",
+ "ax"
+ ],
+ "fix":
+ [
+ "fy",
+ "ix"
+ ],
+ "fyux":
+ [
+ "fy",
+ "ux"
+ ],
+ "fyex":
+ [
+ "fy",
+ "ex"
+ ],
+ "fyox":
+ [
+ "fy",
+ "ox"
+ ],
+ "vya":
+ [
+ "vy",
+ "a"
+ ],
+ "vi":
+ [
+ "vy",
+ "i"
+ ],
+ "vyu":
+ [
+ "vy",
+ "u"
+ ],
+ "vye":
+ [
+ "vy",
+ "e"
+ ],
+ "vyo":
+ [
+ "vy",
+ "o"
+ ],
+ "vyax":
+ [
+ "vy",
+ "ax"
+ ],
+ "vix":
+ [
+ "vy",
+ "ix"
+ ],
+ "vyux":
+ [
+ "vy",
+ "ux"
+ ],
+ "vyex":
+ [
+ "vy",
+ "ex"
+ ],
+ "vyox":
+ [
+ "vy",
+ "ox"
+ ],
+ "kwa":
+ [
+ "kw",
+ "a"
+ ],
+ "kwi":
+ [
+ "kw",
+ "i"
+ ],
+ "ku":
+ [
+ "kw",
+ "u"
+ ],
+ "kwe":
+ [
+ "kw",
+ "e"
+ ],
+ "kwo":
+ [
+ "kw",
+ "o"
+ ],
+ "kwax":
+ [
+ "kw",
+ "ax"
+ ],
+ "kwix":
+ [
+ "kw",
+ "ix"
+ ],
+ "kux":
+ [
+ "kw",
+ "ux"
+ ],
+ "kwex":
+ [
+ "kw",
+ "ex"
+ ],
+ "kwox":
+ [
+ "kw",
+ "ox"
+ ],
+ "gwa":
+ [
+ "gw",
+ "a"
+ ],
+ "gwi":
+ [
+ "gw",
+ "i"
+ ],
+ "gu":
+ [
+ "gw",
+ "u"
+ ],
+ "gwe":
+ [
+ "gw",
+ "e"
+ ],
+ "gwo":
+ [
+ "gw",
+ "o"
+ ],
+ "gwax":
+ [
+ "gw",
+ "ax"
+ ],
+ "gwix":
+ [
+ "gw",
+ "ix"
+ ],
+ "gux":
+ [
+ "gw",
+ "ux"
+ ],
+ "gwex":
+ [
+ "gw",
+ "ex"
+ ],
+ "gwox":
+ [
+ "gw",
+ "ox"
+ ]
+ },
+ "phon_class":
+ {
+ "head":
+ [
+ "k",
+ "s",
+ "sh",
+ "t",
+ "ch",
+ "ts",
+ "n",
+ "h",
+ "f",
+ "m",
+ "y",
+ "r",
+ "rr",
+ "w",
+ "g",
+ "z",
+ "j",
+ "d",
+ "b",
+ "p",
+ "ky",
+ "ty",
+ "ny",
+ "hy",
+ "my",
+ "ry",
+ "by",
+ "gy",
+ "py",
+ "dy",
+ "vy",
+ "fy",
+ "kw",
+ "gw",
+ "ng",
+ "ngy",
+ "v"
+ ],
+ "tail":
+ [
+ "a",
+ "i",
+ "u",
+ "e",
+ "o",
+ "nv",
+ "mv",
+ "ax",
+ "ix",
+ "ux",
+ "ex",
+ "ox",
+ "cl"
+ ]
+ }
+ },
+ {
+ "language": "eng",
+ "dict":
+ {},
+ "phon_class":
+ {
+ "tail":
+ [
+ "aa",
+ "ae",
+ "ah",
+ "ao",
+ "aw",
+ "ay",
+ "eh",
+ "er",
+ "ey",
+ "ih",
+ "iy",
+ "ow",
+ "oy",
+ "uh",
+ "uw",
+ "mv",
+ "nv",
+ "ngv"
+ ],
+ "head":
+ [
+ "b",
+ "ch",
+ "d",
+ "dh",
+ "f",
+ "g",
+ "hh",
+ "jh",
+ "k",
+ "l",
+ "m",
+ "n",
+ "ng",
+ "p",
+ "r",
+ "s",
+ "sh",
+ "t",
+ "th",
+ "v",
+ "w",
+ "y",
+ "z",
+ "zh",
+ "dx",
+ "dr",
+ "tr"
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/resource/midi-note.scp b/resource/midi-note.scp
new file mode 100644
index 0000000000000000000000000000000000000000..45113e930ae15c3145cf22df63108ffdea719743
--- /dev/null
+++ b/resource/midi-note.scp
@@ -0,0 +1,152 @@
+G9 127
+F#9 126
+Gb9 126
+F9 125
+E9 124
+D#9 123
+Eb9 123
+D9 122
+C#9 121
+Db9 121
+C9 120
+B8 119
+A#8 118
+Bb8 118
+A8 117
+G#8 116
+Ab8 116
+G8 115
+F#8 114
+Gb8 114
+F8 113
+E8 112
+D#8 111
+Eb8 111
+D8 110
+C#8 109
+Db8 109
+C8 108
+B7 107
+A#7 106
+Bb7 106
+A7 105
+G#7 104
+Ab7 104
+G7 103
+F#7 102
+Gb7 102
+F7 101
+E7 100
+D#7 99
+Eb7 99
+D7 98
+C#7 97
+Db7 97
+C7 96
+B6 95
+A#6 94
+Bb6 94
+A6 93
+G#6 92
+Ab6 92
+G6 91
+F#6 90
+Gb6 90
+F6 89
+E6 88
+D#6 87
+Eb6 87
+D6 86
+C#6 85
+Db6 85
+C6 84
+B5 83
+A#5 82
+Bb5 82
+A5 81
+G#5 80
+Ab5 80
+G5 79
+F#5 78
+Gb5 78
+F5 77
+E5 76
+D#5 75
+Eb5 75
+D5 74
+C#5 73
+Db5 73
+C5 72
+B4 71
+A#4 70
+Bb4 70
+A4 69
+G#4 68
+Ab4 68
+G4 67
+F#4 66
+Gb4 66
+F4 65
+E4 64
+D#4 63
+Eb4 63
+D4 62
+C#4 61
+Db4 61
+C4 60
+B3 59
+A#3 58
+Bb3 58
+A3 57
+G#3 56
+Ab3 56
+G3 55
+F#3 54
+Gb3 54
+F3 53
+E3 52
+D#3 51
+Eb3 51
+D3 50
+C#3 49
+Db3 49
+C3 48
+B2 47
+A#2 46
+Bb2 46
+A2 45
+G#2 44
+Ab2 44
+G2 43
+F#2 42
+Gb2 42
+F2 41
+E2 40
+D#2 39
+Eb2 39
+D2 38
+C#2 37
+Db2 37
+C2 36
+B1 35
+A#1 34
+Bb1 34
+A1 33
+G#1 32
+Ab1 32
+G1 31
+F#1 30
+Gb1 30
+F1 29
+E1 28
+D#1 27
+Eb1 27
+D1 26
+C#1 25
+Db1 25
+C1 24
+B0 23
+A#0 22
+Bb0 22
+A0 21
+rest 0
diff --git a/resource/pinyin_dict.py b/resource/pinyin_dict.py
new file mode 100644
index 0000000000000000000000000000000000000000..535e11160d5d28a92be7b508ddb01ab5f6b008d1
--- /dev/null
+++ b/resource/pinyin_dict.py
@@ -0,0 +1,423 @@
+# Adapted from Opencpop's pinyin to phoneme mapping table:
+# https://wenet.org.cn/opencpop/resources/annotationformat/
+PINYIN_DICT = {
+ "a": ("a",),
+ "ai": ("ai",),
+ "an": ("an",),
+ "ang": ("ang",),
+ "ao": ("ao",),
+ "ba": ("b", "a"),
+ "bai": ("b", "ai"),
+ "ban": ("b", "an"),
+ "bang": ("b", "ang"),
+ "bao": ("b", "ao"),
+ "bei": ("b", "ei"),
+ "ben": ("b", "en"),
+ "beng": ("b", "eng"),
+ "bi": ("b", "i"),
+ "bian": ("b", "ian"),
+ "biao": ("b", "iao"),
+ "bie": ("b", "ie"),
+ "bin": ("b", "in"),
+ "bing": ("b", "ing"),
+ "bo": ("b", "o"),
+ "bu": ("b", "u"),
+ "ca": ("c", "a"),
+ "cai": ("c", "ai"),
+ "can": ("c", "an"),
+ "cang": ("c", "ang"),
+ "cao": ("c", "ao"),
+ "ce": ("c", "e"),
+ "cei": ("c", "ei"),
+ "cen": ("c", "en"),
+ "ceng": ("c", "eng"),
+ "cha": ("ch", "a"),
+ "chai": ("ch", "ai"),
+ "chan": ("ch", "an"),
+ "chang": ("ch", "ang"),
+ "chao": ("ch", "ao"),
+ "che": ("ch", "e"),
+ "chen": ("ch", "en"),
+ "cheng": ("ch", "eng"),
+ "chi": ("ch", "i"),
+ "chong": ("ch", "ong"),
+ "chou": ("ch", "ou"),
+ "chu": ("ch", "u"),
+ "chua": ("ch", "ua"),
+ "chuai": ("ch", "uai"),
+ "chuan": ("ch", "uan"),
+ "chuang": ("ch", "uang"),
+ "chui": ("ch", "ui"),
+ "chun": ("ch", "un"),
+ "chuo": ("ch", "uo"),
+ "ci": ("c", "i"),
+ "cong": ("c", "ong"),
+ "cou": ("c", "ou"),
+ "cu": ("c", "u"),
+ "cuan": ("c", "uan"),
+ "cui": ("c", "ui"),
+ "cun": ("c", "un"),
+ "cuo": ("c", "uo"),
+ "da": ("d", "a"),
+ "dai": ("d", "ai"),
+ "dan": ("d", "an"),
+ "dang": ("d", "ang"),
+ "dao": ("d", "ao"),
+ "de": ("d", "e"),
+ "dei": ("d", "ei"),
+ "den": ("d", "en"),
+ "deng": ("d", "eng"),
+ "di": ("d", "i"),
+ "dia": ("d", "ia"),
+ "dian": ("d", "ian"),
+ "diao": ("d", "iao"),
+ "die": ("d", "ie"),
+ "ding": ("d", "ing"),
+ "diu": ("d", "iu"),
+ "dong": ("d", "ong"),
+ "dou": ("d", "ou"),
+ "du": ("d", "u"),
+ "duan": ("d", "uan"),
+ "dui": ("d", "ui"),
+ "dun": ("d", "un"),
+ "duo": ("d", "uo"),
+ "e": ("e",),
+ "ei": ("ei",),
+ "en": ("en",),
+ "eng": ("eng",),
+ "er": ("er",),
+ "fa": ("f", "a"),
+ "fan": ("f", "an"),
+ "fang": ("f", "ang"),
+ "fei": ("f", "ei"),
+ "fen": ("f", "en"),
+ "feng": ("f", "eng"),
+ "fo": ("f", "o"),
+ "fou": ("f", "ou"),
+ "fu": ("f", "u"),
+ "ga": ("g", "a"),
+ "gai": ("g", "ai"),
+ "gan": ("g", "an"),
+ "gang": ("g", "ang"),
+ "gao": ("g", "ao"),
+ "ge": ("g", "e"),
+ "gei": ("g", "ei"),
+ "gen": ("g", "en"),
+ "geng": ("g", "eng"),
+ "gong": ("g", "ong"),
+ "gou": ("g", "ou"),
+ "gu": ("g", "u"),
+ "gua": ("g", "ua"),
+ "guai": ("g", "uai"),
+ "guan": ("g", "uan"),
+ "guang": ("g", "uang"),
+ "gui": ("g", "ui"),
+ "gun": ("g", "un"),
+ "guo": ("g", "uo"),
+ "ha": ("h", "a"),
+ "hai": ("h", "ai"),
+ "han": ("h", "an"),
+ "hang": ("h", "ang"),
+ "hao": ("h", "ao"),
+ "he": ("h", "e"),
+ "hei": ("h", "ei"),
+ "hen": ("h", "en"),
+ "heng": ("h", "eng"),
+ "hm": ("h", "m"),
+ "hng": ("h", "ng"),
+ "hong": ("h", "ong"),
+ "hou": ("h", "ou"),
+ "hu": ("h", "u"),
+ "hua": ("h", "ua"),
+ "huai": ("h", "uai"),
+ "huan": ("h", "uan"),
+ "huang": ("h", "uang"),
+ "hui": ("h", "ui"),
+ "hun": ("h", "un"),
+ "huo": ("h", "uo"),
+ "ji": ("j", "i"),
+ "jia": ("j", "ia"),
+ "jian": ("j", "ian"),
+ "jiang": ("j", "iang"),
+ "jiao": ("j", "iao"),
+ "jie": ("j", "ie"),
+ "jin": ("j", "in"),
+ "jing": ("j", "ing"),
+ "jiong": ("j", "iong"),
+ "jiu": ("j", "iu"),
+ "ju": ("j", "v"),
+ "juan": ("j", "van"),
+ "jue": ("j", "ve"),
+ "jun": ("j", "vn"),
+ "ka": ("k", "a"),
+ "kai": ("k", "ai"),
+ "kan": ("k", "an"),
+ "kang": ("k", "ang"),
+ "kao": ("k", "ao"),
+ "ke": ("k", "e"),
+ "kei": ("k", "ei"),
+ "ken": ("k", "en"),
+ "keng": ("k", "eng"),
+ "kong": ("k", "ong"),
+ "kou": ("k", "ou"),
+ "ku": ("k", "u"),
+ "kua": ("k", "ua"),
+ "kuai": ("k", "uai"),
+ "kuan": ("k", "uan"),
+ "kuang": ("k", "uang"),
+ "kui": ("k", "ui"),
+ "kun": ("k", "un"),
+ "kuo": ("k", "uo"),
+ "la": ("l", "a"),
+ "lai": ("l", "ai"),
+ "lan": ("l", "an"),
+ "lang": ("l", "ang"),
+ "lao": ("l", "ao"),
+ "le": ("l", "e"),
+ "lei": ("l", "ei"),
+ "leng": ("l", "eng"),
+ "li": ("l", "i"),
+ "lia": ("l", "ia"),
+ "lian": ("l", "ian"),
+ "liang": ("l", "iang"),
+ "liao": ("l", "iao"),
+ "lie": ("l", "ie"),
+ "lin": ("l", "in"),
+ "ling": ("l", "ing"),
+ "liu": ("l", "iu"),
+ "lo": ("l", "o"),
+ "long": ("l", "ong"),
+ "lou": ("l", "ou"),
+ "lu": ("l", "u"),
+ "luan": ("l", "uan"),
+ "lun": ("l", "un"),
+ "luo": ("l", "uo"),
+ "lv": ("l", "v"),
+ "lve": ("l", "ve"),
+ "m": ("m",),
+ "ma": ("m", "a"),
+ "mai": ("m", "ai"),
+ "man": ("m", "an"),
+ "mang": ("m", "ang"),
+ "mao": ("m", "ao"),
+ "me": ("m", "e"),
+ "mei": ("m", "ei"),
+ "men": ("m", "en"),
+ "meng": ("m", "eng"),
+ "mi": ("m", "i"),
+ "mian": ("m", "ian"),
+ "miao": ("m", "iao"),
+ "mie": ("m", "ie"),
+ "min": ("m", "in"),
+ "ming": ("m", "ing"),
+ "miu": ("m", "iu"),
+ "mo": ("m", "o"),
+ "mou": ("m", "ou"),
+ "mu": ("m", "u"),
+ "n": ("n",),
+ "na": ("n", "a"),
+ "nai": ("n", "ai"),
+ "nan": ("n", "an"),
+ "nang": ("n", "ang"),
+ "nao": ("n", "ao"),
+ "ne": ("n", "e"),
+ "nei": ("n", "ei"),
+ "nen": ("n", "en"),
+ "neng": ("n", "eng"),
+ "ng": ("n", "g"),
+ "ni": ("n", "i"),
+ "nian": ("n", "ian"),
+ "niang": ("n", "iang"),
+ "niao": ("n", "iao"),
+ "nie": ("n", "ie"),
+ "nin": ("n", "in"),
+ "ning": ("n", "ing"),
+ "niu": ("n", "iu"),
+ "nong": ("n", "ong"),
+ "nou": ("n", "ou"),
+ "nu": ("n", "u"),
+ "nuan": ("n", "uan"),
+ "nun": ("n", "un"),
+ "nuo": ("n", "uo"),
+ "nv": ("n", "v"),
+ "nve": ("n", "ve"),
+ "o": ("o",),
+ "ou": ("ou",),
+ "pa": ("p", "a"),
+ "pai": ("p", "ai"),
+ "pan": ("p", "an"),
+ "pang": ("p", "ang"),
+ "pao": ("p", "ao"),
+ "pei": ("p", "ei"),
+ "pen": ("p", "en"),
+ "peng": ("p", "eng"),
+ "pi": ("p", "i"),
+ "pian": ("p", "ian"),
+ "piao": ("p", "iao"),
+ "pie": ("p", "ie"),
+ "pin": ("p", "in"),
+ "ping": ("p", "ing"),
+ "po": ("p", "o"),
+ "pou": ("p", "ou"),
+ "pu": ("p", "u"),
+ "qi": ("q", "i"),
+ "qia": ("q", "ia"),
+ "qian": ("q", "ian"),
+ "qiang": ("q", "iang"),
+ "qiao": ("q", "iao"),
+ "qie": ("q", "ie"),
+ "qin": ("q", "in"),
+ "qing": ("q", "ing"),
+ "qiong": ("q", "iong"),
+ "qiu": ("q", "iu"),
+ "qu": ("q", "v"),
+ "quan": ("q", "van"),
+ "que": ("q", "ve"),
+ "qun": ("q", "vn"),
+ "ran": ("r", "an"),
+ "rang": ("r", "ang"),
+ "rao": ("r", "ao"),
+ "re": ("r", "e"),
+ "ren": ("r", "en"),
+ "reng": ("r", "eng"),
+ "ri": ("r", "i"),
+ "rong": ("r", "ong"),
+ "rou": ("r", "ou"),
+ "ru": ("r", "u"),
+ "rua": ("r", "ua"),
+ "ruan": ("r", "uan"),
+ "rui": ("r", "ui"),
+ "run": ("r", "un"),
+ "ruo": ("r", "uo"),
+ "sa": ("s", "a"),
+ "sai": ("s", "ai"),
+ "san": ("s", "an"),
+ "sang": ("s", "ang"),
+ "sao": ("s", "ao"),
+ "se": ("s", "e"),
+ "sen": ("s", "en"),
+ "seng": ("s", "eng"),
+ "sha": ("sh", "a"),
+ "shai": ("sh", "ai"),
+ "shan": ("sh", "an"),
+ "shang": ("sh", "ang"),
+ "shao": ("sh", "ao"),
+ "she": ("sh", "e"),
+ "shei": ("sh", "ei"),
+ "shen": ("sh", "en"),
+ "sheng": ("sh", "eng"),
+ "shi": ("sh", "i"),
+ "shou": ("sh", "ou"),
+ "shu": ("sh", "u"),
+ "shua": ("sh", "ua"),
+ "shuai": ("sh", "uai"),
+ "shuan": ("sh", "uan"),
+ "shuang": ("sh", "uang"),
+ "shui": ("sh", "ui"),
+ "shun": ("sh", "un"),
+ "shuo": ("sh", "uo"),
+ "si": ("s", "i"),
+ "song": ("s", "ong"),
+ "sou": ("s", "ou"),
+ "su": ("s", "u"),
+ "suan": ("s", "uan"),
+ "sui": ("s", "ui"),
+ "sun": ("s", "un"),
+ "suo": ("s", "uo"),
+ "ta": ("t", "a"),
+ "tai": ("t", "ai"),
+ "tan": ("t", "an"),
+ "tang": ("t", "ang"),
+ "tao": ("t", "ao"),
+ "te": ("t", "e"),
+ "tei": ("t", "ei"),
+ "teng": ("t", "eng"),
+ "ti": ("t", "i"),
+ "tian": ("t", "ian"),
+ "tiao": ("t", "iao"),
+ "tie": ("t", "ie"),
+ "ting": ("t", "ing"),
+ "tong": ("t", "ong"),
+ "tou": ("t", "ou"),
+ "tu": ("t", "u"),
+ "tuan": ("t", "uan"),
+ "tui": ("t", "ui"),
+ "tun": ("t", "un"),
+ "tuo": ("t", "uo"),
+ "wa": ("w", "a"),
+ "wai": ("w", "ai"),
+ "wan": ("w", "an"),
+ "wang": ("w", "ang"),
+ "wei": ("w", "ei"),
+ "wen": ("w", "en"),
+ "weng": ("w", "eng"),
+ "wo": ("w", "o"),
+ "wu": ("w", "u"),
+ "xi": ("x", "i"),
+ "xia": ("x", "ia"),
+ "xian": ("x", "ian"),
+ "xiang": ("x", "iang"),
+ "xiao": ("x", "iao"),
+ "xie": ("x", "ie"),
+ "xin": ("x", "in"),
+ "xing": ("x", "ing"),
+ "xiong": ("x", "iong"),
+ "xiu": ("x", "iu"),
+ "xu": ("x", "v"),
+ "xuan": ("x", "van"),
+ "xue": ("x", "ve"),
+ "xun": ("x", "vn"),
+ "ya": ("y", "a"),
+ "yan": ("y", "an"),
+ "yang": ("y", "ang"),
+ "yao": ("y", "ao"),
+ "ye": ("y", "e"),
+ "yi": ("y", "i"),
+ "yin": ("y", "in"),
+ "ying": ("y", "ing"),
+ "yo": ("y", "o"),
+ "yong": ("y", "ong"),
+ "you": ("y", "ou"),
+ "yu": ("y", "v"),
+ "yuan": ("y", "van"),
+ "yue": ("y", "ve"),
+ "yun": ("y", "vn"),
+ "za": ("z", "a"),
+ "zai": ("z", "ai"),
+ "zan": ("z", "an"),
+ "zang": ("z", "ang"),
+ "zao": ("z", "ao"),
+ "ze": ("z", "e"),
+ "zei": ("z", "ei"),
+ "zen": ("z", "en"),
+ "zeng": ("z", "eng"),
+ "zha": ("zh", "a"),
+ "zhai": ("zh", "ai"),
+ "zhan": ("zh", "an"),
+ "zhang": ("zh", "ang"),
+ "zhao": ("zh", "ao"),
+ "zhe": ("zh", "e"),
+ "zhei": ("zh", "ei"),
+ "zhen": ("zh", "en"),
+ "zheng": ("zh", "eng"),
+ "zhi": ("zh", "i"),
+ "zhong": ("zh", "ong"),
+ "zhou": ("zh", "ou"),
+ "zhu": ("zh", "u"),
+ "zhua": ("zh", "ua"),
+ "zhuai": ("zh", "uai"),
+ "zhuan": ("zh", "uan"),
+ "zhuang": ("zh", "uang"),
+ "zhui": ("zh", "ui"),
+ "zhun": ("zh", "un"),
+ "zhuo": ("zh", "uo"),
+ "zi": ("z", "i"),
+ "zong": ("z", "ong"),
+ "zou": ("z", "ou"),
+ "zu": ("z", "u"),
+ "zuan": ("z", "uan"),
+ "zui": ("z", "ui"),
+ "zun": ("z", "un"),
+ "zuo": ("z", "uo"),
+}
+
diff --git a/resource/singer/singer_embedding_ace-1.npy b/resource/singer/singer_embedding_ace-1.npy
new file mode 100644
index 0000000000000000000000000000000000000000..8cac8c825028aaa87c3bc2c14132a01767a1706b
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-1.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac07d73eb172609c87329b35af91f0d27c1c20c30dcd90f23f1d4eb8c6450ca6
+size 896
diff --git a/resource/singer/singer_embedding_ace-10.npy b/resource/singer/singer_embedding_ace-10.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4cee8aa64984095b5d1fa58bc6350fe0faeb76ee
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-10.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6b4da3cb369b0d4f2bcdb76986e6fbfb3ebba727a8e5a899227d6b70f73769d
+size 896
diff --git a/resource/singer/singer_embedding_ace-11.npy b/resource/singer/singer_embedding_ace-11.npy
new file mode 100644
index 0000000000000000000000000000000000000000..26d5dcb8407d8351ff1505c8a7be280c49fc7ef3
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-11.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf65222a416d9786feea3ac91672683727973aa7f7a89b533117a2bdf5dd706b
+size 896
diff --git a/resource/singer/singer_embedding_ace-12.npy b/resource/singer/singer_embedding_ace-12.npy
new file mode 100644
index 0000000000000000000000000000000000000000..0547486b9c77ebf82fb9345de718d035c989cbc4
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-12.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f07e7da7629c222318beaafee2b43f913be6f5137842f7d771225bb76268c7f
+size 896
diff --git a/resource/singer/singer_embedding_ace-13.npy b/resource/singer/singer_embedding_ace-13.npy
new file mode 100644
index 0000000000000000000000000000000000000000..cd59cd3b06b84f0999d56d4a242747334d33951a
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-13.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:edfc4aba22a1adb4680a70ab872d2522a12587180d91176d64b03bdb4f181dfd
+size 896
diff --git a/resource/singer/singer_embedding_ace-14.npy b/resource/singer/singer_embedding_ace-14.npy
new file mode 100644
index 0000000000000000000000000000000000000000..1f9b3b6b6f21478600890a7fa173402fe3040c7d
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-14.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f43b58502afc550af2eff7c358e370b72433163b319b97b4c3b3d3eff9557ce
+size 896
diff --git a/resource/singer/singer_embedding_ace-15.npy b/resource/singer/singer_embedding_ace-15.npy
new file mode 100644
index 0000000000000000000000000000000000000000..627b1c0827f5741a144112c0075cfe6f2ebeb27c
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-15.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee8771b428b1f2bd5f680d54287eff436b3a9b84c6dd15797502942fe22ad18b
+size 896
diff --git a/resource/singer/singer_embedding_ace-16.npy b/resource/singer/singer_embedding_ace-16.npy
new file mode 100644
index 0000000000000000000000000000000000000000..5eb17b643e43a610c9fd8273936e83561145cad3
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-16.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:edea4a167679d619d66fc972a273b310290f9e5eac75a7857e81a7f25286b67b
+size 896
diff --git a/resource/singer/singer_embedding_ace-17.npy b/resource/singer/singer_embedding_ace-17.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ff48761e29d91c8e37a0e5e0cb8c1ef1c844d9c1
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-17.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bffeb7f3364168310939320f885d3ccf1502915365873050602eac7b557b12f
+size 896
diff --git a/resource/singer/singer_embedding_ace-18.npy b/resource/singer/singer_embedding_ace-18.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4e34fac0d424f032c6350d0fa3518295cea121c4
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-18.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e3ffe2c7f0e583f97d58c13bc7318e64f1a33c0549e171f01d90c1fc0659a10
+size 896
diff --git a/resource/singer/singer_embedding_ace-19.npy b/resource/singer/singer_embedding_ace-19.npy
new file mode 100644
index 0000000000000000000000000000000000000000..14b81c6211e6f448e1904fbb591f4d7d40276e74
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-19.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32d8abcf1ce64bdbe38c959a43103da2f08b7e0399de1de44ab0ba64caf63deb
+size 896
diff --git a/resource/singer/singer_embedding_ace-2.npy b/resource/singer/singer_embedding_ace-2.npy
new file mode 100644
index 0000000000000000000000000000000000000000..dcdbee9182f8819a5fd2e024223f760583fd7df5
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-2.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11410fa00026e13862d6636e77e3f8932b6f1986ceec3039dc5ebfcfb865cd8e
+size 896
diff --git a/resource/singer/singer_embedding_ace-20.npy b/resource/singer/singer_embedding_ace-20.npy
new file mode 100644
index 0000000000000000000000000000000000000000..dc8c78905e98a4544b007080d9d53a744665a1f3
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-20.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:911d7f112b52b8644742d18c97346a5d10731dc2f001c3523297e01641e22b21
+size 896
diff --git a/resource/singer/singer_embedding_ace-21.npy b/resource/singer/singer_embedding_ace-21.npy
new file mode 100644
index 0000000000000000000000000000000000000000..956c198c8752d3fce406498449992933d3217cca
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-21.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c62c1b06d0448bdc3709d994bb54593a41d27356f1cabd6ec5818cf523ee66f
+size 896
diff --git a/resource/singer/singer_embedding_ace-22.npy b/resource/singer/singer_embedding_ace-22.npy
new file mode 100644
index 0000000000000000000000000000000000000000..0d3393aa172cdb220c64c9b7743d4f565e73fc67
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-22.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db4b2821e3a955da34a3369f36f7eac366fd7c7e742f43676d753ca5f60ba7fa
+size 896
diff --git a/resource/singer/singer_embedding_ace-23.npy b/resource/singer/singer_embedding_ace-23.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ec1c5e1f401a33ac9a8457c8184d85028d01cb45
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-23.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9e98c6885c860bd9393c6829a430c9956dd6d0a7e286dc0e19e58a8cdb26ddc
+size 896
diff --git a/resource/singer/singer_embedding_ace-24.npy b/resource/singer/singer_embedding_ace-24.npy
new file mode 100644
index 0000000000000000000000000000000000000000..027cc86074acd0370b0119ff8faa949d6e90a4c2
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-24.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5753ebb8bed09c7d03565166282c38def512c9a686f8cc6ce672b0ad71d7fd7c
+size 896
diff --git a/resource/singer/singer_embedding_ace-25.npy b/resource/singer/singer_embedding_ace-25.npy
new file mode 100644
index 0000000000000000000000000000000000000000..26e3da922373c0c838fcaf34495f666c4cf94cdd
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-25.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cfdeb67333e1c316bc50ef9ce05cd4e894f9ad3af307a5c41e5cf2314a021fc3
+size 896
diff --git a/resource/singer/singer_embedding_ace-26.npy b/resource/singer/singer_embedding_ace-26.npy
new file mode 100644
index 0000000000000000000000000000000000000000..3be92b7c11fb35cf2c80c280ad5434173f7f8819
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-26.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea4a02e11fa0287f247f057396e70bde203883c00f0fbb266bc28ecff44a1533
+size 896
diff --git a/resource/singer/singer_embedding_ace-27.npy b/resource/singer/singer_embedding_ace-27.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4e1c60038ba1c85c6361895e3fd9976d5dda0c09
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-27.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eecbf3c017c1b6cffbc5ae393a6f78544154ab1e88f714904f56889a1065a74f
+size 896
diff --git a/resource/singer/singer_embedding_ace-28.npy b/resource/singer/singer_embedding_ace-28.npy
new file mode 100644
index 0000000000000000000000000000000000000000..cbc368d28d91140746f7fe40c5811c99b521c803
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-28.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3f23bf949e26a7486aa0d8905b79bd80af6ab77afa1f7f5e6c8d6ac074558ff
+size 896
diff --git a/resource/singer/singer_embedding_ace-29.npy b/resource/singer/singer_embedding_ace-29.npy
new file mode 100644
index 0000000000000000000000000000000000000000..26de40079258f04bd2b46e5b64c1abc05d261beb
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-29.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b6807858aff6652a354e2945ca36de2cce5f766d09e0a14efcca6cc5576a2bd
+size 896
diff --git a/resource/singer/singer_embedding_ace-3.npy b/resource/singer/singer_embedding_ace-3.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9190428c77ef58f8b384413c3948eb525d5e54d8
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-3.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ab0dd74df2d47ee5de50eab7adc0a771b52e1cb10ebabdf47620001027a6f113
+size 896
diff --git a/resource/singer/singer_embedding_ace-30.npy b/resource/singer/singer_embedding_ace-30.npy
new file mode 100644
index 0000000000000000000000000000000000000000..04e0b2a628ed2d8381f6fcfcea678f40856334b5
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-30.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d0f99a41d7b459e5e96bea65ac793d68d62e92c75c42e0bfb0e04d8c0313ad3
+size 896
diff --git a/resource/singer/singer_embedding_ace-4.npy b/resource/singer/singer_embedding_ace-4.npy
new file mode 100644
index 0000000000000000000000000000000000000000..8966263705a3b71088313051a1f59d7bf88ef7d6
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-4.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c0361d54e0df795e1d60b8d10d32e459aadcd0a867ba1888c36a9c6f09b2eb2
+size 896
diff --git a/resource/singer/singer_embedding_ace-5.npy b/resource/singer/singer_embedding_ace-5.npy
new file mode 100644
index 0000000000000000000000000000000000000000..fbf7c53738748b6cb29cce2da06df2f3ba5742b9
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-5.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:50a9b21470c213422954ce1ce3f1cc8d5c295862896acc9fb772fa5c54f8bb57
+size 896
diff --git a/resource/singer/singer_embedding_ace-6.npy b/resource/singer/singer_embedding_ace-6.npy
new file mode 100644
index 0000000000000000000000000000000000000000..36a01af033d94867b60b2190a06a9a482296a827
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-6.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3a7de10b1f824cc6ed4f4c203a434fa0990bc6cf58e9e1c73c3103b92041a0c
+size 896
diff --git a/resource/singer/singer_embedding_ace-7.npy b/resource/singer/singer_embedding_ace-7.npy
new file mode 100644
index 0000000000000000000000000000000000000000..c3bf0f54621e48db4608986d07136a4cc336b5ca
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-7.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce7059ef8ae835777f53e3c89af722773f0e5792eeced0a4c131c1aeeeb342f1
+size 896
diff --git a/resource/singer/singer_embedding_ace-8.npy b/resource/singer/singer_embedding_ace-8.npy
new file mode 100644
index 0000000000000000000000000000000000000000..d875affae5430910142e8e0e8a36c520d9c4fe6f
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-8.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b27ddeda52d4e2298d95c77ae85d22d35ac83393f3b00417d21041be38ebacf3
+size 896
diff --git a/resource/singer/singer_embedding_ace-9.npy b/resource/singer/singer_embedding_ace-9.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9bb3146a5f1004876b6e34860a09aac25ca24149
--- /dev/null
+++ b/resource/singer/singer_embedding_ace-9.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17547452ee7b536dbf3ccda567cd0230bf53f103c27d66687a1ca8959782b45c
+size 896
diff --git a/resource/singer/singer_embedding_ameboshi.npy b/resource/singer/singer_embedding_ameboshi.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4361351c1f1fddb78e02029596975f5186aa4def
--- /dev/null
+++ b/resource/singer/singer_embedding_ameboshi.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58f65d89d76060bb5406cdde4001bde87c29b0ef3fefd3a2072ab937a379cc9c
+size 896
diff --git a/resource/singer/singer_embedding_itako.npy b/resource/singer/singer_embedding_itako.npy
new file mode 100644
index 0000000000000000000000000000000000000000..38e86f185d8373f6ee8afcd407f0f54bc909d866
--- /dev/null
+++ b/resource/singer/singer_embedding_itako.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c94e137f090bb8376114a3aadf42423db4e59d0236a46049f8cee9c387fd5fd6
+size 896
diff --git a/resource/singer/singer_embedding_kiritan.npy b/resource/singer/singer_embedding_kiritan.npy
new file mode 100644
index 0000000000000000000000000000000000000000..082d27b47386a2f2776d36aba352cd050dee1343
--- /dev/null
+++ b/resource/singer/singer_embedding_kiritan.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68583154587392d29729c270bc82778c203bbfe2f2101f5ec5bc68c8aa40bd22
+size 896
diff --git a/resource/singer/singer_embedding_kising_barber.npy b/resource/singer/singer_embedding_kising_barber.npy
new file mode 100644
index 0000000000000000000000000000000000000000..47ca062f396b91d8ab9e65bd674308575851a322
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_barber.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5643c312089790dc95d97e4a8b24f152d7e4caa703170143f1c1f9ecb0179564
+size 896
diff --git a/resource/singer/singer_embedding_kising_blanca.npy b/resource/singer/singer_embedding_kising_blanca.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b515da7afe05a322623091556cb52dd880d3c11f
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_blanca.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fec31eacdb733f13185daf155f75d73f0fdcf1eda1cce92d02b93d02878da3e0
+size 896
diff --git a/resource/singer/singer_embedding_kising_changge.npy b/resource/singer/singer_embedding_kising_changge.npy
new file mode 100644
index 0000000000000000000000000000000000000000..7270ee423b0e1bd8e4e28142d2c8ccbe8295868c
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_changge.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0ad51d26b771f2460b146a8984bab73f929e943ce15932c287f6252a241026a
+size 896
diff --git a/resource/singer/singer_embedding_kising_chuci.npy b/resource/singer/singer_embedding_kising_chuci.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9ac48548572c5902ba383dfd6b8746824fe79663
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_chuci.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:764e6424b167dd4ff798f7c608985de31e6dadea68ee578b5dd66eba938cc835
+size 896
diff --git a/resource/singer/singer_embedding_kising_chuming.npy b/resource/singer/singer_embedding_kising_chuming.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9046cc0f1326c1610e22c06b977c0a1ee45b1b87
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_chuming.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4d1847080412e765208bdc09db64cf1e117e998e410e3afe6c061171afcab92
+size 896
diff --git a/resource/singer/singer_embedding_kising_crimson.npy b/resource/singer/singer_embedding_kising_crimson.npy
new file mode 100644
index 0000000000000000000000000000000000000000..15b811bd9b00bdd3e94a04de742e76864b3af6f2
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_crimson.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c6a67b36899aa0f4c62144fa63fc719e2448618fc730a0073ad66b16ee59593
+size 896
diff --git a/resource/singer/singer_embedding_kising_david.npy b/resource/singer/singer_embedding_kising_david.npy
new file mode 100644
index 0000000000000000000000000000000000000000..0ab8bd4fe897c3befcf4067f8279bc2da82011a1
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_david.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eef8cd6416850059b5e8fc7c11a8fc2fb2165ea59177623133e33a30497a41b0
+size 896
diff --git a/resource/singer/singer_embedding_kising_dvaid.npy b/resource/singer/singer_embedding_kising_dvaid.npy
new file mode 100644
index 0000000000000000000000000000000000000000..385e7af35a0f77a8801cc714f6eadd2a02473207
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_dvaid.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ae99f524321f6836c71e83115308ba1117f7235b352f8c2135489bcd54dde5f
+size 896
diff --git a/resource/singer/singer_embedding_kising_ghost.npy b/resource/singer/singer_embedding_kising_ghost.npy
new file mode 100644
index 0000000000000000000000000000000000000000..432854818b4bd08652e296608781e0560595b619
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_ghost.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed8b0f26a4bf60b5dea57c2bad28c1757052d04fcb131b64515da95cd2addcfa
+size 896
diff --git a/resource/singer/singer_embedding_kising_growl.npy b/resource/singer/singer_embedding_kising_growl.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b6a3ff959182f5075a3dddf1eec9f9816326fd65
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_growl.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca44c134bf0fcbc808743e6da1e441782ffd4043e5aeea29e3dd8fc74cfe37f1
+size 896
diff --git a/resource/singer/singer_embedding_kising_hiragi-yuki.npy b/resource/singer/singer_embedding_kising_hiragi-yuki.npy
new file mode 100644
index 0000000000000000000000000000000000000000..5476919ef80b47f708cd46eaeb4ef5d5dd4e295b
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_hiragi-yuki.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8fbb4a7243b36a2c5ebdcd2d6b42b1280b552a159303c976f4c9d28fe3c0a431
+size 896
diff --git a/resource/singer/singer_embedding_kising_huolian.npy b/resource/singer/singer_embedding_kising_huolian.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9af80a47745b78657107fcf28f21ff56939c8924
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_huolian.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db470188fcc158e1a410fd7854884b51e142070adbce3f8be09a3055bf575886
+size 896
diff --git a/resource/singer/singer_embedding_kising_kuro.npy b/resource/singer/singer_embedding_kising_kuro.npy
new file mode 100644
index 0000000000000000000000000000000000000000..2499486f94182b1d69b115681efe4ba035f7edec
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_kuro.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da512576e570782b32ea6b1dce8a6c6a209ba95d9b984466068f8dcb5e9b75ac
+size 896
diff --git a/resource/singer/singer_embedding_kising_lien.npy b/resource/singer/singer_embedding_kising_lien.npy
new file mode 100644
index 0000000000000000000000000000000000000000..3b015053c6f63d4e6f253232b0eac423e6313683
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_lien.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b4ad7d66f0b1666320454076613114fe513a3b8916b7bbe1f2cbbd79df474142
+size 896
diff --git a/resource/singer/singer_embedding_kising_liyuan.npy b/resource/singer/singer_embedding_kising_liyuan.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b6cb8e84ce04d104cf83540fbff5ec6352318b29
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_liyuan.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60ee99331c7e744ef3cf6b5eae3962de88e72210543e20df295f8646f5b41fe3
+size 896
diff --git a/resource/singer/singer_embedding_kising_luanming.npy b/resource/singer/singer_embedding_kising_luanming.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4bf854f4df0afafd5e7c1313caace20807982c14
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_luanming.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1fe80bdcfb2850a70b42c8879492594969ad46957309de7f3fb868631295b82d
+size 896
diff --git a/resource/singer/singer_embedding_kising_luotianyi.npy b/resource/singer/singer_embedding_kising_luotianyi.npy
new file mode 100644
index 0000000000000000000000000000000000000000..577dc86809c487d1e584a078edf20e47839b2877
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_luotianyi.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7ee6bf0c810cfcfd0a49aa6071722dedb854b015de65a03893012962749a07b
+size 896
diff --git a/resource/singer/singer_embedding_kising_namine.npy b/resource/singer/singer_embedding_kising_namine.npy
new file mode 100644
index 0000000000000000000000000000000000000000..5cfb7df855eeda7f2f0c6049c0b257f268a4dbce
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_namine.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20fb013581df4990732d41bff0e7a49c71aa91ed1032eba21680a68353b57209
+size 896
diff --git a/resource/singer/singer_embedding_kising_orange.npy b/resource/singer/singer_embedding_kising_orange.npy
new file mode 100644
index 0000000000000000000000000000000000000000..72213b29cf07d23adcbfeba2a9640c123c4720ed
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_orange.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:626472a91f1c8d8e8cd31c037cf41340e0bd1b456db13190b51d9df40a7aae22
+size 896
diff --git a/resource/singer/singer_embedding_kising_qifu.npy b/resource/singer/singer_embedding_kising_qifu.npy
new file mode 100644
index 0000000000000000000000000000000000000000..1510439c331f9353ae7b8f4270e62e63cca20434
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_qifu.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b096f372cca49b8da8ce696332096c0c43729096bd9360955e5b8c0c2b450b41
+size 896
diff --git a/resource/singer/singer_embedding_kising_qili.npy b/resource/singer/singer_embedding_kising_qili.npy
new file mode 100644
index 0000000000000000000000000000000000000000..59909fc2d615f05d00fac9e10b857941a97d4c82
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_qili.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:800faefe155653698024fb12ebad9947bd2c12d2e1375d10305b513c5434a1a1
+size 896
diff --git a/resource/singer/singer_embedding_kising_qixuan.npy b/resource/singer/singer_embedding_kising_qixuan.npy
new file mode 100644
index 0000000000000000000000000000000000000000..dce2b5389666444f57b284e860a3ff7b41ac2cc2
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_qixuan.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dc5e6f0b53821d42a40175aad83d7607fca325c6b9977478f19a7c79bc6849d
+size 896
diff --git a/resource/singer/singer_embedding_kising_quehe.npy b/resource/singer/singer_embedding_kising_quehe.npy
new file mode 100644
index 0000000000000000000000000000000000000000..1389db8f3ce534cd7a491797c4433bf7b59c15bb
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_quehe.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7e5da1976a8d0cd8107134323695a0071ed88b62902b77d06df84b5ebd0bd69
+size 896
diff --git a/resource/singer/singer_embedding_kising_ranhuhu.npy b/resource/singer/singer_embedding_kising_ranhuhu.npy
new file mode 100644
index 0000000000000000000000000000000000000000..560673c71a19e383789bafd5169c5e693eed5a57
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_ranhuhu.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a0f1ef3bde76873774fa7d23a2969d61b4402eed6115fd212a2e84e1b02a06d
+size 896
diff --git a/resource/singer/singer_embedding_kising_steel.npy b/resource/singer/singer_embedding_kising_steel.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ac1919b4a26dd6d4742bd62184bdb6ef84eac4d4
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_steel.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61fd4b7a8ba1c4429eee0799c9f6c3f0d5c205c1c4f9c3e7a0e480f58fb624fe
+size 896
diff --git a/resource/singer/singer_embedding_kising_tangerine.npy b/resource/singer/singer_embedding_kising_tangerine.npy
new file mode 100644
index 0000000000000000000000000000000000000000..d26bb2a5e322dc87f9fe02af2a90487c386a4407
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_tangerine.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c88593dd381495d105c5b01c8feac135c0769516bfb6f4c85129548c4d182270
+size 896
diff --git a/resource/singer/singer_embedding_kising_tarara.npy b/resource/singer/singer_embedding_kising_tarara.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b3a933da93b4e2521de5ad539d0487d45d6844a5
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_tarara.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:527638c4594291d1a7c61c6ab120c9ea2361f3791dbed9b154cf158252283a57
+size 896
diff --git a/resource/singer/singer_embedding_kising_tuyuan.npy b/resource/singer/singer_embedding_kising_tuyuan.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4eb7d1422b0b92da8b61d5e6aab5541c2a6417ca
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_tuyuan.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e67fe1b5dc03f5356e94198770a227fe42acee268e06d9ecc2fb0db6a3beb37
+size 896
diff --git a/resource/singer/singer_embedding_kising_wenli.npy b/resource/singer/singer_embedding_kising_wenli.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ec809527acc1a13d613ddfd76b8cf2af0e8a7915
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_wenli.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54e4aeb3a6454154ce50a3640a8a756d87552071917b55717cb2221dca53e60e
+size 896
diff --git a/resource/singer/singer_embedding_kising_xiaomo.npy b/resource/singer/singer_embedding_kising_xiaomo.npy
new file mode 100644
index 0000000000000000000000000000000000000000..66d5343a1546765a6093028d5efb8c6857bda19a
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_xiaomo.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:69f4f9d4226815128904903be4fa24dff59341eba0fd680ed3fac1cbcf8993bb
+size 896
diff --git a/resource/singer/singer_embedding_kising_xiaoye.npy b/resource/singer/singer_embedding_kising_xiaoye.npy
new file mode 100644
index 0000000000000000000000000000000000000000..76aa224eb28ff08a6cf30c582493279809ee9ea8
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_xiaoye.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bc68835f84f7a7fbc0ad5d44a2c6e591d7cd61c9f017992b2dfb177fed79b70
+size 896
diff --git a/resource/singer/singer_embedding_kising_yanhe.npy b/resource/singer/singer_embedding_kising_yanhe.npy
new file mode 100644
index 0000000000000000000000000000000000000000..5538f79e27ab54b1df690c613dbe2b71e4a27f28
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_yanhe.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5afd01f34fff00d1d09a28f891b9d868587cee2d5bf04655e324d3d8dbef113
+size 896
diff --git a/resource/singer/singer_embedding_kising_yuezhengling.npy b/resource/singer/singer_embedding_kising_yuezhengling.npy
new file mode 100644
index 0000000000000000000000000000000000000000..b679fdf53336a82ea681635042cdb04c7154de7b
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_yuezhengling.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16951a3b739b247884b912aea85d86b6205082731ec29df0353145b31edfd161
+size 896
diff --git a/resource/singer/singer_embedding_kising_yunhao.npy b/resource/singer/singer_embedding_kising_yunhao.npy
new file mode 100644
index 0000000000000000000000000000000000000000..7ddac6a6e078d75618a12e0c2c3d235fbb71da60
--- /dev/null
+++ b/resource/singer/singer_embedding_kising_yunhao.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:059b743aa833ac1b202912abf939e555e2e8d23153cfa3fa07a2390b1f279a82
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-1.npy b/resource/singer/singer_embedding_m4singer_Alto-1.npy
new file mode 100644
index 0000000000000000000000000000000000000000..714e488f95eb59f01299821e45a03be548797b14
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-1.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d40442ac0b1411f76793c47725ed05467388d4c2d61a0745f6ce64621b7a222b
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-2.npy b/resource/singer/singer_embedding_m4singer_Alto-2.npy
new file mode 100644
index 0000000000000000000000000000000000000000..63e81d5dcb80be9668bf990775682dba60cbbb1e
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-2.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:439ef471f24de4c30f66eed18dd05a1aba94e7a84c22926a1470b377f7906726
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-3.npy b/resource/singer/singer_embedding_m4singer_Alto-3.npy
new file mode 100644
index 0000000000000000000000000000000000000000..74fae714511da2780a30caf312d72b01f907aa67
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-3.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cade75d36c57f28cf8219e864ca24c57740f1ac62b1443c6f55ad540ec762c6
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-4.npy b/resource/singer/singer_embedding_m4singer_Alto-4.npy
new file mode 100644
index 0000000000000000000000000000000000000000..ddc86f52a13c7a62d34cb86425272d78c78ef112
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-4.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b14f6db3e6269af78c48aa874b4f5b5abd093d4a9230cccc6f08ab39d7275fb6
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-5.npy b/resource/singer/singer_embedding_m4singer_Alto-5.npy
new file mode 100644
index 0000000000000000000000000000000000000000..cb6cd907062f0f4acd21b39a913872d3047719b9
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-5.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de676a2e1ee142f63f95114f959b0359f289e17848521f84b6da3b317d4fd2a9
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-6.npy b/resource/singer/singer_embedding_m4singer_Alto-6.npy
new file mode 100644
index 0000000000000000000000000000000000000000..0b4c8f9361c75e77300be2d458414a98ede86db7
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-6.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6deebbac4fe82d4f246e4b0ae2d9fa099d523b09698457adc4c93f798146db90
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Alto-7.npy b/resource/singer/singer_embedding_m4singer_Alto-7.npy
new file mode 100644
index 0000000000000000000000000000000000000000..f9f285bece119ba556b33e4acacd9407a1ec4778
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Alto-7.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02c72eb52c9b133b981b539f91e6877029696116aec6e2a4de83c94958524eb0
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Bass-1.npy b/resource/singer/singer_embedding_m4singer_Bass-1.npy
new file mode 100644
index 0000000000000000000000000000000000000000..29c2f95361c9f354b0db2f571853abbb6beb2362
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Bass-1.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b357faf4103f610841feead877340693c158c60d1e99f6bbdc258767b355650
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Bass-2.npy b/resource/singer/singer_embedding_m4singer_Bass-2.npy
new file mode 100644
index 0000000000000000000000000000000000000000..bb663c22609590e48a9db78e5f8e2b3fd1b8161f
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Bass-2.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3524ae6d6e0ef5af5cab27b9e689c60432a20b45ee10a6d31e715fd49ab35829
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Bass-3.npy b/resource/singer/singer_embedding_m4singer_Bass-3.npy
new file mode 100644
index 0000000000000000000000000000000000000000..23bbff0f5cad5aa6fb3004ad1c4a9f0d5cb2636a
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Bass-3.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:953945e3b63f244f33b51115499bccb7c3bcc035cfff6a512452e95d317e5e2e
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Soprano-1.npy b/resource/singer/singer_embedding_m4singer_Soprano-1.npy
new file mode 100644
index 0000000000000000000000000000000000000000..e89646d16b273ade15a7dee7ce779bc56ffd3d1f
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Soprano-1.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fcbcfe6e253b752042b3e87de9beb73f03a25cf345c5974edb4135ba47809d9b
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Soprano-2.npy b/resource/singer/singer_embedding_m4singer_Soprano-2.npy
new file mode 100644
index 0000000000000000000000000000000000000000..263d0085d4d4fada8e7746afaf08a69a8e8fecb7
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Soprano-2.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:568557ef9e3ecff541fae420c3f82dca816cde867106f0a815376ec3dfc2145e
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Soprano-3.npy b/resource/singer/singer_embedding_m4singer_Soprano-3.npy
new file mode 100644
index 0000000000000000000000000000000000000000..a7a4822c5a67cb3cd5d913aeb39742faf3a4d6c4
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Soprano-3.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db710202bc0366452f461a5d576fe8e6bc6e6670cde11019cc01eddede206adb
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-1.npy b/resource/singer/singer_embedding_m4singer_Tenor-1.npy
new file mode 100644
index 0000000000000000000000000000000000000000..11a85412fd8fc9cd04c8f14dadb8be906cd221f8
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-1.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c915ea538a48e745dbac223168d8360214c6f0478757559e449632f284618273
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-2.npy b/resource/singer/singer_embedding_m4singer_Tenor-2.npy
new file mode 100644
index 0000000000000000000000000000000000000000..46165b9ab095f27de2a1119cdf116e2b9f020b3b
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-2.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:50896c8db7ff5ba5438e177162b72bc051ed2a911ea7788bba0c524fc65e3483
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-3.npy b/resource/singer/singer_embedding_m4singer_Tenor-3.npy
new file mode 100644
index 0000000000000000000000000000000000000000..29db55073e877b28c9b8f765359347ce98fcb423
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-3.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96dc2c331b58eb665ad97eca7c9aee528959fed18836c935aa006b93d8213ff7
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-4.npy b/resource/singer/singer_embedding_m4singer_Tenor-4.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9ca9bccdc82ea5eb6db45e343b2ae72f99aeff1d
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-4.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5323f344ad67a4af08e899d6e97f6ed6a6fe6b7ecbc09168dd5725f70e343a27
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-5.npy b/resource/singer/singer_embedding_m4singer_Tenor-5.npy
new file mode 100644
index 0000000000000000000000000000000000000000..d81c50c746cf3a6b8c145f172c167f9b050c6eed
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-5.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa66a06aff190245faffdc5344c121cd0c89732d9b99e7460fa74db7f07f2302
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-6.npy b/resource/singer/singer_embedding_m4singer_Tenor-6.npy
new file mode 100644
index 0000000000000000000000000000000000000000..2e54c93e26a0eb9ec32c3bcaa064cac95e19ea32
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-6.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d2b9509ffef7270415477ad4d40e7a1672f2704eece64a8f4695afa6b260954
+size 896
diff --git a/resource/singer/singer_embedding_m4singer_Tenor-7.npy b/resource/singer/singer_embedding_m4singer_Tenor-7.npy
new file mode 100644
index 0000000000000000000000000000000000000000..2f328eb884f8cbf0fcf46a506f353bb402db620c
--- /dev/null
+++ b/resource/singer/singer_embedding_m4singer_Tenor-7.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7fc46db43827bdae7175f44ea90e76b6d35abdb7dec4d337dd8f4aa4730fe6d8
+size 896
diff --git a/resource/singer/singer_embedding_namine.npy b/resource/singer/singer_embedding_namine.npy
new file mode 100644
index 0000000000000000000000000000000000000000..4b000fec9163d4f5e33cb7df907c5b6dd409ab3e
--- /dev/null
+++ b/resource/singer/singer_embedding_namine.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:69d0e1931ea19f8d6ce503659ecdfa1c121c77495983f5a9e0c4fca67a1db542
+size 896
diff --git a/resource/singer/singer_embedding_ofuton.npy b/resource/singer/singer_embedding_ofuton.npy
new file mode 100644
index 0000000000000000000000000000000000000000..41b1721d3fdd1b6555ca9171123c2789f6c5e417
--- /dev/null
+++ b/resource/singer/singer_embedding_ofuton.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83f6f423343adc25ada7dba7d22f7c90ac1419e7b119d9a23a3eba473e662454
+size 896
diff --git a/resource/singer/singer_embedding_oniku.npy b/resource/singer/singer_embedding_oniku.npy
new file mode 100644
index 0000000000000000000000000000000000000000..9059d646b682d5274d4ac29af1c7a6af4926bb58
--- /dev/null
+++ b/resource/singer/singer_embedding_oniku.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2febfc827d6a36af1da2272651b77d5c543ed589c2b8a4368f7406c11e23edd1
+size 896
diff --git a/resource/singer/singer_embedding_opencpop.npy b/resource/singer/singer_embedding_opencpop.npy
new file mode 100644
index 0000000000000000000000000000000000000000..569f54c0c375722f86f9ffd47d77f3574fd44f51
--- /dev/null
+++ b/resource/singer/singer_embedding_opencpop.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f7a4f3dd8c861e984ce3f35a7987f9008bc7fc1359135caea8435279c2cc025
+size 896
diff --git a/resource/singer/singer_embedding_pjs.npy b/resource/singer/singer_embedding_pjs.npy
new file mode 100644
index 0000000000000000000000000000000000000000..61116dbcf2663dedddc044b93b0b16cce36e2668
--- /dev/null
+++ b/resource/singer/singer_embedding_pjs.npy
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f93e09d5d2aeeab0be6d9c22db5a2407e88e8ade4fb140f7d322d99674a0cd0
+size 896
diff --git a/util.py b/util.py
new file mode 100644
index 0000000000000000000000000000000000000000..c436a905f95dde58dc893f3b88588d712f340e9f
--- /dev/null
+++ b/util.py
@@ -0,0 +1,93 @@
+import os
+import json
+import warnings
+from typing import List
+import re
+
+import pyopenjtalk
+from resource.pinyin_dict import PINYIN_DICT
+from pypinyin import lazy_pinyin
+
+def preprocess_input(src_str, seg_syb=" "):
+ src_str = src_str.replace("\n", seg_syb)
+ src_str = src_str.replace(" ", seg_syb)
+ return src_str
+
+
+def postprocess_phn(phns, model_name, lang):
+ if "Chinese" in model_name:
+ return phns
+ return [phn + "@" + lang for phn in phns]
+
+
+def pyopenjtalk_g2p(text) -> List[str]:
+ with warnings.catch_warnings(record=True) as w:
+ warnings.simplefilter("always")
+ # phones is a str object separated by space
+ phones = pyopenjtalk.g2p(text, kana=False)
+ if len(w) > 0:
+ for warning in w:
+ if "No phoneme" in str(warning.message):
+ return False
+
+ phones = phones.split(" ")
+ return phones
+
+
+def split_pinyin_ace(pinyin: str, zh_plan: dict) -> tuple[str]:
+ # load pinyin dict from local/pinyin.dict
+ pinyin = pinyin.lower()
+ if pinyin in zh_plan["dict"]:
+ return zh_plan["dict"][pinyin]
+ elif pinyin in zh_plan["syllable_alias"]:
+ return zh_plan["dict"][zh_plan["syllable_alias"][pinyin]]
+ else:
+ return False
+
+
+def split_pinyin_py(pinyin: str) -> tuple[str]:
+ pinyin = pinyin.lower()
+ if pinyin in PINYIN_DICT:
+ return PINYIN_DICT[pinyin]
+ else:
+ return False
+
+
+def get_tokenizer(model, lang):
+ if lang == "zh":
+ if "Chinese" in model:
+ print("hello")
+ return lambda text: split_pinyin_py(text)
+ else:
+ with open(os.path.join("resource/all_plans.json"), "r") as f:
+ all_plan_dict = json.load(f)
+ for plan in all_plan_dict["plans"]:
+ if plan["language"] == "zh":
+ zh_plan = plan
+ return lambda text: split_pinyin_ace(text, zh_plan)
+ elif lang == "jp":
+ return pyopenjtalk_g2p
+
+
+def get_pinyin(texts):
+ pinyin_list = lazy_pinyin(texts)
+ text_list = []
+ for text in pinyin_list:
+ if text[0] == "S" or text[0] == "A" or text[0] == '-':
+ sp_strs = re.findall(r'-|AP|SP', text)
+ for phn in sp_strs:
+ text_list.append(phn)
+ else:
+ text_list.append(text)
+ return text_list
+
+
+def load_pitch_dict(file_path = "resource/midi-note.scp"):
+ pitch_dict = {}
+ with open(file_path, "r", encoding="utf-8") as f:
+ for line in f:
+ items = line.strip().split()
+ pitch_dict[items[0]] = int(items[1])
+ pitch_dict[items[1]] = int(items[1])
+ return pitch_dict
+