|
|
2022/11/29(Tue) 19:42:08|NO.97409
HSPからVOICEVOXやCOEIROINKを利用することって可能でしょうか?
一応Pythonからだとできるみたなのですが、HSPでもできるのでしょうか?
http://localhost:50031/docs
|
|
2022/11/30(Wed) 11:48:35|NO.97410
できますよ。
hspinetなどのプラグインでREST APIにリクエストを送るだけです。
|
|
2022/11/30(Wed) 19:20:38|NO.97415
VOICEVOXだったらcoreがdllだったはず
作ってみようかな
|
|
2022/12/1(Thu) 20:06:49|NO.97420
どうやったらできるんですかねぇ…?
ちょっと、いまいちなのですが…。
|
|
2022/12/2(Fri) 07:38:03|NO.97425
ローカルサーバに接続してAPIを叩きましょう
#include "hspinet.as"
base_url = "http://localhost:50031/"
netinit
neturl base_url
// スピーカーid
speaker_id = "0"
// 喋らせたい文章
speak_text = "こんにちは"
// バージョン取得
netrequest_get "core_versions"
repeat
netexec wait_res
if wait_res : break
await 1
loop
netgetv core_version
core_version = strmid(core_version, 2, 5)
mes "コアバージョン: " + core_version
// クエリ作成
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
// utf-8に変換してからurlエンコードを行う
nkfcnv speak_text, speak_text, "w"
urlencode speak_text, speak_text
query_params = "text=" + speak_text + "&speaker=" + speaker_id + "&core_version=" + core_version
// パラメータをURLに直接追加します
// 第二引数は空でも大丈夫です
netrequest_post "audio_query?" + query_params, query_params
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim query_data, netgetv_size()
netgetv query_data
// 音声合成実行
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
synthesis_params = "speaker=" + speaker_id + "&enable_interrogative_upspeak=true&core_version=" + core_version
netrequest_post "synthesis?" + synthesis_params, query_data
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim synthesis_data, netgetv_size()
netgetv_data synthesis_data
bsave "voise.wav", synthesis_data
stop

| |
|
2022/12/2(Fri) 18:50:26|NO.97427
ありがとうございます。
一応、スクリプトを改造して、UTF-8環境でも正しく実行できたのですが、VOICEVOXかCOEIROINKが起動しているかどうか確認する方法はあるのでしょうか?
mmplayでjsonから生成されたwavファイルを再生して、deleteで削除しようとすると「ファイルが見つからない」というエラーが出てしまいます。
これはどういうことなのでしょうか…。
#include "hsp3utf.as"
#include "hspinet.as"
#module
#defcfunc form_encode str p1, int p2
fe_str = p1
fe_p1Long = strlen(p1)
sdim fe_val, fe_p1Long*3
repeat fe_p1Long
fe_flag = 0
fe_tmp = peek(fe_str, cnt)
if (('0' <= fe_tmp)&('9' >= fe_tmp)) | (('A' <= fe_tmp)&('Z' >= fe_tmp)) | (('a' <= fe_tmp)&('z' >= fe_tmp)) | (fe_tmp = '-') | (fe_tmp = '.') | (fe_tmp = '_') | (fe_tmp = '~') :{
poke fe_val, strlen(fe_val), fe_tmp
} else {
if fe_tmp = ' ' {
if p2 = 0 : fe_val += "&"
if p2 = 1 : fe_val += "%20" //空白処理
if p2 = 2 : fe_val += "+"
} else {
fe_val += "%" + strf("%02X",fe_tmp)
}
}
loop
return fe_val
#global
base_url = "http://localhost:50031/"
netinit
neturl base_url
// スピーカーid
speaker_id = "0"
// 喋らせたい文章
speak_text = "こんにちは"
// バージョン取得
netrequest_get "core_versions"
repeat
netexec wait_res
if wait_res : break
await 1
loop
netgetv core_version
core_version = strmid(core_version, 2, 5)
mes "コアバージョン: " + core_version
// クエリ作成
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
//文字をエンコードする
speak_text = form_encode(speak_text,1)
query_params = "text=" + speak_text + "&speaker=" + speaker_id + "&core_version=" + core_version
// パラメータをURLに直接追加します
// 第二引数は空でも大丈夫です
netrequest_post "audio_query?" + query_params, query_params
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim query_data, netgetv_size()
netgetv query_data
// 音声合成実行
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
synthesis_params = "speaker=" + speaker_id + "&enable_interrogative_upspeak=true&core_version=" + core_version
netrequest_post "synthesis?" + synthesis_params, query_data
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim synthesis_data, netgetv_size()
netgetv_data synthesis_data
bsave "voise.wav", synthesis_data
mmload "voise.wav",1,2
mmplay 1
exist "voise.wav"
if strsize ! -1:delete "voise.wav"
stop

| |
|
2022/12/3(Sat) 10:23:11|NO.97433
あ、あれ...?
私の環境ではエラーが出ずに終了しました。。。
メモリ不足なのでしょうか...?
|
|
2022/12/3(Sat) 10:57:32|NO.97434
>>NO.97425
なぜか正常に動作しなかった(バージョンが0.13.とか言うバージョンになっていた)ので、少し改造しました。
動作すると思います
#include "hspinet.as"
base_url = "http://localhost:50021/"
netinit
neturl base_url
// スピーカーid
speaker_id = "1"
// 喋らせたい文章
speak_text = "こんにちは"
// バージョン取得
netrequest_get "core_versions"
repeat
netexec wait_res
if wait_res : break
await 1
loop
netgetv core_version
strrep core_version,"[",""
strrep core_version,"\"",""
strrep core_version,"]",""
mes "コアバージョン: " + core_version
// クエリ作成
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
// utf-8に変換してからurlエンコードを行う
nkfcnv speak_text, speak_text, "w"
urlencode speak_text, speak_text
query_params = "text=" + speak_text + "&speaker=" + speaker_id + "&core_version=" + core_version
// パラメータをURLに直接追加します
// 第二引数は空でも大丈夫です
netrequest_post "audio_query?" + query_params, query_params
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim query_data, netgetv_size()
netgetv query_data
notesel query_data
notesave "query.json"
// 音声合成実行
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
synthesis_params = "speaker=" + speaker_id + "&enable_interrogative_upspeak=true&core_version=" + core_version
netrequest_post "synthesis?" + synthesis_params, query_data
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim synthesis_data, netgetv_size()
netgetv_data synthesis_data
bsave "voise.wav", synthesis_data
stop

| |
|
2022/12/3(Sat) 12:38:23|NO.97435
COEIROINKとhsp3utfの環境で試してみたのですが、落ちてしまいます。
これはなんとかならないのでしょうか…?
#include "hsp3utf.as"
#include "hspinet.as"
#module
#defcfunc form_encode str p1, int p2
fe_str = p1
fe_p1Long = strlen(p1)
sdim fe_val, fe_p1Long*3
repeat fe_p1Long
fe_flag = 0
fe_tmp = peek(fe_str, cnt)
if (('0' <= fe_tmp)&('9' >= fe_tmp)) | (('A' <= fe_tmp)&('Z' >= fe_tmp)) | (('a' <= fe_tmp)&('z' >= fe_tmp)) | (fe_tmp = '-') | (fe_tmp = '.') | (fe_tmp = '_') | (fe_tmp = '~') :{
poke fe_val, strlen(fe_val), fe_tmp
} else {
if fe_tmp = ' ' {
if p2 = 0 : fe_val += "&"
if p2 = 1 : fe_val += "%20" //空白処理
if p2 = 2 : fe_val += "+"
} else {
fe_val += "%" + strf("%02X",fe_tmp)
}
}
loop
return fe_val
#global
base_url = "http://localhost:50021/"
netinit
neturl base_url
// スピーカーid
speaker_id = "0"
// 喋らせたい文章
speak_text = "こんにちは"
// バージョン取得
netrequest_get "core_versions"
repeat
netexec wait_res
if wait_res : break
await 1
loop
netgetv core_version
strrep core_version,"[",""
strrep core_version,"\"",""
strrep core_version,"]",""
mes "コアバージョン: " + core_version
// クエリ作成
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
//文字をエンコードする
speak_text = form_encode(speak_text,1)
query_params = "text=" + speak_text + "&speaker=" + speaker_id + "&core_version=" + core_version
// パラメータをURLに直接追加します
// 第二引数は空でも大丈夫です
netrequest_post "audio_query?" + query_params, query_params
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim query_data, netgetv_size()
netgetv query_data
notesel query_data
notesave "query.json"
// 音声合成実行
// jsonであることをヘッダに記述しておく
netheader "Content-Type: application/json"
synthesis_params = "speaker=" + speaker_id + "&enable_interrogative_upspeak=true&core_version=" + core_version
netrequest_post "synthesis?" + synthesis_params, query_data
repeat
netexec wait_res
if wait_res : break
await 1
loop
// 送られてきたデータのバイトサイズをもとにバッファを作成
sdim synthesis_data, netgetv_size()
netgetv_data synthesis_data
bsave "voise.wav", synthesis_data
mmload "voise.wav",1,2
mmplay 1
stop

| |
|
2022/12/3(Sat) 18:18:17|NO.97439
nennneko5787さんのスクリプトで、前者のスクリプトは正しく動作はしたのですが、後者のスクリプトでは正しく動作しませんでした。
HSPが落ちます。
|
|