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

CJS環境で使いたいです #6

Open
mare135 opened this issue Sep 11, 2022 · 5 comments
Open

CJS環境で使いたいです #6

mare135 opened this issue Sep 11, 2022 · 5 comments

Comments

@mare135
Copy link

mare135 commented Sep 11, 2022

お世話になっております。

DiscordのTTSボットの作成のため、このライブラリーを利用しようとしてますが、
CJS環境ではEngineクラスの初期化からエラーがでて、できません。
こちらを参考しましたが、
どうしてもCJS環境では適応できませんでした。

このライブラリーをCJS環境でも使えるようにお願いできますでしょうか。

@y-chan
Copy link
Owner

y-chan commented Sep 21, 2022

初めまして、ライブラリをご利用いただきありがとうございます。
当方では問題なく利用できているのですが、どういったエラーが出るのか詳細をいただけると幸いです。

@maturu
Copy link

maturu commented Dec 19, 2022

@y-chan はじめまして、こちらのライブラリをcloneしてexampleを実行したら、上記issueコメントと同様のエラーが発生いたしました。以下エラー表記です。

root@133d80861b4a:/node-voicevox-engine# LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/node-voicevox-engine/onnxruntime/lib/" yarn example
yarn run v1.22.19
$ ts-node -r tsconfig-paths/register example/index.ts

/node-voicevox-engine/index.js:35
        this.addon = new addon(__dirname + '/open_jtalk_dic_utf_8-1.11/', __dirname + '/default.csv', user_dict_root, __dirname + '/' + coreFilePath, useGpu);
                     ^
Error: failed to load core library
    at new Engine (/node-voicevox-engine/index.js:35:22)
    at Object.<anonymous> (/node-voicevox-engine/example/index.ts:5:16)
    at Module._compile (node:internal/modules/cjs/loader:1218:14)
    at Module.m._compile (/node-voicevox-engine/node_modules/ts-node/src/index.ts:1310:23)
    at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
    at Object.require.extensions.<computed> [as .ts] (/node-voicevox-engine/node_modules/ts-node/src/index.ts:1313:12)
    at Module.load (node:internal/modules/cjs/loader:1081:32)
    at Function.Module._load (node:internal/modules/cjs/loader:922:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:82:12)
    at main (/node-voicevox-engine/node_modules/ts-node/src/bin.ts:331:12)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

環境変数が上手く設定できていないのか、原因がよくわかっていません。
VOICEVOX Core/node-voicevox-engine/libcore.soに配置し、Onnx Runtime/node-voicevox-engine/onnxruntime/に配置しています。

助言等いただけると助かります!

@y-chan
Copy link
Owner

y-chan commented Dec 23, 2022

@maturu ライブラリの利用を検討いただき、ありがとうございます。
いくつか確認させてください。

  1. example/index.ts の中にある core.dll の部分はご自身の環境向けに書き換えられましたか?関連して、GPUモードの引数はfalseになっていますか?(GPUを利用したい場合、必要なライブラリが増えるので、とりあえずの動作確認はCPUで行ってください)
  2. 使用したいVOICEVOX Coreのバージョンをお教えください。現状0.12以上でしか動作しないはずです。
  3. ONNX Runtimeのバージョンをお教えください。VOICEVOX Core 0.12.x/0.13.xはONNX Runtime 1.10.0を用いてビルドしているため、同じバージョンのものが必要です。

よろしくお願いします。

@maturu
Copy link

maturu commented Dec 27, 2022

@y-chan ご返信ありがとうございます。上記の問題はこちらで解決できました。
うまくライブラリが動作し、非常に素晴らしいものだと感動いたしました。

同様の問題が発生している方がいるようなので、貢献のためエラーの解決フローを記載しておきます。

原因

コアライブラリが必要としている依存ファイルの読み込みに失敗しており、
エラー内容の通りコアライブラリ自体の読み込みエラーになっていた。
つまり、環境変数がうまく設定できていなかったのが原因でした。
これだけ見ればあるあるなミスですが、なぜこのミスをしたのかというと主に以下の要因があります。

  • コアライブラリ最新バージョンはOnnx Runtimeを使用していたこと
  • コアライブラリ旧バージョンはPytorchを使用していたこと

コアライブラリの旧バージョンを何故使用したのかというと、今回のエラーが発生した段階でコアライブラリの最新バージョンに本ライブラリが対応できてないのかと勝手に推測し、コアライブラリのバージョンがまだ9系の頃に本ライブラリが活用されていた事例を参考にしたからでした。

解決

lddコマンドを使用してライブラリの依存関係を調査して、コアライブラリの各種バージョンに必要なファイルが表示されるので、これに対応したものをダウンロードしてきて環境変数を設定しておけばうまく動作いたします。

$ ldd /voicevox_core/libcore.so
        linux-vdso.so.1 (0x00007fff1e9a1000)
        libonnxruntime.so.1.10.0 => not found
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1ef6495000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1ef6351000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1ef6337000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1ef6162000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1f19665000)

$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/onnxruntime/lib/"

結論

docker環境でlinux内で動かしています。
(fishを使っているのでbashやzshの方は少しコマンドが違います)

fish

$ git clone [email protected]:y-chan/node-voicevox-engine.git
$ cd node-voicevox-engine
$ docker pull node:latest
$ docker run -it -v (pwd):/(basename (pwd)) node:latest /bin/bash

docker /bin/bash

$ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.13.2/voicevox_core-linux-x64-cpu-0.13.2.zip
$ unzip voicevox_core-linux-x64-cpu-0.13.2.zip
$ mv voicevox_core-linux-x64-cpu-0.13.2/ voicevox_core/
$ wget https://github.com/microsoft/onnxruntime/releases/download/v1.10.0/onnxruntime-linux-x64-1.10.0.tgz
$ tar -xfz onnxruntime-linux-x64-1.10.0.tgz
$ mv onnxruntime-linux-x64-1.10.0/ onnxruntime/
$ cd node-voicevox-engine/
$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/onnxruntime/lib/"
$ export VOICEVOX_CORE="/voicevox_core/libcore.so"
$ yarn install
$ yarn example

example/index.ts

import * as fs from 'fs'

import Engine from '@/index'

const engine = new Engine(process.env.VOICEVOX_CORE as string, false)
const speaker_id = 0
const word_uuid = engine.add_user_dict_word(
  'DeepLearning',
  'ディープラーニング',
  4
)
console.log(word_uuid)
console.log(engine.get_user_dict_words())
const query = engine.audio_query('DeepLearningをしています', speaker_id)
console.log(JSON.stringify(query, null, 2))
engine.delete_user_dict_word(word_uuid)

const wave_buf = engine.synthesis(query, speaker_id)

fs.writeFileSync('hello.wav', wave_buf)

備考

本ライブラリのバージョンとコアライブラリのバージョンなどの対応表などをドキュメントに記載すれば、
より同じような問題は防げるような気がします。

@y-chan
Copy link
Owner

y-chan commented Dec 29, 2022

@maturu 解決したようで良かったです...!

本ライブラリのバージョンとコアライブラリのバージョンなどの対応表などをドキュメントに記載すれば

私の不手際でドキュメント整備まで行き届いていなことをお詫びします。
近いうちに整備するようにしたいと思います...!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants