
AIèªã¿äžããµãŒãã¹ ã«ããã€ã¹ API䜿ã£ãŠã¿ã ïœAIã§ææ è±ããªèªã¿äžã宿³ãäœæã§ãã!?ïœ
ããã«ã¡ã¯Rcatã§ãã
ä»åã¯ã¹ããã«é¢çœãããªéç¥ãå
¥ã£ãŠæ¥ãŸããã®ã§è©Šãããšã«ããŸããã
ãã®åãã«ããã€ã¹ã
ç°¡åã«èšããšAIã䜿ã£ãé³å£°åæãµãŒãã¹ã
æè¿VOICEVOXã䜿ã£ãããŒã«ãäœãã®ã«ã¯ãŸã£ãŠããŸããããããªç§ã®å¥œå¥å¿ããããããµãŒãã¹ã§ãã
ãã€ã¹ããã¯ã¹ã䜿ã£ãå
šèªåå¹ãæ¿ãããŒã«ãæè¿ç޹ä»ããŠããŸããã代ããã«ãã®ãµãŒãã¹ã䜿ãããšãã§ãããã§ããã
ã«ããã€ã¹ã䜿ã£ãŠå¹ãæ¿ããåç»ã¯ãã¡ã
ããªãŒãœããã®VOICEVOXã¯ãã¡ã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
https://note.com/rcat999/n/nb6a601a36ef5
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
ã«ããã€ã¹ãšã¯
å
¬åŒã説æã«ãããšãAIãæŽ»çšããé³å£°çæãã©ãããã©ãŒã ã§ãã
ããããã®ãã£ã©ã¯ã¿ãŒãçšæãããŠããã奜ããªãã£ã©ã«å¯ŸããŠããã¹ããèªãŸããããšãã§ããŸãã
ãªããšçŸæ®µéã§100ãã£ã©ã¯ã¿ãŒããŸãã
æ©éAPIã䜿ã£ãŠã¿ã
ãšããããã§ããããªãAPIã䜿ããŸãã
ãããåããã ãšæããŸãããAPIããªããµãŒãã¹ã«ç§ãæãåºãããšã¯ãããŸãããéã«èšãã°ç§ã¯APIãããã°é£ãã€ããŸãwã
ãããŠä»åŸã®çºã«Pythonã®ã¯ã©ã¹åãããŸãã
APIã£ãŠäœ?
APIã¯ãããã£ãå€éšã®ãµãŒãã¹ãèªåã®ããã°ã©ã ã®äžã§äœ¿çšããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã
ãã®ãµãŒãã¹ã§ã¯ç¹å®ã®URLã«ç¹å®ã®ããã£ãéãã€ããããšã§é³å£°çæãã§ããã¿ããã§ãã
APIã«ãã°ã€ã³ãã
çŸæ®µéã§ã¯å ¬åŒãµã€ãå³äžã«ã«ããã€ã¹APIãšãããªã³ã¯ãããã®ã§ãããããAPIãžãã°ã€ã³ããŸãã

ãªããAPIã¯ææãµãŒãã¹ã§ãã
ãã®ãµãŒãã¹ã§ã¯æåæ°ã§èª²éãããŸãã課éãšããããäºåã«è³Œå
¥ããŠããæãã§ãããã§ããã ãæŒ¢åã§å
¥åããæ¹ãç¯çŽã§ãã??
ãã ããååã¯ã詊ãçšã«5000æåãä»äžãããŠããŸããä»åã¯ããã䜿ã£ãŠè©ŠããŠãããŸãã

APIããŒã確èªãã
å·Šã®ã¡ãã¥ãŒããèªåã®APIããŒã確èªããŸãããã
ãããã°ãããšä»ã®äººã«äœ¿ãããŠããŸãã®ã§ã絶察ã«å
¬éããªãããã«ããŠãã ããã
APIãå®è¡ãã
å·Šã®ã¡ãã¥ãŒã®ããã¥ã¡ã³ãããäœ¿ãæ¹ã確èªã§ããŸãã
ãªããå©çšèŠçŽã«ããé³å£°ã䜿çšããéã¯ã¯ã¬ãžããã®è¡šèšãå¿
èŠãªããã§ããç¡æåã ãã§ã¯ãªãã課éããå Žåã§ãã¯ã¬ãžããããããã§ãããæ°ãä»ããŸãããã
ãã£ã©ã¯ã¿ãŒã®äžèЧã確èªãã
ãŸããæåã«ãã£ã©ã¯ã¿ãŒãšå¯Ÿå¿ããIDã®äžèЧãååŸããŸãã
å·Šã®ã¡ãã¥ãŒã®ãã€ã¹äžèЧããã§ããã©ãŠã¶äžã§ç¢ºèªã§ããŸãããèªåã®ããã°ã©ã ã«çµã¿èŸŒãå Žåã¯APIã§ååŸã§ããæ¹ãããã§ããã
以äžãç§ã®ã¿ãŒããã«ã§ã®å®è¡çµæã§ãã
äžéšãŒãããæ¹ããããšæãããå
容ã¯ãŒãããŠããŸãã
>>>import requests,pprint
>>>url = "https://api.nijivoice.com/api/platform/v1/voice-actors"
>>>header = {
... "accept": "application/json",
... "x-api-key":"ããã«èªåã®APIããŒãå
¥ãã"
...}
>>>resp = requests.get(url,headers=header)
>>>characters = resp.json()
>>> characters.keys()
dict_keys(['voiceActors'])
>>> len(characters["voiceActors"])
100
>>>pprint.pprint(characters["voiceActors"][0])
{'age': 15,
'birthDay': 3,
'birthMonth': 3,
'gender': 'FEMALE',
'id': 'ãã£ã©ã®UUID',
'largeImageUrl': 'ç»åã®URL2',
'mediumImageUrl': 'ç»åã®URL',
'name': 'æ¥æ¬èªã®åå',
'nameReading': 'èªã¿ä»®å',
'recommendedVoiceSpeed': 0.8,
'sampleScript': 'ãµã³ãã«é³å£°ã®èªã¿',
'sampleVoiceUrl': 'ãµã³ãã«é³å£°ã®URL',
'smallImageUrl': 'ã¢ã€ã³ã³ã®URL',
'voiceStyles': [{'id': 58, 'style': 'çŽ çŽ'}, {'id': 41, 'style': ' æãã'}]}æ
å ±ã¯JSON圢åŒã§ããPythonã§ã¯èŸæžã«å€æå¯èœã§ãã
ãŸããäžçªæåã®ããŒã"voiceActors"ã§ãã®äžã«å
šãŠã®ãã£ã©ã¯ã¿ãŒããªã¹ãã§æ ŒçŽãããŠããŸããlen颿°ãå®è¡ãããšã¡ããã©100ã«ãªããŸãããæåã«æ°ããéãã§ããã
é³å£°ãåæãã
ã§ã¯ãæ©éé³å£°ãåæããŠãããŸãããã
ã€ã³ã¿ããªã¿ã«ã¡ãŸã¡ãŸå
¥åããŠãããŸãã
æå®ããé
ç®ã¯èªãŸããããã¹ããšã¹ããŒãã§ãã
é³å£°åœ¢åŒã¯WAVãšMP3ã§éžã¹ãã¿ããã§ããPythonã§åŠçã§ããã®ã§WAVã«ããŸãã
>>> import requests,pprint
>>> url = "https://api.nijivoice.com/api/platform/v1/voice-actors/1cae479f-715c-422a-9714-3510b4903780/generate-voice"
>>> payload = {
... "format": "wav",
... "script": "ç«ãããã!ã«ããŒã",
... "speed": "1.0"
... }
>>> headers = {
... "accept": "application/json",
... "x-api-key": "ããã«èªåã®APIããŒãå
¥ãã",
... "content-type": "application/json"
... }
>>> resp = requests.post(url, json=payload, headers=headers)
>>> pprint.pprint(resp.json())
{'generatedVoice': {'audioFileDownloadUrl': 'ããã«URLãå
¥ã',
'audioFileUrl': 'ããã«URLãå
¥ã',
'duration': 2584,
'remainingCredits': 4990}}ãã?ç§ã¯ãŠã£ããã¬ã¹ãã³ã¹ããã£ã¯ãã€ããªã ãšæã£ãŠããŸããããã©ãããã¯ã©ãŠãã«æ ŒçŽãããã¿ããã§ããã
æ®ãã®æ
å ±ã¯é³å£°ã®é·ããšæ®ãã®æåæ°ã¿ããã§ããããããPythonã§è§£æããªããŠãé³å£°ã®é·ããæžããŠããã®ãéåžžã«ãããããã
URLã2ã€ãããŸãããŸãããŠã³ããŒããšæžããŠããæ¹ããã£ãšããŠã³ããŒãããããã®æ¹ãªãã§ãããã
ããããç¹ã«è¡šèšã¯èŠã€ããããŸããã§ãããããã®é³å£°ãã€ãŸã§æ®ã£ãŠããã§ãããïŒ
ãšããããã§ç¶ã
ãã1åURLãå©ããŠã³ã³ãã³ããããŠã³ããŒãåŸããã¡ã€ã«ã«ä¿åããŸãã
äžæŠãã€ããªã100ãã€ãã ã衚瀺ããŠwavã«ãªã£ãŠãã確èªããŠããŸãã
>>> URL = resp.json()["generatedVoice"]["audioFileDownloadUrl"]
>>> resp2 = requests.get(URL)
>>> resp2.content[:100]
b'RIFFRz\x03\x00WAVEfmt \x12\x00\x00\x00\x03\x00\x01\x00"V\x00\x00\x88X\x01\x00\x04\x00 \x00\x00\x00fact\x04\x00\x00\x00\x88\xde\x00\x00data z\x03\x00\xab>R\xb8B\xb1c7\xa59\xb88\x07t\x1382\x13&8T\xa7\x08\xb84;\x888\xdc\x16\xff7\x04\x1c\x8a8q\xcf\xd38\xa9g'
>>> f = open("nizi.wav","wb")
>>> f.write(resp2.content)
227930
>>> f.close()çæããé³å£°ããã¡ã
VOICEVOXã¯ã€ã³ãããŒã·ã§ã³èšå®ãããªããšæ£èªã¿ã§ããããããã¯AIäœãææ
ãããã£ãŠãŸãã!ã
é³å£°: ã«ããã€ã¹ (çœç³ ç²å¥)
ããããã£ã¯ãã¡ã
ããã2ç§ã§ããã«ãµã€ãºãã§ãããªã(222(ã«ããã«ããã«ãã)KB)ããšæã£ãããããã¬ãŒãããããã§ããã

ã¯ã©ã¹ãäœæãã
ç§ã¯ä»åŸãèªåã®èªã¿äžãããŒã«ã«ãã¡ããå°å
¥ããŠããäºå®ãªã®ã§ã¯ã©ã¹ãäœæããŸãã
ãšèšã£ãŠããã®åäœã£ãvoicevoxã¢ãžã¥ãŒã«ã³ããã§è¿œå ããã ãã§ããã
é³å£°åæé¢æ°
äžèº«ããã©èŠããããšãããªæãã§ãã
ã€ã³ã¿ããªã¿ã§ã¯requestsã©ã€ãã©ãªã䜿ã£ãŠããŸããããDiscordã®BOTãªã©ã®ã©ã€ãã©ãªãšçµã¿åããããæã¯éåæã«ãªãã®ã§aiohttpã䜿ã£ãå®è£
ã«å€æŽããŠããŸãã

ãšããããã§äœ¿çšæã¯ãããªæãã
åäœãšåãããã«é¢æ°åãåŒæ°ãåãããŸããã
ãã¡ãã®å Žåã¯è¿œå ã§æ®ãã®æåæ°ããã®ã³ã°ãããããã«ãªããŸããã
ä»åå¶äœããã¯ã©ã¹ã¯ãã®åŸã®å°å
¥äºå®ããŒã«ã®äžã«å°å
¥ãããäºå®ã§ãã
欲ããæ¹ã¯ãã¡ããããŒã«ãããŠã³ããŒãããã ããã°ãäžç·ã«å
¥æããããšãã§ããäºå®ã§ãã
>>> import voicevox
>>> nv = voicevox.NiziVoice(apikey="èªåã®ããŒ",SaveDir="nizitest")
>>> nv.CreateWave("ç«ãããããããŠå°ãã
",Cid="8c08fd5b-b3eb-4294-b102-a1da00f09c72")
2024-12-11 23:54:42,533 INFO voicevox æ®ã:4979æåã§ã
{'path': 'nizitest\\00001_20241211_235441.wav', 'length': 2.241, 'text': 'ç«ãããããããŠå°ãã
', 'diff': 2.241, 'bin': None}èªäœã®ã¯ã©ã¹ã§ããé³å£°ã¯ãã¡ããåœç¶ã§ãããå
šãåé¡ãªãçæã§ããŠãŸããã
é³å£°: ã«ããã€ã¹ (髿§» ãªã³)
ã¡ãªã¿ã«VOICEVOXã®æãšåæ§ã«lengthåŒæ°ã§çºèšæéãæå®ããŠçæããããšãã§ããŸãã
ãã ããã«ããã€ã¹èªäœãçŸæ®µéã§é·ãæå®ã«å¯Ÿå¿ããŠããããã§ã¯ãªãã®ã§ãäžåºŠçæãè¡ã£ãŠæéãååŸããŠãæå®ããé·ãã«åãããããã«å¿
èŠãªspeedãèšç®ããŠããåçæããŸãã
ã€ãŸãã³ã¹ãã¯2åããããŸãã®ã§æ³šæã
VOICEVOXã§ã¯5åãŸã§è©Šè¡ããŸããããã³ã¹ããèæ
®ããŠãã¡ãã§ã¯2åãã詊è¡ããªãããã«ããŠããŸãã
>>>nv.CreateWave("ç«ãããããããŠå°ãã
",length=1.5)
ãã£ã©ã¯ã¿ãŒååŸé¢æ°
ãã£ã©ã¯ã¿ãŒãååŸãã颿°ã远å ããŸããã
ãã¡ãã¯çŸåšVOICEVOXãããŒã¹ã«ãã£ãŠããã®ã§ããã®å¿ç圢åŒã«åãããŠè¿ãããã«ããŸããã
>>>import voicevox
>>>nv = voicevox.NiziVoice(apikey="èªåã®ããŒ")
>>>nizi.Getspeakers()
>>>pprint.pprint(nizi.speakers)
[{'name': 'æ°Žæž ææ¥è',
'speaker_uuid': 'ããã«ãã£ã©ã¯ã¿ãŒIDãæ ŒçŽããã',
'styles': [{'id': 'ããã«ãã£ã©ã¯ã¿ãŒIDãæ ŒçŽããã',
'name': 'ããŒãã«',
'type': 'talk'}]},
{'name': 'æŒå€ è®',...äžèº«ã¯ãããªæããååŸããJSONãåæŽåœ¢ããŠããã ãã

å°å ¥æžã¿/äºå®ã®ããŒã«
ç§ã玹ä»ããŠãã以äžã®äœåã§ã«ããã€ã¹ã«å¯Ÿå¿ããŸãã
å šèªåå°å£°å¹ãæ¿ãããŒã«
å°å£°ã§åé²ããç»é¢é²ç»ãã¹ããŒããã©ã³ã®åç»ãèªã¿äžãã宿³ã«å šèªåã³ã³ããŒãããããŒã«ã
PowerPointã®ããã¹ãããã¯ã¹ãåå¹ããã³èªã¿äžããæç« ãšããŠã¢ãã¡ãŒã·ã§ã³æ©èœã掻çšããŠãåç»ãšããŠãšã¯ã¹ããŒãã§ããããã«ããã¢ãã€ã³ããŒã«ã
æ°ã«ãªã£ãç¹
æåŸã«ã«ããã€ã¹ãµãŒãã¹ã®ã©ãããŠãæ°ã«ãªã£ã¡ããç¹ã«ã€ããŠææããŠããããšæããŸãã
èª²éæ¹åŒ
çæããé³å£°ãããçŽãããšããŠãæ¢ã«èª²éæžã¿ãšããã®ãäœãšãããçŽåŸãããªããããªã挢åèªã¿ééããšããããã©ããããã§ãããããMAXã®500æåå
¥ããŠééã£ãŠãŸããããçŽãã§1000æåæ¶è²»ããŸã!!ã£ãŠæãã£ãœãã§ããâŠã
ä»åæ¡çšããŠããé床調æŽãã§ããããããŠçæçŽåŸã«ã»ãã·ã§ã³IDãšãé
åžããŠãNå以å
ã«Nå以å
ãªãããçŽããŸããçãªæãã«ããŠããããšããããããã§ããã©ã
åŸã¯ã¯ã¬ãžãããå
¥ããå Žæãç¡ãæã¯èªã¿äžããå¿
èŠããããã§ãããããã課éã¯ã¬ãžãããæ¶è²»ããŠã¯ã¬ãžãããçºèšããã£ãŠããã®ããªãããªãã£ãŠæããããããããã£ã©äžèЧãããã¡ã€ã«é
åžããã?ã£ãŠçªã£èŸŒã¿ããã
ããããææãµãŒãã¹ã§ã¯ã¬ãžããå
¥ããã£ãŠèŠãããšãªããã ããããããã®ãªã®ã?
ãŸãèŠçŽã«åæã®äžäœ¿ã£ãŠããã®ã§å®ããææã¯ããšãã
ã¯ã¬ãžããã®æå¹æé
課éã¯ã¬ãžããã¯5ã«æãè³å³æéã ããã§ããå幎ã®6ã«æãããªããŠ5ã«æãªãã ã埮åŠã ãªãããã ãã
"."ãèªããªã
ã0.1ç§ããããèªãŸãããšããã  1ã³ããããšããããããªã空çœãã§ããŸãã
AI䜿ã£ãŠããã§ããã?"0.1"ã¯"ãããŠããã¡"ã§ã¯ãªããã§ãããïŒ
ã¢ã«ãã¡ããããå®å®ããªã
äŸãã°ã"Linuxã§Python䜿ããã"ã¯æ£åžžã«èªããŸããã"Arduinoã§LEDå
ããã"ã¯å
šããã¡ã§ãããLEDã"ã¬ãã"ãšãªããç¡çãããªæãã§èªãã§ããŸãã
ããã§ãé³å£°ãçæãã¡ããã°ããèª²éæžã¿ãªãã§ãããâŠã
ã¹ã¿ã€ã«
ãã£ã©äžèЧãååŸãããšã¹ã¿ã€ã«IDãšããã®ããããããã«ã€ããŠçŸæ®µéã§ããã¥ã¡ã³ãã§ã¯äœ¿ãæ¹ã®èšåããªããäžæãªèŠçŽ ã
ãŸãšã
ãããã§ããã§ããããïŒ
ä»åã¯æ¬æ¥å
¬éãããã«ããã€ã¹ã®APIã詊ããŠã¿ãŸããã
ãã¯ãAPIã䜿ãããã©ããã§å©çšã®å¹
ãå
šç¶éããŸããã
æ°ã«ãªãç¹ã¯ãããã®ã®ããŸã å§ãŸã£ãã°ããã§ããä»åŸã«æåŸ
ã§ããã
ããã§ã¯ãŸããäŒãããŸãããã