HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
1129
SMOPUHSPでVOICEVOXとCOEIROINKを使用したい10未解決


SMOPU

リンク

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にリクエストを送るだけです。



nennneko5787

リンク

2022/11/30(Wed) 19:20:38|NO.97415

VOICEVOXだったらcoreがdllだったはず
作ってみようかな



SMOPU

リンク

2022/12/1(Thu) 20:06:49|NO.97420

どうやったらできるんですかねぇ…?
ちょっと、いまいちなのですが…。



SMOPU

リンク

2022/12/1(Thu) 21:33:49|NO.97424

COEIROINKでPythonでも実行してみたのですが、エラーになってしまいます。
COEIROINKをHSPでも使う方法を教えてくださると幸いです。
https://note.com/npaka/n/n20763cb96cfb



Cube

リンク

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



SMOPU

リンク

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



nennneko5787

リンク

2022/12/3(Sat) 10:23:11|NO.97433

あ、あれ...?
私の環境ではエラーが出ずに終了しました。。。
メモリ不足なのでしょうか...?



nennneko5787

リンク

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



SMOPU

リンク

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



SMOPU

リンク

2022/12/3(Sat) 18:18:17|NO.97439

nennneko5787さんのスクリプトで、前者のスクリプトは正しく動作はしたのですが、後者のスクリプトでは正しく動作しませんでした。
HSPが落ちます。



ONION software Copyright 1997-2023(c) All rights reserved.