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 7 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
33 changes: 33 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,38 @@ 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
qwerty2501 marked this conversation as resolved.
Show resolved Hide resolved
- 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
- 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
33 changes: 21 additions & 12 deletions example/cpp/unix/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,28 @@ cmake_minimum_required(VERSION 3.16)

project(SimpleTTS)

execute_process(COMMAND cargo build --release WORKING_DIRECTORY ../../../)
add_executable(simple_tts simple_tts.cpp)

find_library(
CORE_LIB
NAMES core libcore
HINTS "${CMAKE_SOURCE_DIR}"
NO_DEFAULT_PATH
set_property(TARGET simple_tts PROPERTY CXX_STANDARD 11)
target_include_directories(simple_tts PRIVATE ../../../target)
file(
GLOB
ONNXRUNTIME_SHARED_LIB_DIR
../../../target/release/build/onnxruntime-sys-*/out/onnxruntime_*/onnxruntime-linux-*/lib
)

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
${ONNXRUNTIME_SHARED_LIB_DIR}/libonnxruntime.so.*
${ONNXRUNTIME_SHARED_LIB_DjR}/libonnxruntime.*.dylib)

target_link_libraries(simple_tts ${CORE_LIB})
set_property(TARGET simple_tts PROPERTY CXX_STANDARD 11)
set(CORE_LIB_DIR ../../../target/release)
file(GLOB CORE_LIB ${CORE_LIB_DIR}/*core*)
target_link_directories(simple_tts PRIVATE ${CORE_LIB_DIR}
${ONNXRUNTIME_SHARED_LIB_DIR})
target_link_libraries(simple_tts core)

add_custom_command(
TARGET simple_tts
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${ONNXRUNTIME_SHARED_LIB} ${CORE_LIB}
$<TARGET_FILE_DIR:simple_tts>)
22 changes: 1 addition & 21 deletions example/cpp/unix/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,8 @@

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作りたいですね

- Open JTalk の辞書(配布ページ: http://open-jtalk.sourceforge.net/ )
- 配布ページの "Dictionary for Open JTalk" 欄にある "Binary Package (UTF-8)" からダウンロードしてください
- 解凍してできた `open_jtalk_dic_utf_8-1.11` フォルダをそのままこのディレクトリに配置してください
Expand All @@ -22,14 +12,10 @@ voicevox_core ライブラリを C++ から使用するサンプルコード (`s

```
CMakeLists.txt
libcore.so または libcore.dylib
libonnxruntime.so.1.10.0 または libonnxruntime.1.10.0.dylib
open_jtalk_dic_utf_8-1.11
simple_tts.cpp
```



## ビルド

以下のコマンドを実行すると、`build` ディレクトリが作成され、ビルド産物がその中に生成されます:
Expand All @@ -39,17 +25,12 @@ cmake -S . -B build
cmake --build build
```



## 実行

`build` ディレクトリ以下にできた実行ファイル (`simple_tts`) をこのディレクトリにコピーしてから実行します:

```bash
cp build/simple_tts .

# ./simple_tts <読み上げさせたい文章>
./simple_tts これはテストです
LD_LIBRARY_PATH=./build:$LD_LIBRARY_PATH build/simple_tts これはテストです
```

正常に実行されれば `audio.wav` が生成されます。以下のコマンドですぐに聞くことができます:
Expand All @@ -61,4 +42,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