Skip to content

Commit

Permalink
[Rust]C++ unix向けのexampleを修正する (VOICEVOX#197)
Browse files Browse the repository at this point in the history
* C++ unix向けのexampleを修正する

* CIでのbuildチェックを追加した

* deployのfile copyに合わせてコピーするファイル対象を変更した

* 余分な変数を削除

* 消してしまっていた CXX_STANDARDを復活

* CIにrust toolchain instlalを追加

* macのexample build patternを一旦コメントアウト

* Update .github/workflows/test.yml

Co-authored-by: Hiroshiba <[email protected]>

* exampleをダウンロード前提にして実行するように変更

* CIのbuildをちゃんと動くように修正

* file配置の説明を記載

* rpathの設定がされてればLD_LIBRARY_PATHの設定は不要になったため

* 表記揺れの修正

Co-authored-by: Hiroshiba <[email protected]>
Co-authored-by: Gray Suitcase <[email protected]>
  • Loading branch information
3 people authored Jul 24, 2022
1 parent 8df0774 commit 55de65f
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 33 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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/[email protected]
- 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
2 changes: 2 additions & 0 deletions example/cpp/unix/.gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# libraries
*.dylib
*.so
*.so.*
core.h

# OpenJTalk-dictionary's dir
open_jtalk_dic_utf_8-*
Expand Down
18 changes: 5 additions & 13 deletions example/cpp/unix/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
22 changes: 6 additions & 16 deletions example/cpp/unix/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` フォルダをそのままこのディレクトリに配置してください
Expand All @@ -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` ディレクトリが作成され、ビルド産物がその中に生成されます:
Expand All @@ -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 これはテストです
```
Expand All @@ -61,4 +52,3 @@ aplay audio.wav
# macOS の場合
afplay audio.wav
```

10 changes: 6 additions & 4 deletions example/cpp/unix/simple_tts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <iostream>
#include <string>

#include "../../../core/src/core.h"
#include "core.h"

#define OUTPUT_WAV_NAME "audio.wav"

Expand All @@ -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;
}
Expand All @@ -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;
Expand All @@ -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<const char*>(output_wav), output_binary_size);
wav_file.write(reinterpret_cast<const char *>(output_wav),
output_binary_size);
voicevox_wav_free(output_wav);

std::cout << "音声ファイル保存完了 (" << OUTPUT_WAV_NAME << ")" << std::endl;
Expand Down

0 comments on commit 55de65f

Please sign in to comment.