æ¥æ¬èªããŒã«ã«TTSã12å詊ã㊠Irodori TTS ã«åºäŒããŸã§
ååã¯ãæ£ç«ã¡ã®3Dã¢ãã¿ãŒã«ããŸãé è³ããããšãã£ãããå®è£ ãããšãããŸã§æžããŸãããããã¹ããæã€ãšãç§æžãè¿äºãè¿ããŠããããããã¯ããã§åããã§ããæ±ºå®çã«è¶³ããªããã®ããããŸããã
ç¡èšãªãã§ãããã
第1ç« ã§å«ãã ãšãããç§ã欲ããã£ãã®ã¯ãããã¹ã£ãŠã»ããïŒïŒãã§ãããããã¹ããç»é¢ã«åºãã ãã§ã¯ããŸã ããããæããããªãããšããããã§ã声ãäžããããšã«ããŸãããããããæ³åã®3åãããæ²Œã§ããã
ãŸããTTSã¯æ²Œã ã£ã
ããŒã«ã«ã§åãæ¥æ¬èªTTSããçã£ç«¯ãã詊ããŸãããæ°ããã12ã¢ãã«ã
è©äŸ¡è»žã¯2ã€ãRTFïŒãªã¢ã«ã¿ã€ã ãã¡ã¯ã¿ïŒ ãš æ¥æ¬èªã®å質 ã§ããRTF ã¯ã宿éã®äœåéã§åæã§ããããã§ã1.0x ãªãåãé·ããšåãã ãåæã«æéãããããã€ãŸãäŒè©±ã«ã¯é ãããã5xã10x ãšå€§ããã»ã©éããäŒè©±ã¢ã·ã¹ã¿ã³ãã¯å¿çãé ããšäžæ°ã«å·ããã®ã§ãããã¯æ»æŽ»åé¡ã§ããã
çµæãããã§ããèšæž¬ã¯æå ã® AMD AI Max 395+ 96GBãâŠNVIDIA ãããªãã®ã§åããã ãã§æ¬åœã«èŠåŽãããã§ããããã®è©±ã¯é·ããªãã®ã§å¥ã®èšäºã«åããŸãã
| # | ã¢ãã« | RTF | æ¥æ¬èª | å€å® |
|---|---|---|---|---|
| 1 | Qwen3-TTS 1.7B | 0.45x | A | å質æé«ã ãé ã |
| 2 | Kokoro-82M | 14.5x | C | é床1äœãJPé»åŸèª²é¡ |
| 3 | Piper | 45.9x | F | æ¥æ¬èªå£æ» |
| 4 | MeloTTS | 0.92x | C | RTæªæºã§è«å€ |
| 5 | F5-TTS | 0.11x | F | Qwenããé ã+æ¥æ¬èªå£æ» |
| 6 | Spark-TTS | 倱æ | C- | é·æã§ç Žç¶» |
| 7 | Chatterbox | 0.54x | èŠç¢ºèª | RTæªæº |
| 8 | KokoClone | 0.84x | F | äºéå£åã§è«å€ |
| 9 | PocketTTS | 3.8x | F | è±èªã®ã¿ãJP察å¿åŸ ã¡ |
| 10 | Style-Bert-VITS2 | 5.1x | JPç¹å | é床2äœ |
| 11 | Qwen3-TTS 0.6B | 0.34x | A | 1.7Bãããããé ã |
| 12 | vLLM-Omni+Qwen3 | 0.20x | A | CPUæ¯2åé ã |
çºããŠåãã£ãã®ã¯ã身ãèããªãæ³åã§ããã
- å質ãããã® Qwen3-TTSïŒæ¥æ¬èªAïŒã¯ãè»äžŠã¿ RT æªæºã0.45xãäŒè©±ã«ã¯é ãããã
- é床ãããã® Kokoro(14.5x) ã Piper(45.9x) ã¯ãæ¥æ¬èªã壿» ãè±èªåã§è©å€ã®ã¢ãã«ã»ã©ãæ¥æ¬èªãèªãŸãããšå¥ç©ã«ãªãã
- F5-TTS ã«è³ã£ãŠã¯ãé ã ããã« å£æ» ããšãããã©ããè€ããŠãããåãããªãä»äžããã
éããã€ã¯æ¥æ¬èªããã¡ãæ¥æ¬èªããããã€ã¯é ããããããªãã¬ãŒããªãã®å£ã§ããå¯äžãããªãã«äž¡ç«ããŠããã®ã Style-Bert-VITS2ïŒæ¥æ¬èªç¹åã»5.1xïŒã§ããã
âŠãããããæ¡çšããŸããã§ãããç§ã欲ããã£ããã®ãããã1ã€ãã£ãããã§ãã
欲ããã£ãã®ã¯ã3ã€
æŽçãããšãèŠä»¶ã¯ããã§ããã
- 声ã®ã¯ããŒã³ãã§ããïŒèªåã®ç§æžã«ãç¹å®ã®å£°ãããŠããïŒ
- æå ã®ã³ã³ã·ã¥ãŒãGPUã§åãïŒ4090å¿ é ã§ã¯å°ãïŒ
- äŒè©±ã«èããå¿çé床
ãã®ã声ã®ã¯ããŒã³ããå¹ããŸãããè¡šã§ææåã ã£ã Style-Bert-VITS2 ã蹎ã£ãŠã§ããçæ³ã®å£°ãèªåã§äœãããã£ãã
ãããªãšãã«åºäŒã£ãã®ã Irodori TTS ã§ããã
Irodori TTS ãšã®åºäŒã
çµè«ããèšããšãçæ³ã®TTSã§ããã声ã®ã¯ããŒã³ãã§ããŠãã³ã³ã·ã¥ãŒãGPUã§åããŠãéãã3æåããã£ãŠãããäœè ã®æ¹ã«ã¯æè¬ãããããŸããã
ããã§ç§ã¯è ¹ãããã£ãŠ RTX 3090(24GB) ãè²·ããŸãããAMD ã§ã®èŠåŽããã£ãŠããã NVIDIA ã§ãããããšã
3090 ã§ã®å®æž¬ãããã§ãã
- 1æã®åæïŒ0.4ã0.7ç§ã§ 3ã5ç§ã®é³å£°
- 宿éåçïŒçŽ5ã10x faster-than-realtimeïŒbf16ãCUDA ã°ã©ãã¯ç¡å¹ã§ãã®é床ïŒ
- VRAMïŒIrodori åäœã¯åžžé§ã§çŽ 3.7ã6GB
æ°åã ãèŠããšã3090ãããªãã®ã§ã¯ïŒ 3060 12GB ã§ã Irodori åäœãªãä¹ããããšæããŸããããç§ãããæã£ãŠããŸãããèœãšã穎㯠åå± ã§ãã
ç§æžãåããã«ã¯ãIrodori(TTS) ã ãã§ãªããé è³ã® LLM(vLLM) ãšãåŸã§è¶³ãè³ã® STT(kotoba-whisper) ãåãGPUã«ä¹ããŸããæåãæ¬²ãåºã㊠Qwen3-30B ãšåå± ãããããšããŠã3å OOM ããŸããã30B 㯠24GB ã«åå± ã§ããªãã14B-AWQ(9.4GB) ãŸã§èœãšããŠãããããã³ã³ãããªã³å šäœïŒvLLM ã§çŽ 20GB ã«åãŸããŸããã24GB ã§ã®ãªã®ãªã3060 ã§ã¯è¶³ããªãããçãã§ãã
声ããå®ãŸããªãïŒã·ãŒãã®çœ ãšå£°ã¬ãã£ïŒ
声ã®ã¯ããŒã³ã§æåã«ããã£ãã®ãããã§ãã
Irodori ã¯åç
§é³å£°ãªã(no_ref)ïŒã·ãŒãæå®ã§ã声ãäœããŸãããªã®ã§æå㯠seed=777 ã§åºå®ããã°ãã€ãåã声ã«ãªãããšæã£ãŠããŸããã
ãšããããåã seed=777 ãªã®ã«ãããã¹ããå€ãããšå£°ãå€ããã
調ã¹ããšãno_ref ïŒèªå duration ã®çµã¿åããã ãšããã€ãºã®åœ¢ãããã¹ãã«äŸåããŠããŸããã ããå ¥åæããšã«åŸ®åŠã«å¥äººã«ãªããããã§ã¯ããã¡ã®åã®å£°ããå®ãŸããŸããã
解決ã¯å°å³ãªåæã§ãããåç
§é³å£°(ref_wav) ã§åºå®ãããã·ãŒããã©ã³ãã ã«å€ããªãã 100åãããé³å£°ãçæããŠçã£ç«¯ããä¿å ãããã®äžãããããã ããšãã1ã€ãéžãã§ Ref ã«æ¡çšããŸããããã¡ã€ã«å㯠cool_seed_7777.wavãå®å
šã«å£°ã¬ãã£ã§ããåœãããåŒããŸã§åããŸããã
ã¡ãªã¿ã«ãåŸã§äœãããäŒã¿ã¢ãŒããçšã«ã¯ å¥ã® Ref ãçšæããŠããŸãããã£ã¡ã¯ ãããã声 ã«ãããã£ããã§ãããããããªããªãåºãã«èŠåŽããŸããïŒIrodori v3 ã ãšãçã®åããŸã§ã¯å±ããªãïŒããã®è©±ã¯ããäŒã¿ã¢ãŒãã®åã§ã¡ãããšæžããŸãã
è±èªãã壿» ãã
声ãåºãŸã£ãŠåãã§ããããæ¬¡ã®å£ãæ¥ãŸããã
è±èªããŸã£ããèªããªãã
ãGitHubãããAPIãããèŠããç¡æ®ãªçºé³ã«ãªããæ¥æ¬èªç¹åã®å®¿åœã§ãããã㯠èªã¿æ¹èŸæž ãèªäœããŠè§£æ±ºããŸãããåºæåè©ãè±åèªããã®ãããããã®ããã«ç»é²ããŠãããšãåæåã«çœ®æããä»çµã¿ã§ãã
ãã ãèŸæžã¯æåç»é²ãªã®ã§æ³å®å€ã®èªã«åŒ±ããããã§ããäžæ®µãã誀èªããããªæ¥æ¬èªã LLM ã«æããŠãå åãã§ã²ãããªã«çŽãããã£ã«ã¿ ãçšæããŸãããåæã®åã«ããã¹ããäžåºŠã¢ãã«ã«éããŠãé£èªèªãããªæžãã«æŽããããã ãããã¯ãã£ããã ãš ã²ãšæéã¶ãã¬ã¹ãã³ã¹ãé ããªã ã®ã§ããªã¢ã«ã¿ã€ã æ§ãèŠãäŒè©±ã§ã¯åã£ãŠããŸããäžæ¹ãæ¥èšã®èªã¿äžã ã®ããã«å€å°åŸ ã£ãŠãããå Žé¢ã§ã¯å¹æãŠãããã§ããã
ïŒã¡ãªã¿ã«ããã®ãã£ã«ã¿ãåãŸããåãã Irodori ã¯èªã¿ãããªãè³¢ããŠãã仿¥ã¯äžæäžæ¥æ¥ææ¥ãã "ãã¡ã〠ã€ããã¡ ã«ã¡ããã³" ãšã¡ãããšèªã¿åããŠãããåããæ¥ãã3ååºãŠããŠå šéšèªã¿ãéããã€ã§ãããããæ®éã«èªããTTSãå°å³ã«ããããããïŒ
ãã1ã€ãé·æãæž¡ããšãããæ©å£ã«ãªãããããåç §é³å£°ãç¡èŠãå§ãã åé¡ããããŸãããããã¯ãããã¹ãã 厩å£ããªãé·ãã«åã£ãŠé çªã«æž¡ã ããšã§åé¿ããŠããŸããé·ãè¿äºã¯ãè£ã§æãåå²ããŠåæããŠããããã§ãã
æçµçã«ãåæã¯ Python åŽã® HTTP ãµãŒãïŒFastAPI ã§ :7880ãèµ·åæã« --voice-ref ã§ Ref ãæå®ïŒã«åãåºããNext.js ãã /api/tts çµç±ã§å©ããŠããã©ãŠã¶ã® Web Audio ã§åçããããã£ããã®è¿äºãšåæããŠåãããšãã圢ã«èœã¡çããŸããã
ãã®åŸ â èªã¿æ¹èŸæžãã12äžèªã«è²ãŠã
ããããã¯ãæè¿ãã£ã話ã§ãã
æåã®èªã¿æ¹èŸæžãš LLM ãã£ã«ã¿ã§åœåº§ã¯ãã®ããŠããã®ã§ãããæ ¹æ¬çãªåŒ±ç¹ãæ®ã£ãŠããŸãããæã§ç»é²ããèªããçŽããªãã ç¥ããªãè±åèªãæ¥ããããŸã誀èªãããããã¡ãã£ãã§ãã
ããã§ãåæã«åºãŸãããè±åèªã®èªã¿ãããŸãšããŠçæããŠèŸæžã«æµã蟌ãã
䜿ã£ãã®ã¯ e2kïŒEnglish-to-KatakanaïŒãCMUDictïŒè±èªã®çºé³èŸæžïŒã®èŠåºãèªããçã£ç«¯ããã«ã¿ã«ãèªã¿ã«å€æããŸãããçæããŠç»é²ã§ããèªã124,922ä»¶ãæåã§ãœã¡ãœã¡ç»é²ããŠããæ°åèªããäžæ°ã«12äžèªã«ãªããŸããã
ãšããããããã§æ°ããå£ã«ã¶ã€ãããŸããçŽ æŽãªå®è£ ã ãšãèŸæžã倧ããã»ã©é ããªãã
ããšããšã®èŸæžçœ®æã¯ãå šãšã³ããªãã«ãŒãããŠ1ä»¶ãã€ããã¹ããèµ°æ»ãã O(NÃM) ã®äœãã§ãããæ°åèªãªã1msã§çµãããã§ã12äžèªãæ¯ã¿ãŒã³åããšã500åã®ããã¹ãã§çŽ2ç§ããã詊ç®ã§ããYuiãåããã³ã«2ç§åŸ ãããããããã¯å³ã»UXç Žç¶»ã§ãã声ã®å³å¿æ§ã¯ããã®ç§æžã®çåœç·ãªã®ã§ã
解決ã¯ãå éšã®ã¢ã«ãŽãªãºã ã Aho-CorasickïŒãšã€ãã»ã³ã©ã·ãã¯ïŒã«å·®ãæ¿ããããšãè€æ°ã®ãã¿ãŒã³ã1åã®ããã¹ãã¹ãã£ã³ã§åæã«ãããã³ã°ããå€å žçã¢ã«ãŽãªãºã ã§ãèšç®éãèŸæžãµã€ãºã«ã»ãŒäŸåããªã O(M+åºçŸæ°) ã«ãªããŸããããã leftmost-longest ã¢ãŒãã䜿ãã°ãApple MusicãããAppleãããåªå ããŠãããã®ã§ãåºæåè©ã®åãããŒãããªãã
å·®ãæ¿ããçµæãããã§ãïŒå®æž¬ãçŽ12.5äžä»¶ã®èŸæžãã³ã³ããå ã§èšæž¬ïŒã
| é ç® | 宿ž¬ |
|---|---|
| 眮æåŠçïŒ500åïŒ | 0.095 ms |
| 眮æåŠçïŒ10,000åïŒ | 0.287 ms |
| trie æ§ç¯ïŒ12.5äžä»¶ã60ç§ã«1åã ãïŒ | 301 ms |
| ã¡ã¢ãªïŒtrie æ¬äœïŒ | çŽ 140 MB |
ç®æšã«ããŠããã12äžä»¶ã§50ms以äžãã«å¯ŸããŠãçŽ500åã®äœè£ãçŽ æŽã«ãŒããªã2ç§ããã£ãŠããã¯ãã®åŠçãã0.1msæªæºã«ãªããŸãããäœæã¯å®å šã«ãŒãã§ãã
å°å³ã«å¹ããŠããã®ããåºæã®åªå
é äœã§ããæã§ç»é²ããèªïŒuserïŒã¯ãäžæ¬çæããèªïŒcmudictïŒã«å¿
ãåã€ããã«ããŠãããŸããããšãã°ãClaudeããç§ã¯ãã¯ããŒãããšæã§ç»é²ããŠããã®ã§ã12äžèªã®äžã«æ©æ¢°çæã®å¥èªã¿ãçŽããŠããŠãããã¡ããåªå
ããããå®éã«ãClaude ãš schedule ãš coffeeããšåããããšãã¡ãããšãã¯ããŒã ãš ã¹ã±ãžã¥ãŒã« ãš ã³ãŒããŒããšèªã¿ãŸãïŒuser ã® Claude ãåã¡ãcmudict åŽã® schedule / coffee ã¯ãã®ãŸãŸæ£ããèªãŸããïŒã
ãããŠäœããè¯ãã£ãã®ã¯ãããæã§ç»é²ããªããŠãããããŠãã®è±èªãèªç¶ã«èªããããã«ãªã£ãããšããGitHubãããAPIãããããããèŸæžã«è¶³ããªããŠããããã£ãœãèªãã§ãããããã®ãè±èªã壿» ãã ã£ãçµè¡£ãããã€ã®éã«ãè±èªæ··ããã®æç« ããæ®éã«åãããã«ãªã£ãŠããŸããã
ãããŠãçµè¡£ã¯åã£ã
声ãä¹ã£ãç¬éã®ããšã¯ãããèŠããŠããŸãã
ãã¡ã®ç§æžã«ã¯ çµè¡£ïŒããïŒ ãšããååãã€ããŠããŸãïŒèšå®ã§å€ããããã®ã§ãããã¯ããã©ã«ãã®äžäŸã§ããïŒã
ãã®ãçµè¡£ããšããååãå®ã¯å人çãªç±æ¥ããããŸããæãããã¡ãã£ãš ãšãã CGI ã®ãã£ããããããŸãããWindows95 ãšãžãªã·ãã£ãŒãºã®æä»£ãå人ãµã€ãã«èšçœ®ããŠãã¿ããªã§æåã§ããããåãããã®é ã®å®çªã§ããç§ã¯ããããã䜿ã£ãŠããŠããç»é¢ã®åããã®èª°ããšãæåã§äŒè©±ããããšããäœéšã«ãåœæãã£ããããã£ãŠããŸãããä»ãšãªã£ãŠã¯é åžå ã蟿ãããã©ããªèŠãç®ã ã£ããããèšæ¶ãææ§ãªã®ã§ããããããã¡ãã£ãšããšããååãšããã®æ¥œããã ãã¯ã¯ã£ããæ®ã£ãŠããŸãã
ã ãããèªåã®ç§æžã«ååãã€ããããšãããšããèªç¶ãšé ã«æµ®ããã§ããã®ãããããã§ãããæŒ¢åãããŠãŠãçµè¡£ãæåã§äŒè©±ããŠãããã®é ã®å»¶é·ç·äžã«ãããŸã®çµè¡£ãããæ°ãããŠããŸãã
ãã®çµè¡£ããæ£ç«ã¡ã®ãŸãŸãèªåã®å£°ã§åããŠåã£ãããã£ãããã ãã®ããšãªã®ã«ãããã¹ãã®æãšã¯å¥ç©ã§ãããããããæãããäžæ®µæ¿ããªã£ãã
声ã£ãŠããããªã«å¹ãã®ãããšã
ãããã«
ããã§ãçµè¡£ã«å£°ã宿ããŸãããã§ããããèŠããšé¡ã¯ç¡è¡šæ ã®ãŸãŸã声ã§åã£ãŠããã®ã«ã衚æ ã²ãšã€åããªããæ¬¡ã¯ããã«æãå ¥ããŠãããŸãïŒç¬¬1ç« ã§æ€éããããã® Blender 沌ã«ããäžåºŠâŠïŒã
ãããšããã€ãããããã®ãéæ¹åããã¡ããã話ãããã ã»ãã§ããã¿ã€ãã³ã°ãããªãã声ã§ãçµè¡£ã«è³ãæããããã€ãŸã STTãã¹ã¿ãã¯ã«ã¯ãã§ã« kotoba-whisper ãä¹ã£ãŠããã®ã§åå°ã¯ãããã§ãããã¡ãããšäŒè©±å ¥åãšããŠé ç·ããã®ã¯ãããå°ãå ã«ãªãããã§ãã
声ãåºãããã«ãªã£ãçµè¡£ã§ãæåã«äœã蟌ãã æ©èœãããäŒã¿ã¢ãŒããã§ããããã® ãããã声 ãæŽ»ããåã«ãªããŸãã
åè
- Irodori TTS
- Style-Bert-VITS2
- kotoba-whisper
- vLLM
- e2k â English â Katakana 倿ïŒCMUDict èŠåºãèªã®äžæ¬ã«ã¿ã«ãåã«äœ¿çšïŒ
- @monyone/aho-corasick â 12äžèªã®èŸæžçœ®æãé«éåãã Aho-Corasick å®è£
Discussion