|
51 | 51 | "\n",
|
52 | 52 | "from ChatTTS import ChatTTS\n",
|
53 | 53 | "from ChatTTS.tools.logger import get_logger\n",
|
| 54 | + "from ChatTTS.tools.normalizer import normalizer_en_nemo_text, normalizer_zh_tn\n", |
54 | 55 | "from IPython.display import Audio"
|
55 | 56 | ]
|
56 | 57 | },
|
|
71 | 72 | },
|
72 | 73 | "outputs": [],
|
73 | 74 | "source": [
|
74 |
| - "chat = ChatTTS.Chat(get_logger(\"ChatTTS\"))" |
| 75 | + "logger = get_logger(\"ChatTTS\")\n", |
| 76 | + "chat = ChatTTS.Chat(logger, remove_exist=True)\n", |
| 77 | + "\n", |
| 78 | + "# try to load normalizer\n", |
| 79 | + "try:\n", |
| 80 | + " chat.normalizer.register(\"en\", normalizer_en_nemo_text())\n", |
| 81 | + "except:\n", |
| 82 | + " logger.warning('Package nemo_text_processing not found!')\n", |
| 83 | + " logger.warning(\n", |
| 84 | + " 'Run: conda install -c conda-forge pynini=2.1.5 && pip install nemo_text_processing',\n", |
| 85 | + " )\n", |
| 86 | + "try:\n", |
| 87 | + " chat.normalizer.register(\"zh\", normalizer_zh_tn())\n", |
| 88 | + "except:\n", |
| 89 | + " logger.warning('Package WeTextProcessing not found!')\n", |
| 90 | + " logger.warning(\n", |
| 91 | + " 'Run: conda install -c conda-forge pynini=2.1.5 && pip install WeTextProcessing',\n", |
| 92 | + " )" |
75 | 93 | ]
|
76 | 94 | },
|
77 | 95 | {
|
78 | 96 | "cell_type": "markdown",
|
79 |
| - "metadata": {}, |
| 97 | + "metadata": { |
| 98 | + "id": "3Ty427FZNH30" |
| 99 | + }, |
80 | 100 | "source": [
|
81 | 101 | "### Here are three choices for loading models:"
|
82 | 102 | ]
|
83 | 103 | },
|
84 | 104 | {
|
85 | 105 | "cell_type": "markdown",
|
86 |
| - "metadata": {}, |
| 106 | + "metadata": { |
| 107 | + "id": "NInF7Lk1NH30" |
| 108 | + }, |
87 | 109 | "source": [
|
88 | 110 | "#### 1. Load models from Hugging Face:"
|
89 | 111 | ]
|
90 | 112 | },
|
91 | 113 | {
|
92 | 114 | "cell_type": "code",
|
93 | 115 | "execution_count": null,
|
94 |
| - "metadata": {}, |
| 116 | + "metadata": { |
| 117 | + "id": "VVtNlNosNH30" |
| 118 | + }, |
95 | 119 | "outputs": [],
|
96 | 120 | "source": [
|
97 | 121 | "# use force_redownload=True if the weights have been updated.\n",
|
|
100 | 124 | },
|
101 | 125 | {
|
102 | 126 | "cell_type": "markdown",
|
103 |
| - "metadata": {}, |
| 127 | + "metadata": { |
| 128 | + "id": "AhBD5WUPNH30" |
| 129 | + }, |
104 | 130 | "source": [
|
105 | 131 | "#### 2. Load models from local directories 'asset' and 'config':"
|
106 | 132 | ]
|
107 | 133 | },
|
108 | 134 | {
|
109 | 135 | "cell_type": "code",
|
110 | 136 | "execution_count": null,
|
111 |
| - "metadata": {}, |
| 137 | + "metadata": { |
| 138 | + "id": "83UwV6SGNH31" |
| 139 | + }, |
112 | 140 | "outputs": [],
|
113 | 141 | "source": [
|
114 | 142 | "chat.load_models()\n",
|
|
117 | 145 | },
|
118 | 146 | {
|
119 | 147 | "cell_type": "markdown",
|
120 |
| - "metadata": {}, |
| 148 | + "metadata": { |
| 149 | + "id": "c0qjGPNkNH31" |
| 150 | + }, |
121 | 151 | "source": [
|
122 | 152 | "#### 3. Load models from a custom path:"
|
123 | 153 | ]
|
124 | 154 | },
|
125 | 155 | {
|
126 | 156 | "cell_type": "code",
|
127 | 157 | "execution_count": null,
|
128 |
| - "metadata": {}, |
| 158 | + "metadata": { |
| 159 | + "id": "oCSBx0Q7NH31" |
| 160 | + }, |
129 | 161 | "outputs": [],
|
130 | 162 | "source": [
|
131 | 163 | "# write the model path into custom_path\n",
|
|
134 | 166 | },
|
135 | 167 | {
|
136 | 168 | "cell_type": "markdown",
|
137 |
| - "metadata": {}, |
| 169 | + "metadata": { |
| 170 | + "id": "VoEki3XMNH31" |
| 171 | + }, |
138 | 172 | "source": [
|
139 | 173 | "### You can also unload models to save the memory"
|
140 | 174 | ]
|
141 | 175 | },
|
142 | 176 | {
|
143 | 177 | "cell_type": "code",
|
144 | 178 | "execution_count": null,
|
145 |
| - "metadata": {}, |
| 179 | + "metadata": { |
| 180 | + "id": "3FdsTSxoNH31" |
| 181 | + }, |
146 | 182 | "outputs": [],
|
147 | 183 | "source": [
|
148 | 184 | "chat.unload()"
|
|
219 | 255 | },
|
220 | 256 | "outputs": [],
|
221 | 257 | "source": [
|
222 |
| - "params_infer_code = {'prompt':'[speed_5]', 'temperature':.3}\n", |
223 |
| - "params_refine_text = {'prompt':'[oral_2][laugh_0][break_6]'}\n", |
| 258 | + "params_infer_code = ChatTTS.Chat.InferCodeParams(\n", |
| 259 | + " prompt='[speed_5]',\n", |
| 260 | + " temperature=.3,\n", |
| 261 | + ")\n", |
| 262 | + "params_refine_text = ChatTTS.Chat.RefineTextParams(\n", |
| 263 | + " prompt='[oral_2][laugh_0][break_6]',\n", |
| 264 | + ")\n", |
224 | 265 | "\n",
|
225 | 266 | "wav = chat.infer('四川美食可多了,有麻辣火锅、宫保鸡丁、麻婆豆腐、担担面、回锅肉、夫妻肺片等,每样都让人垂涎三尺。', \\\n",
|
226 | 267 | " params_refine_text=params_refine_text, params_infer_code=params_infer_code)"
|
|
255 | 296 | "outputs": [],
|
256 | 297 | "source": [
|
257 | 298 | "rand_spk = chat.sample_random_speaker()\n",
|
258 |
| - "params_infer_code = {'spk_emb' : rand_spk, }\n", |
| 299 | + "params_infer_code = ChatTTS.Chat.InferCodeParams(\n", |
| 300 | + " spk_emb=rand_spk,\n", |
| 301 | + ")\n", |
259 | 302 | "\n",
|
260 | 303 | "wav = chat.infer('四川美食确实以辣闻名,但也有不辣的选择。比如甜水面、赖汤圆、蛋烘糕、叶儿粑等,这些小吃口味温和,甜而不腻,也很受欢迎。', \\\n",
|
261 | 304 | " params_refine_text=params_refine_text, params_infer_code=params_infer_code)"
|
|
302 | 345 | },
|
303 | 346 | "outputs": [],
|
304 | 347 | "source": [
|
305 |
| - "wav = chat.infer(refined_text)" |
| 348 | + "wav = chat.infer(refined_text, skip_refine_text=True)" |
306 | 349 | ]
|
307 | 350 | },
|
308 | 351 | {
|
|
316 | 359 | "Audio(wav[0], rate=24_000, autoplay=True)"
|
317 | 360 | ]
|
318 | 361 | },
|
| 362 | + { |
| 363 | + "cell_type": "markdown", |
| 364 | + "metadata": { |
| 365 | + "id": "GG5AMbQbbSrl" |
| 366 | + }, |
| 367 | + "source": [ |
| 368 | + "## LLM Call" |
| 369 | + ] |
| 370 | + }, |
319 | 371 | {
|
320 | 372 | "cell_type": "code",
|
321 | 373 | "execution_count": null,
|
322 | 374 | "metadata": {
|
323 |
| - "id": "R2WjuVrWbSrl" |
| 375 | + "id": "3rkfwc3UbSrl" |
324 | 376 | },
|
325 | 377 | "outputs": [],
|
326 | 378 | "source": [
|
327 |
| - "text = 'so we found being competitive and collaborative [uv_break] was a huge way of staying [uv_break] motivated towards our goals, [uv_break] so [uv_break] one person to call [uv_break] when you fall off, [uv_break] one person who [uv_break] gets you back [uv_break] on then [uv_break] one person [uv_break] to actually do the activity with.'\n", |
328 |
| - "wav = chat.infer(text, skip_refine_text=True)" |
| 379 | + "from ChatTTS.tools.llm import ChatOpenAI\n", |
| 380 | + "\n", |
| 381 | + "API_KEY = ''\n", |
| 382 | + "client = ChatOpenAI(api_key=API_KEY,\n", |
| 383 | + " base_url=\"https://api.deepseek.com\",\n", |
| 384 | + " model=\"deepseek-chat\")" |
329 | 385 | ]
|
330 | 386 | },
|
331 | 387 | {
|
332 | 388 | "cell_type": "code",
|
333 | 389 | "execution_count": null,
|
334 | 390 | "metadata": {
|
335 |
| - "id": "71Y4pBdl-_Yd" |
| 391 | + "id": "TTkIsXozbSrm" |
336 | 392 | },
|
337 | 393 | "outputs": [],
|
338 | 394 | "source": [
|
339 |
| - "Audio(wav[0], rate=24_000, autoplay=True)" |
| 395 | + "user_question = '四川有哪些好吃的美食呢?'" |
340 | 396 | ]
|
341 | 397 | },
|
342 | 398 | {
|
343 |
| - "cell_type": "markdown", |
| 399 | + "cell_type": "code", |
| 400 | + "execution_count": null, |
344 | 401 | "metadata": {
|
345 |
| - "id": "GG5AMbQbbSrl" |
| 402 | + "id": "3yT8uNz-RVy1" |
346 | 403 | },
|
| 404 | + "outputs": [], |
347 | 405 | "source": [
|
348 |
| - "## LLM Call" |
| 406 | + "text = client.call(user_question, prompt_version = 'deepseek')\n", |
| 407 | + "text" |
349 | 408 | ]
|
350 | 409 | },
|
351 | 410 | {
|
352 | 411 | "cell_type": "code",
|
353 | 412 | "execution_count": null,
|
354 | 413 | "metadata": {
|
355 |
| - "id": "3rkfwc3UbSrl" |
| 414 | + "id": "6qddpv7lRW-3" |
356 | 415 | },
|
357 | 416 | "outputs": [],
|
358 | 417 | "source": [
|
359 |
| - "from ChatTTS.experimental.llm import llm_api\n", |
360 |
| - "\n", |
361 |
| - "API_KEY = ''\n", |
362 |
| - "client = llm_api(api_key=API_KEY,\n", |
363 |
| - " base_url=\"https://api.deepseek.com\",\n", |
364 |
| - " model=\"deepseek-chat\")" |
| 418 | + "text = client.call(text, prompt_version = 'deepseek_TN')\n", |
| 419 | + "text" |
365 | 420 | ]
|
366 | 421 | },
|
367 | 422 | {
|
368 | 423 | "cell_type": "code",
|
369 | 424 | "execution_count": null,
|
370 | 425 | "metadata": {
|
371 |
| - "id": "TTkIsXozbSrm" |
| 426 | + "id": "qNhCJG4VbSrm" |
372 | 427 | },
|
373 | 428 | "outputs": [],
|
374 | 429 | "source": [
|
375 |
| - "user_question = '四川有哪些好吃的美食呢?'\n", |
376 |
| - "text = client.call(user_question, prompt_version = 'deepseek')\n", |
377 |
| - "print(text)\n", |
378 |
| - "text = client.call(text, prompt_version = 'deepseek_TN')\n", |
379 |
| - "print(text)" |
| 430 | + "wav = chat.infer(text)" |
380 | 431 | ]
|
381 | 432 | },
|
382 | 433 | {
|
383 | 434 | "cell_type": "code",
|
384 | 435 | "execution_count": null,
|
385 | 436 | "metadata": {
|
386 |
| - "id": "qNhCJG4VbSrm" |
| 437 | + "id": "Wq1XQHmFRQI3" |
387 | 438 | },
|
388 | 439 | "outputs": [],
|
389 | 440 | "source": [
|
390 |
| - "params_infer_code = {'spk_emb' : rand_spk, 'temperature':.3}\n", |
391 |
| - "\n", |
392 |
| - "wav = chat.infer(text, params_infer_code=params_infer_code)" |
| 441 | + "Audio(wav[0], rate=24_000, autoplay=True)" |
393 | 442 | ]
|
394 | 443 | }
|
395 | 444 | ],
|
|
0 commit comments