
VOICEVOX äžéAPIãµãŒããŒäœã£ã ïœèªäœã¢ããªããç°¡åã«VOICEVOXãšé£æºïœ
ããã«ã¡ã¯Rcatã§ãã
ååãLinuxçVOICEVOXãSSHããã·ã§ã«ã ãã§äœ¿çšããæ¹æ³ã玹ä»ããŸããã
ä»åã¯ãã®å»¶é·ã§ãLinuxã«VOICEVOXé³å£°åæãµãŒããŒã建ãŠãããšæããŸãã
ããã«ããããç°¡åã«APIã«ã¢ã¯ã»ã¹ããŠæ§ã
ãªèªäœã¢ããªãªã©ããå©çšãå¯èœã«ãªããŸãã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
æŠèŠ
çµç·¯
å°ãåã«ãã¡ãã®èšäºã§å
šèªåå°å£°å¹ãæ¿ãããŒã«ãäœããŸããã
ããã§å°ã説æããŠããŸãããVOICEVOXæ¬äœã®APIã¯éä¿¡ããå
容ãè€éã§ãå©çšããã«ã¯å°çšã®ããã°ã©ã ãçµãå¿
èŠããããŸãã
åœæã¯Pythonã¢ãžã¥ãŒã«ãäœããŸããã®ã§ãPython空ã§ããã°ãããã€ã³ããŒãããã°ããã§ãããä»ã®èšèªã®å Žåãèªäœã¢ãžã¥ãŒã«ãããããªãšããã«ã³ããŒããã®ã¯ç®¡çãç
©éã«ãªããããŸããã
ã ã£ããâŠç°¡åã«äœ¿ããWEB APIäœãã°ãããã§ãã
äžéãµãŒããŒã£ãŠã©ãããããš?
äžã§å°ã話ããŠããŸãããèŠã¯ããšããšWebã®APIããããã䜿ãã®ãé£ããã®ã§ã代ããã«ãã£ãšç°¡åã«äœ¿ããAPIãäœããšããæãã§ãã
ã©ããããé£ããããšãããšãããªæãã§ãã

æåã¯èª°ã«èªãŸããããšèªã¿äžããããã¹ãã ãæž¡ãã°ãããã§ããã2ã€ç®ã¯ãããéã®ãã©ã¡ãŒã¿ãŒãèŠæ±ãããŸãã
ãŸãããã®ãã©ã¡ãŒã¿ãŒã¯ã»ãŒå
šãŠ1ã€ç®ã®APIããè¿ãããå
容ãªã®ã§ãããçµå±ããã®APIéãæ©æž¡ãããããã°ã©ã ãå¿
èŠã«ãªã£ãŠãããã§ãããã
ãšããããã§ãä»åèããã·ã¹ãã ãå³ã«ãããã®ããã¡ã

ã¯ã©ã€ã¢ã³ãããã¯äžéãµãŒããŒã®1ã€ã®APIã ããå©ããŸãã
ãããšãäžéãµãŒããŒã¯å
¬åŒã®2ã€ã®APIãå©ãé³å£°ãçæããŸãã
ãŸããäžéãµãŒããŒã¯GETã®ãã©ã¡ãŒã¿ãŒã«ãããªã¯ãšã¹ããåãä»ããŠãããããå©çšãç°¡åã«ãªã£ãŠããŸãã
ããã«VOICEVOXã®åºåã¯wavã§ãããäžéãµãŒããŒã®äžã§FFMPEGãå©çšããŠMP3ãoggãªã©ã«å€æããããšã§ãããŒã¿ãµã€ãºãæããŠè¿ãããšãã§ããŸãã
æ©èœåã³äœ¿ãæ¹
䜿ãé
åºæ¬çã«ä»ã®ããã°ã©ã ããåŒã³åºãããã«äœ¿ããçŽæ¥WebãµãŒããŒã«æ¥ç¶ãããããªäœ¿ãéã¯æ³å®ããŠããŸããã
äŸãã°Difyã䜿ãäŸã ãšãAIã䜿ã£ãŠäœããã®ããã¹ããçæãããã®ããã¯ãŒã¯ãããŒå
ã®httpãªã¯ãšã¹ãã§èªã¿äžããªããŠããšãæ³å®ã§ããŸããã
é³å£°ããŒã¿ãåãæ±ããã®ããŸã§ã¯ç¢ºèªããŠããŸãããâŠã
ããããããçšåºŠã¯èªåã§æãå
¥ããããããã©ããæ·±ããŸã§æãå
¥ããããªããã®ã«é¢ããŠã¯ãããã£ãWebAPIãçšæããŠããã®ãéåžžã«äŸ¿å©ã§ãã
ä»ã«ãã¹ããã®ã¢ããªãäœã£ãŠèªã¿äžããæ©èœãæèŒããããªãšæã£ãæã«ããããã¯ãŒã¯çµç±ã§èªã¿äžããè¡ããããã«ãããªã©ãšãã£ã䜿ãéãæ³å®ãããŸãã
Pythonã®ã€ã³ã¹ããŒã«
æ¬äœã¯Pythonã§ã§ããŠããŸãã
ãã®ããããŸãã¯Pythonã®ã€ã³ã¹ããŒã«ãå¿
èŠã§ãã
ã€ã³ã¹ããŒã«æ¹æ³ã«ã€ããŠã¯ä»¥äžã®èšäºã§è§£èª¬ããŠããŸãã®ã§ãåèã«ããŠãã ããã
ãŸããFFMPEGãäœ¿ãæ©èœãå©çšããå Žåã¯FFMPEGã®ã€ã³ã¹ããŒã«ãšPATHã®èšå®ãå¿ èŠã§ãã
æ©èœ
æ¬ãµãŒããŒã«ã¯æ¬¡ã®æ©èœããããŸã
VOICEVOXã䜿ã£ãèªã¿äžãæ©èœ
ä»»æã®ããã¹ããèªã¿äžã
å ¥åããããã¹ããèªã¿äžããããŸãããã£ã©ã¯ã¿ãŒã®ä»»æéžæ
IDãæå®ããŠãã£ã©ã¯ã¿ãŒãéžã¶ããšãã§ããŸããèªã¿äžãé床調æŽ
次ã®ã©ã¡ããçæ¹ããèªã¿äžãé床ãéžæã§ããŸããã¹ããŒãèšå®æ©èœ
é·ãèšå®æ©èœ
èªã¿äžãã«ãããæéãç§ã§æå®ã§ããŸããå³å¯ã«ã¯ãã®ç§æ°ã«ãªãããã«ã¹ããŒãã調æŽããŸããå®å šäžèŽã«ã¯çµ¶å¯Ÿã«ãªããªãã®ã§ãããçšåºŠã®æ¿ãã¯ãããŸãã
å§çž®ãã¡ã€ã«åœ¢åŒãžã®å€æ(FFMPEGãå¿ èŠ)
MP3
OGG
GETãŸãã¯POSTã«ãŠå®è¡å¯èœ
ç°¡åãªGETã§å®è¡ããããé·ãããã¹ãã®å Žåã¯POSTãå©çšå¯èœã§ã
VOICEVOXãã£ã©ã¯ã¿ãŒIDæ€çŽ¢æ©èœ
å ¬åŒAPIã®IDæ å ±ãèŠããã衚瀺ããæ©èœã§ããVOICEVOXèµ·åæ©èœ
ãµãŒããŒãç«ã¡äžãã£ãŠããããœã³ã³ã§èµ·åã¹ã¯ãªãããå®è¡ããæ©èœ
ããã°ã©ã èµ·åæã«èªåçã«å®è¡ãããã»ããç¹å®ã®URLãå©ãããšã§ãå®è¡ã§ããèªã¿äžãã®ãã¹ãå®è¡
cgiã®ãã¹ãå©çšãã§ããŸã
ãããããŒãž
æ¬ãµãŒããŒã«ã¢ã¯ã»ã¹ãããšä»¥äžã®ãããªç»é¢ãçŸããŸãã
ãã®ç»é¢ã§ã¯cgiã®èª¬æãšãã£ã©ã¯ã¿ãŒIDæ€çŽ¢æ©èœãå©çšã§ããŸãã

ãã£ã©ã¯ã¿ãŒIDæ€çŽ¢æ©èœ
ãããããŒãžã®"ãã£ã©ã¯ã¿ãŒIDã調ã¹ãã®"ãšããã®ããããããŠã³ããã¯ã¹ã§éžæããããšã§ãåãã£ã©ã¯ã¿ãŒã®IDãšã¹ã¿ã€ã«ã確èªããããšãã§ããŸãã
ãã£ã©ã¯ã¿ãŒãéžæããããšã§ããã®äžã«IDãšã¹ã¿ã€ã«ã®è¡šã衚瀺ãããŸãã

ãµãŒããŒã®ã¹ããŒã¿ã¹è¡šç€º
æ¬äœãäŸåããŠãã2ã€ã®ãœãããŠã§ã¢ã®ç¶æ³ã確èªã§ããŸãã
èªã¿äžããè¡ãã«ã¯ãã€ã¹ããã¯ã¹ã皌åããŠããå¿
èŠããããŸãã
åºåæã«wav以å€ã®ãã©ãŒããããæå®ããå Žåã¯FFMPEGãå©çšå¯èœã§ããå¿
èŠããããŸãã

â»FFMPEGã®ã€ã³ã¹ããŒã«ç¶æ³ã«ãã£ãŠã¯ãå©çšå¯ã§ãäŸåã©ã€ãã©ãªãç¡ã倿ã§ããªãå Žåãããã®ã§ãäºåã«mp3ãšoggã«å€æã§ãããæåã§è©ŠããŠãããŠãã ãããUbuntuã«æšæºã§å ¥ã£ãŠãããã®ã§ã¯å€æãã§ããŸããã§ããã
èªã¿äžãæ©èœã®äœ¿ãæ¹
èªã¿äžãAPIã®äœ¿ç𿹿³ã¯ä»¥äžã®éãã§ãã
ãµãŒããŒã¢ãã¬ã¹/talk?text=èªã¿äžãããããã¹ã絶察ã«å¿
èŠãªåŒæ°ã¯textã«ãªããŸãã
ãã以å€ã¯å
šãŠãªãã·ã§ã³ã§ããã©ã«ãã§ã¯ååœãããã§èªã¿äžããè¡ããŸãã
远å ã®ãã©ã¡ãŒã¿ãŒãæå®ããå Žåã¯ä»¥äžã®ããã«ãªããŸãã
ãµãŒããŒã¢ãã¬ã¹/talk?text=èªã¿äžãããããã¹ã&cid=ãã£ã©ID&format=mp3/ogg&length=é·ããã©ã¡ãŒã¿ãŒã¯&èšå·ã§çµåã§ããŸãã
äŸãã°ä»¥äžã®äŸã§ã¯ãæ¥æ¥ã€ããã§ãåºåãã©ãŒãããã¯MP3ããã¡ã€ã«ã®é·ãã2ç§ã«ãªãããã«èª¿æŽããé床ã§èªã¿äžããè¡ã£ãŠããŸãã
é床調æŽãšé·ã調æŽã¯ã©ã¡ããçæ¹ãã䜿ããŸããã®ã§ãããã¯ã泚æãã ããã

ãã¡ãã®äŸã§ã¯ãã©ãŒããããoggã«ããŠ1.5åéã§èªã¿äžããšããæç€ºã«ããŠããŸãã

Pythonããã®ã¢ã¯ã»ã¹æ¹æ³
Pythonã䜿ã£ãŠAPIã«ã¢ã¯ã»ã¹ããŠé³å£°ãä¿åããæ¹æ³ã¯ä»¥äžã®éãã§ãã
R:\tmp>py
Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct 2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get("http://localhost:25607/talk?text=ããããã£ãšã«ãã&cid=3")
>>> f = open("vv.wav","wb")
>>> f.write(r.content)
53804
>>> f.close()ãã®APIã¯é³å£°ã®ãã€ããªããã®ãŸãŸè¿ããŠããã®ã§ãã¬ã¹ãã³ã¹ã®ã³ã³ãã³ãããã¡ã€ã«ãªããããã€ãIOã«æžã蟌ãã§äœ¿ããŸãã
ãã®å Žåã¯ãã¡ã€ã«ã«ä¿åããŠããã®ã§ãåçããŠã¿ãããšã§æ£åžžã«çæã§ããã®ãã©ããã確èªããããšãã§ããŸãã
POSTã§å®è¡ããå Žå
次ã«POSTã䜿ã£ããªã¯ãšã¹ãã®æ¹æ³ã玹ä»ããŸãã
ãªã¯ãšã¹ãã«å¿
èŠãªããŒã¯ãŒãã¯GETã®æãšåãã§ãããŸãURLãåãã§ãã
POSTã®å Žåã¯ãªã¯ãšã¹ãããã£ãJSON圢åŒã«ããŠããã®äžã«ãã©ã¡ãŒã¿ãŒãå
¥ããããšã§èªã¿äžããè¡ããŸãã
Pythonã§è¡ãå Žåã¯ãã©ã¡ãŒã¿ãèŸæžã«å
¥ããŠrequestsã§POSTããã®ãäžçªç°¡åã§ãã
R:\tmp>py
Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct 2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> data = {
... "text":"ããããã£ãšã«ãã",
... "cid":14, #å¥é³Žã²ãŸã
... "format":"ogg"
... }
>>> r = requests.post("http://localhost:25607/talk",json=data)
>>> f = open("vv2.ogg","wb")
>>> f.write
f.write( f.writelines(
>>> f.write(r.content)
10516
>>> f.close()VOICEVOXèµ·åæ©èœã®äœ¿ãæ¹
Windowsã§ããã°ããŸãæ°ã«ãªããªããšæããŸãããLinuxã®ãµãŒããŒã§äœ¿ãå Žåã¯VOICEVOXãsystemdã«å
¥ããŠãããªããã°èªåèµ·åã¯ã§ããŸããã
ãããã2ã€ã®ããã°ã©ã ãå
¥ããŠããã®ã¯ããã©ãããã§ãããã
ãšããããã§æ¬ããã°ã©ã ã®æ¹ããVOICEVOXãèµ·åããæ©èœãå
¥ããŠãããŸãã
èµ·åã¹ã¯ãªãããçšæãã
ç°å¢ã«ãã£ãŠã³ãã³ã1åã§èµ·åããã®ãããã§ãªãã®ãç°ãªã£ãŠããŸããããå°çšã®ã¹ã¯ãªãããçšæããããšã§æ±çšçã«èµ·åã§ããããã«ããŸãã
WindowsãšLinuxçšã§ãããããµã³ãã«ãå
¥ããŠãããŸãã®ã§ãåèã«æžãæããŠãã ããã

äºåã«æåã§ãã®ã¹ã¯ãªãããå®è¡ããVOICEVOXãç«ã¡äžããããšã確èªããŠãã ããã
æ¬ãµãŒããŒèµ·åæã«å ¬åŒã®APIãžã®ã¢ã¯ã»ã¹ãã§ããªãå Žåãèªåçã«VOICEVOXã®ç«ã¡äžããè¡ããŸãã
èµ·åAPIãžã¢ã¯ã»ã¹ãã
åºæ¬çã«ã¯èµ·åæã«èªåã§ç«ã¡äžããã®ã§äœ¿ãããšã¯ãªãã¯ãã§ãããå¿ èŠã«ãªã£ãå Žåã¯ä»¥äžã®URLã«ã¢ã¯ã»ã¹ããããšã§èµ·åã¹ã¯ãªãããå®è¡ããããšãã§ããŸãã
/vvstart?key=èµ·åããŒèµ·åããŒã¯ããã°ã©ã ã®äžã®äžçªäžã§å®çŸ©ããŠããŸãã
奜ããªããŒã«æžãæããŠå©çšããŠãã ããã
äžå¿èªåã§äœ¿ãåæã§ãããããã§ãªãå Žåããããããããªãã®ã§ãèµ·åããŒãšããã»ãŒããã£ããããŠããŸãããã°ã€ã³ãšãã¯ããããŸã§ãããã®ã§ããªãã®ã§ãã£ãŠããŸããã

å®éã«ã¢ã¯ã»ã¹ãããšãããªæã
ãã®æã¯ãã§ã«èµ·åããŠããã®ã§ããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸããã

ãŸãšã
ãããã§ããã§ããããïŒ
ä»åã¯VOICEVOXãæ§ã
ãªã¢ããªã±ãŒã·ã§ã³ã§ããæè»ã«æŽ»çšããããã®äžéãµãŒããŒãäœæããŸããã
ç§ã¯ç¹ã«ããã¹ãçæAIãšã®çµã¿åãããæåŸ
ã§ãããšèããŠããŸãã
ä»åã¯äžéãµãŒããŒãäœã£ãã ããªã®ã§ãã ããäœ?ã£ãŠæãã§ãããä»åŸã«ã€ãªããŠãããããšèããŠããŸãã
ããã§ã¯ãŸããäŒãããŸãããã
é åžæ å ±
é åžURL
以äžã®URLããé
åžããŠããŸãã
å©çšèŠçŽã«åæã®äžãå©çšãã ããã
äŸåã¢ãžã¥ãŒã«
äžèšã§ç޹ä»ããŠããããŒã«ã«å«ãŸããŠããvoicevox.pyãå¥éå¿ èŠã§ãã