node-voicevox-engine icon indicating copy to clipboard operation
node-voicevox-engine copied to clipboard

CJS環境で使いたいです

Open mare135 opened this issue 2 years ago • 5 comments

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

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

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

mare135 avatar Sep 11 '22 16:09 mare135

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

y-chan avatar Sep 21 '22 15:09 y-chan

@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/に配置しています。

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

maturu avatar Dec 19 '22 05:12 maturu

@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を用いてビルドしているため、同じバージョンのものが必要です。

よろしくお願いします。

y-chan avatar Dec 23 '22 02:12 y-chan

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

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

原因

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

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

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

  • https://github.com/y-chan/voicevox_discord_tts_bot

解決

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)

備考

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

maturu avatar Dec 27 '22 04:12 maturu

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

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

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

y-chan avatar Dec 29 '22 09:12 y-chan