diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9af5728f4..4abaf7689 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -59,5 +59,45 @@ jobs: find target/debug/build/onnxruntime-sys-*/out/onnxruntime_*/onnxruntime-*/lib -name onnxruntime.dll -ctime 0 find target/debug/build/onnxruntime-sys-*/out/onnxruntime_*/onnxruntime-*/lib -name onnxruntime.dll -ctime 0 | head -n 1 | xargs -i cp {} target/debug/deps/ - run: cargo test --all-features + + build-unix-cpp-example: + strategy: + fail-fast: false + matrix: + include: + - os: macos-latest + artifact_name: osx-x64-cpu-cpp-shared + - os: ubuntu-latest + artifact_name: linux-x64-cpu-cpp-shared + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: build voicevox_core + run: cargo build + - name: 必要なfileをunix用exampleのディレクトリに移動させる + run: | + cp -v target/core.h example/cpp/unix/ + cp -v target/debug/libcore.{so,dylib} example/cpp/unix/ || true + cp -v target/debug/build/onnxruntime-sys-*/out/onnxruntime_*/onnxruntime-*/lib/libonnxruntime.so.* example/cpp/unix/ || true + cp -v target/debug/build/onnxruntime-sys-*/out/onnxruntime_*/onnxruntime-*/lib/libonnxruntime.*.dylib example/cpp/unix/ || true + + - if: startsWith(matrix.os, 'mac') + uses: jwlawson/actions-setup-cmake@v1.9 + - name: Install build dependencies + if: startsWith(matrix.os, 'ubuntu') + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y cmake + - name: Build + shell: bash + run: | + cd example/cpp/unix + cmake -S . -B build + cmake --build build + env: CARGO_TERM_COLOR: always diff --git a/example/cpp/unix/.gitignore b/example/cpp/unix/.gitignore index c8cf6fb98..c58487cc4 100644 --- a/example/cpp/unix/.gitignore +++ b/example/cpp/unix/.gitignore @@ -1,6 +1,8 @@ # libraries *.dylib *.so +*.so.* +core.h # OpenJTalk-dictionary's dir open_jtalk_dic_utf_8-* diff --git a/example/cpp/unix/CMakeLists.txt b/example/cpp/unix/CMakeLists.txt index df36d33d1..d79b44d4d 100644 --- a/example/cpp/unix/CMakeLists.txt +++ b/example/cpp/unix/CMakeLists.txt @@ -3,18 +3,10 @@ cmake_minimum_required(VERSION 3.16) project(SimpleTTS) add_executable(simple_tts simple_tts.cpp) +set_property(TARGET simple_tts PROPERTY CXX_STANDARD 11) -find_library( - CORE_LIB - NAMES core libcore - HINTS "${CMAKE_SOURCE_DIR}" - NO_DEFAULT_PATH -) - -message(STATUS "CORE_LIB: ${CORE_LIB}") -if(NOT CORE_LIB) - message(FATAL_ERROR "Unable to find VOICEVOX core library") -endif() +file(GLOB ONNXRUNTIME_SHARED_LIB ./libonnxruntime.so.* ./libonnxruntime.*.dylib) +target_link_directories(simple_tts PRIVATE ./) -target_link_libraries(simple_tts ${CORE_LIB}) -set_property(TARGET simple_tts PROPERTY CXX_STANDARD 11) +file(GLOB CORE_LIB ./libcore.so.* ./libcore.*.dylib) +target_link_libraries(simple_tts core) diff --git a/example/cpp/unix/README.md b/example/cpp/unix/README.md index 6211f2729..aecaa5cc6 100644 --- a/example/cpp/unix/README.md +++ b/example/cpp/unix/README.md @@ -2,18 +2,13 @@ voicevox_core ライブラリを C++ から使用するサンプルコード (`simple_tts.cpp`) です。ビルドするために C++ の開発環境(CMake 3.16 以上を含む)が必要です。 - - ## 必要なファイルの準備 本ディレクトリに以下のファイル・フォルダを用意してください(あるいは、以下のファイル・フォルダへのシンボリックリンクでも良いです): -- バージョン 0.12 以降の voicevox_core ライブラリ(配布ページ: https://github.com/VOICEVOX/voicevox_core/releases ) - - Linux の場合:`voicevox_core-linux-{お使いのCPUアーキテクチャ}-cpu-{バージョン}.zip` 内の `libcore.so` - - macOS の場合:`voicevox_core-osx-universal2-cpu-{バージョン}.zip` 内の `libcore.dylib` -- ONNX Runtime v1.10.0 の共有ライブラリ(配布ページ: https://github.com/microsoft/onnxruntime/releases/tag/v1.10.0 ) - - Linux の場合:`onnxruntime-linux-{お使いのCPUアーキテクチャ}-1.10.0.tgz` 内の `lib/libonnxruntime.so.1.10.0` - - macOS の場合:`onnxruntime-osx-universal2-1.10.0.tgz` 内の `lib/libonnxruntime.1.10.0.dylib` +- バージョン 0.12 以降の voicevox_core, onnxruntime ライブラリ(配布ページ: https://github.com/VOICEVOX/voicevox_core/releases ) + - Linux の場合:`voicevox_core-linux-{お使いのCPUアーキテクチャ}-cpu-{バージョン}.zip` 内の `core.h` , `libcore.so` 及び `libonnxruntime.so.{onnxruntimeのバージョン}` + - macOS の場合:`voicevox_core-osx-{お使いのCPUアーキテクチャ}-cpu-{バージョン}.zip` 内の `core.h` , `libcore.dylib` 及び `libonnxruntime.{onnxruntimeのバージョン}.dylib` - Open JTalk の辞書(配布ページ: http://open-jtalk.sourceforge.net/ ) - 配布ページの "Dictionary for Open JTalk" 欄にある "Binary Package (UTF-8)" からダウンロードしてください - 解凍してできた `open_jtalk_dic_utf_8-1.11` フォルダをそのままこのディレクトリに配置してください @@ -23,13 +18,12 @@ voicevox_core ライブラリを C++ から使用するサンプルコード (`s ``` CMakeLists.txt libcore.so または libcore.dylib -libonnxruntime.so.1.10.0 または libonnxruntime.1.10.0.dylib +libonnxruntime.so.{バージョン} または libonnxruntime.{バージョン}.dylib +core.h open_jtalk_dic_utf_8-1.11 simple_tts.cpp ``` - - ## ビルド 以下のコマンドを実行すると、`build` ディレクトリが作成され、ビルド産物がその中に生成されます: @@ -39,15 +33,12 @@ cmake -S . -B build cmake --build build ``` - - ## 実行 `build` ディレクトリ以下にできた実行ファイル (`simple_tts`) をこのディレクトリにコピーしてから実行します: ```bash -cp build/simple_tts . - +cp build/simple_tts ./ # ./simple_tts <読み上げさせたい文章> ./simple_tts これはテストです ``` @@ -61,4 +52,3 @@ aplay audio.wav # macOS の場合 afplay audio.wav ``` - diff --git a/example/cpp/unix/simple_tts.cpp b/example/cpp/unix/simple_tts.cpp index 9c3a3b86e..0e7e39add 100644 --- a/example/cpp/unix/simple_tts.cpp +++ b/example/cpp/unix/simple_tts.cpp @@ -2,7 +2,7 @@ #include #include -#include "../../../core/src/core.h" +#include "core.h" #define OUTPUT_WAV_NAME "audio.wav" @@ -17,7 +17,7 @@ int main(int argc, char *argv[]) { std::cout << "coreの初期化中..." << std::endl; - if (!initialize(false)) { + if (!initialize(false, 0, true)) { std::cout << "coreの初期化に失敗しました" << std::endl; return 1; } @@ -38,7 +38,8 @@ int main(int argc, char *argv[]) { int output_binary_size = 0; uint8_t *output_wav = nullptr; - result = voicevox_tts(text.c_str(), speaker_id, &output_binary_size, &output_wav); + result = + voicevox_tts(text.c_str(), speaker_id, &output_binary_size, &output_wav); if (result != VOICEVOX_RESULT_SUCCEED) { std::cout << voicevox_error_result_to_message(result) << std::endl; return 1; @@ -47,7 +48,8 @@ int main(int argc, char *argv[]) { std::cout << "音声ファイル保存中..." << std::endl; std::ofstream wav_file(OUTPUT_WAV_NAME, std::ios::binary); - wav_file.write(reinterpret_cast(output_wav), output_binary_size); + wav_file.write(reinterpret_cast(output_wav), + output_binary_size); voicevox_wav_free(output_wav); std::cout << "音声ファイル保存完了 (" << OUTPUT_WAV_NAME << ")" << std::endl;