Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Rust]C++ unix向けのexampleを修正する #197

Merged
merged 13 commits into from
Jul 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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`
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

onnxruntimeの配置はcmakeで行うようにしてあるので削除

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このexampleはビルド済みcoreをダウンロードして使う想定(coreのビルド環境がなくても良い想定)でした。
なのでこのダウンロード工程と、あとcmakeの変更がいりそうです。
(気づくのが遅れてしまって申し訳ないです。。)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coreのビルド環境がなくても良い想定

すっかり失念していました……。確かに元々は C/C++ の開発環境さえあれば試せる感じに作っていました。onnxruntime の自動配置は便利だと思いつつ見ていましたが、ビルド済みcore や onnxruntime をユーザーが取ってくるようにする方が良いかもですね(親切に設計するとしても、プロジェクトのルートにある configure.py を再整備して使ってもらうようにする方が良いかもしれません)。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ダウンロードする必要がある旨記載しました

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

configure.pyの再整備は賛成です!rust化完了後にissue作りたいですね

- バージョン 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