From fdabfc9fae81e56669a1b7a223a8a034ae49f238 Mon Sep 17 00:00:00 2001 From: shigobu Date: Tue, 26 Jul 2022 22:46:27 +0900 Subject: [PATCH 1/3] =?UTF-8?q?rust=E3=81=AEAPI=E3=81=AB=E8=BF=BD=E5=BE=93?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cpp/windows/simple_tts/packages.config | 4 --- example/cpp/windows/simple_tts/simple_tts.cpp | 34 ++++++++++++++++--- example/cpp/windows/simple_tts/simple_tts.h | 5 ++- .../cpp/windows/simple_tts/simple_tts.vcxproj | 15 +------- .../simple_tts/simple_tts.vcxproj.filters | 1 - 5 files changed, 35 insertions(+), 24 deletions(-) delete mode 100644 example/cpp/windows/simple_tts/packages.config diff --git a/example/cpp/windows/simple_tts/packages.config b/example/cpp/windows/simple_tts/packages.config deleted file mode 100644 index 07a94bc06..000000000 --- a/example/cpp/windows/simple_tts/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/example/cpp/windows/simple_tts/simple_tts.cpp b/example/cpp/windows/simple_tts/simple_tts.cpp index 3fd6f2fc4..fb4976512 100644 --- a/example/cpp/windows/simple_tts/simple_tts.cpp +++ b/example/cpp/windows/simple_tts/simple_tts.cpp @@ -14,7 +14,7 @@ #include #include -#include "..\..\..\core\src\core.h" +#include "core.h" #define OPENJTALK_DICT_NAME L"open_jtalk_dic_utf_8-1.11" @@ -28,14 +28,17 @@ int main() { std::wcin >> speak_words; std::wcout << L"coreの初期化中" << std::endl; - initialize(false); + if (!initialize(false, 0, true)) { + std::wcout << L"coreの初期化に失敗しました" << std::endl; + return 0; + } VoicevoxResultCode result = VoicevoxResultCode::VOICEVOX_RESULT_SUCCEED; std::wcout << L"openjtalk辞書の読み込み" << std::endl; result = voicevox_load_openjtalk_dict(GetOpenJTalkDict().c_str()); if (result != VoicevoxResultCode::VOICEVOX_RESULT_SUCCEED) { - std::cout << voicevox_error_result_to_message(result) << std::endl; + OutErrorMessage(result); return 0; } @@ -45,7 +48,7 @@ int main() { uint8_t* output_wav = nullptr; result = voicevox_tts(wide_to_utf8_cppapi(speak_words).c_str(), speaker_id, &output_binary_size, &output_wav); if (result != VoicevoxResultCode::VOICEVOX_RESULT_SUCCEED) { - std::cout << voicevox_error_result_to_message(result) << std::endl; + OutErrorMessage(result); return 0; } @@ -107,6 +110,16 @@ std::wstring GetExeDirectory() { return std::wstring(buff); } +/// +/// コンソール画面にエラーメッセージを出力します。 +/// +/// メッセージコード +void OutErrorMessage(VoicevoxResultCode messageCode) { + const char* utf8Str = voicevox_error_result_to_message(messageCode); + std::wstring wideStr = utf8_to_wide_cppapi(utf8Str); + std::wcout << wideStr << std::endl; +} + /// /// ワイド文字列をShift_JISに変換します。 /// @@ -139,3 +152,16 @@ std::string wide_to_utf8_cppapi(std::wstring const& src) { std::wstring_convert> converter; return converter.to_bytes(src); } + +/// +/// UTF8をワイド文字に変換します。 +/// +/// UTF8文字列 +/// ワイド文字列 +/// +/// https://nekko1119.hatenablog.com/entry/2017/01/02/054629 から引用 +/// +std::wstring utf8_to_wide_cppapi(std::string const& src) { + std::wstring_convert> converter; + return converter.from_bytes(src); +} diff --git a/example/cpp/windows/simple_tts/simple_tts.h b/example/cpp/windows/simple_tts/simple_tts.h index 14e2316bb..ff7941854 100644 --- a/example/cpp/windows/simple_tts/simple_tts.h +++ b/example/cpp/windows/simple_tts/simple_tts.h @@ -1,9 +1,12 @@ #pragma once #include +#include "core.h" std::string GetOpenJTalkDict(); std::wstring GetWaveFileName(); std::wstring GetExePath(); std::wstring GetExeDirectory(); +void OutErrorMessage(VoicevoxResultCode messageCode); std::string wide_to_multi_capi(std::wstring const& src); -std::string wide_to_utf8_cppapi(std::wstring const& src); \ No newline at end of file +std::string wide_to_utf8_cppapi(std::wstring const& src); +std::wstring utf8_to_wide_cppapi(std::string const& src); \ No newline at end of file diff --git a/example/cpp/windows/simple_tts/simple_tts.vcxproj b/example/cpp/windows/simple_tts/simple_tts.vcxproj index 1a48276fa..36d3fe45d 100644 --- a/example/cpp/windows/simple_tts/simple_tts.vcxproj +++ b/example/cpp/windows/simple_tts/simple_tts.vcxproj @@ -1,6 +1,5 @@ - Debug @@ -165,18 +164,6 @@ - - - - - - - - - このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。 - - - - + \ No newline at end of file diff --git a/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters b/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters index a96485cbb..6ac705211 100644 --- a/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters +++ b/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters @@ -27,6 +27,5 @@ - \ No newline at end of file From 1709da9bf82bde2cecb6f35c15fa6ff4c885ba1a Mon Sep 17 00:00:00 2001 From: shigobu Date: Tue, 26 Jul 2022 23:27:13 +0900 Subject: [PATCH 2/3] =?UTF-8?q?README.md=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/cpp/windows/README.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/example/cpp/windows/README.md b/example/cpp/windows/README.md index 499880ac5..6a087792a 100644 --- a/example/cpp/windows/README.md +++ b/example/cpp/windows/README.md @@ -10,16 +10,23 @@ Visual Studio Installerを使用しインストールしてください。 ### 環境構築・ビルド方法 -ビルドして実行するには、「core.dll」「core.lib」「Open JTalk辞書フォルダ」が必要です。 以下はDebug x64でビルドする場合です。他の構成・プラットフォーム向けにビルドする場合は、適宜読み替えてください。 -Releasesから「voicevox_core-windows-x64-cpu-{バージョン名}.zip」をダウンロードします。 -zipファイルを展開し、展開されたフォルダに含まれているdllファイルを「core.dll」にリネームします。 出力フォルダを作成するために、一度ビルドします。「windows_example.sln」をVisual Studioで開き、メニューの「ビルド」→「ソリューションのビルド」を押します。 この段階では、ビルドは失敗します。「bin」フォルダと「lib」フォルダが生成されていればOKです。 +Releasesから「voicevox_core-windows-x64-cpu-{バージョン名}.zip」をダウンロードし、展開します。 +展開してできたファイルをそれぞれ下記のフォルダへ配置します。 -「core.lib」を「simple_tts\lib\x64」に配置します。 -「core.dll」を「simple_tts\bin\x64\Debug」に配置します。 +- simple_tts に配置 + - core.h + +- simple_tts\bin\x64\Debug に配置 + - core.dll + - onnxruntime.dll + - onnxruntime_providers_shared.dll + +- simple_tts\lib\x64 に配置 + - core.lib もう一度ビルドします。今度は成功するはずです。失敗した場合は、「core.lib」の場所を確認してください。 @@ -31,7 +38,7 @@ http://open-jtalk.sourceforge.net/ を開き、Dictionary for Open JTalk 欄の 最終的には以下のようなフォルダ構成になっているはずです。 ``` simple_tts -│ packages.config +│ core.h │ simple_tts.cpp │ simple_tts.h │ simple_tts.vcxproj From bffea712bc88df699df41191ff3aa442e653f9fd Mon Sep 17 00:00:00 2001 From: kasamatsu Date: Wed, 27 Jul 2022 09:47:53 +0900 Subject: [PATCH 3/3] =?UTF-8?q?GetOpenJTalkDict=E3=81=AE=E6=88=BB=E3=82=8A?= =?UTF-8?q?=E5=80=A4=E3=82=92UTF-8=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=82=20w?= =?UTF-8?q?ide=5Fto=5Fmulti=5Fcapi=E9=96=A2=E6=95=B0=E3=81=8C=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/cpp/windows/simple_tts/simple_tts.cpp | 22 +------------------ example/cpp/windows/simple_tts/simple_tts.h | 1 - .../simple_tts/simple_tts.vcxproj.filters | 4 ---- 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/example/cpp/windows/simple_tts/simple_tts.cpp b/example/cpp/windows/simple_tts/simple_tts.cpp index fb4976512..48a6c1251 100644 --- a/example/cpp/windows/simple_tts/simple_tts.cpp +++ b/example/cpp/windows/simple_tts/simple_tts.cpp @@ -74,7 +74,7 @@ int main() { std::string GetOpenJTalkDict() { wchar_t buff[MAX_PATH] = {0}; PathCchCombine(buff, MAX_PATH, GetExeDirectory().c_str(), OPENJTALK_DICT_NAME); - std::string retVal = wide_to_multi_capi(buff); + std::string retVal = wide_to_utf8_cppapi(buff); return retVal; } @@ -120,26 +120,6 @@ void OutErrorMessage(VoicevoxResultCode messageCode) { std::wcout << wideStr << std::endl; } -/// -/// ワイド文字列をShift_JISに変換します。 -/// -/// ワイド文字列 -/// Shift_JIS文字列 -/// -/// https://nekko1119.hatenablog.com/entry/2017/01/02/054629 から引用 -/// -std::string wide_to_multi_capi(std::wstring const& src) { - std::size_t converted{}; - std::vector dest(src.size() * sizeof(wchar_t) + 1, '\0'); - if (::_wcstombs_s_l(&converted, dest.data(), dest.size(), src.data(), _TRUNCATE, ::_create_locale(LC_ALL, "jpn")) != - 0) { - throw std::system_error{errno, std::system_category()}; - } - dest.resize(std::char_traits::length(dest.data())); - dest.shrink_to_fit(); - return std::string(dest.begin(), dest.end()); -} - /// /// ワイド文字列をUTF8に変換します。 /// diff --git a/example/cpp/windows/simple_tts/simple_tts.h b/example/cpp/windows/simple_tts/simple_tts.h index ff7941854..d47db255f 100644 --- a/example/cpp/windows/simple_tts/simple_tts.h +++ b/example/cpp/windows/simple_tts/simple_tts.h @@ -7,6 +7,5 @@ std::wstring GetWaveFileName(); std::wstring GetExePath(); std::wstring GetExeDirectory(); void OutErrorMessage(VoicevoxResultCode messageCode); -std::string wide_to_multi_capi(std::wstring const& src); std::string wide_to_utf8_cppapi(std::wstring const& src); std::wstring utf8_to_wide_cppapi(std::string const& src); \ No newline at end of file diff --git a/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters b/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters index 6ac705211..e4e6173bf 100644 --- a/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters +++ b/example/cpp/windows/simple_tts/simple_tts.vcxproj.filters @@ -24,8 +24,4 @@ ヘッダー ファイル - - - - \ No newline at end of file