Git Product home page Git Product logo

voicevox_core's Introduction

VOICEVOX

releases build test Discord

VOICEVOX のエディターです。

(エンジンは VOICEVOX ENGINE 、 コアは VOICEVOX CORE 、 全体構成は こちら に詳細があります。)

ユーザーの方へ

こちらは開発用のページになります。利用方法に関してはVOICEVOX 公式サイト をご覧ください。

プロジェクトに貢献したいと考えている方へ

VOICEVOXプロジェクトは興味ある方の参画を歓迎しています。 貢献手順について説明したガイドをご用意しております。

貢献というとプログラム作成と思われがちですが、ドキュメント執筆、テスト生成、改善提案への議論参加など様々な参加方法があります。 初心者歓迎タスクもありますので、皆様のご参加をお待ちしております。

VOICEVOX のエディタは Electron・TypeScript・Vue・Vuex などが活用されており、全体構成がわかりにくくなっています。
コードの歩き方で構成を紹介しているので、開発の一助になれば幸いです。

Issue を解決するプルリクエストを作成される際は、別の方と同じ Issue に取り組むことを避けるため、 Issue 側で取り組み始めたことを伝えるか、最初に Draft プルリクエストを作成してください。

VOICEVOX 非公式 Discord サーバーにて、開発の議論や雑談を行っています。気軽にご参加ください。

デザインガイドライン

UX・UI デザインの方針をご参照ください。

環境構築

.node-version に記載されているバージョンの Node.js をインストールしてください。
Node.js の管理ツール(nvsVoltaなど)を利用すると簡単にインストールでき、Node.js の自動切り替えもできます。

Node.js をインストール後、このリポジトリ を Fork して git clone し、次のコマンドを実行してください。

npm ci

実行

エンジンの準備

.env.productionをコピーして.envを作成し、VITE_DEFAULT_ENGINE_INFOS内のexecutionFilePath製品版 VOICEVOX 内のvv-engine/run.exeを指定すれば動きます。

Windows でインストール先を変更していない場合はC:/Users/(ユーザー名)/AppData/Local/Programs/VOICEVOX/vv-engine/run.exeを指定してください。
パスの区切り文字は\ではなく/なのでご注意ください。

macOS 向けのVOICEVOX.appを利用している場合は/path/to/VOICEVOX.app/Resources/MacOS/vv-engine/runを指定してください。

Linux の場合は、Releasesから入手できる tar.gz 版に含まれるvv-engine/runコマンドを指定してください。 AppImage 版の場合は$ /path/to/VOICEVOX.AppImage --appimage-mountでファイルシステムをマウントできます。

VOICEVOX エディタの実行とは別にエンジン API のサーバを立てている場合はexecutionFilePathを指定する必要はありませんが、 代わりにexecutionEnabledfalseにしてください。 これは製品版 VOICEVOX を起動している場合もあてはまります。

エンジン API の宛先エンドポイントを変更する場合はVITE_DEFAULT_ENGINE_INFOS内のhostを変更してください。

Electron の実行

# 開発しやすい環境で実行
npm run electron:serve

# ビルド時に近い環境で実行
npm run electron:serve -- --mode production

音声合成エンジンのリポジトリはこちらです https://github.com/VOICEVOX/voicevox_engine

Storybook の実行

Storybook を使ってコンポーネントを開発することができます。

npm run storybook

ブラウザ版の実行(開発中)

別途音声合成エンジンを起動し、以下を実行して表示された localhost へアクセスします。

npm run browser:serve

また、main ブランチのビルド結果がこちらにデプロイされています https://voicevox-browser-dev.netlify.app/
今はローカル PC 上で音声合成エンジンを起動する必要があります。

ビルド

npm run electron:build

Github Actions でビルド

fork したリポジトリで Actions を ON にし、workflow_dispatch でbuild.ymlを起動すればビルドできます。 成果物は Release にアップロードされます。

テスト

単体テスト

npm run test:unit
npm run test-watch:unit # 監視モード
npm run test:unit -- --update # スナップショットの更新

コンポーネントのテスト

Storybook を使ってコンポーネントのテストを行います。

npm run storybook # 先に Storybook を起動
npm run test:storybook
npm run test-watch:storybook # 監視モード

ブラウザ End to End テスト

Electron の機能が不要な、UI や音声合成などの End to End テストを実行します。

Note 一部のエンジンの設定を書き換えるテストは、CI(Github Actions)上でのみ実行されるようになっています。

npm run test:browser-e2e
npm run test-watch:browser-e2e # 監視モード
npm run test-watch:browser-e2e -- --headed # テスト中の UI を表示

Playwright を使用しているためテストパターンを生成することもできます。 ブラウザ版を起動している状態で以下のコマンドを実行してください。

npx playwright codegen http://localhost:5173/  --viewport-size=1024,630

詳細は Playwright ドキュメントの Test generator を参照してください。

スクリーンショットの更新

ブラウザ End to End テストでは Visual Regression Testing を行っています。 現在 VRT テストは Windows のみで行っています。 以下の手順でスクリーンショットを更新できます:

Github Actions で更新する場合
  1. フォークしたリポジトリの設定で GitHub Actions を有効にします。

  2. リポジトリの設定の Actions > General > Workflow permissions で Read and write permissions を選択します。

  3. [update snapshots] という文字列をコミットメッセージに含めてコミットします。

    git commit -m "UIを変更 [update snapshots]"
  4. Github Workflow が完了すると、更新されたスクリーンショットがコミットされます。

ローカルで更新する場合

ローカル PC の OS に対応したもののみが更新されます。

npm run test:browser-e2e -- --update-snapshots

Electron End to End テスト

Electron の機能が必要な、エンジン起動・終了などを含めた End to End テストを実行します。

npm run test:electron-e2e
npm run test-watch:electron-e2e # 監視モード

依存ライブラリのライセンス情報の生成

依存ライブラリのライセンス情報は Github Workflow でのビルド時に自動生成されます。以下のコマンドで生成できます。

# get licenses.json from voicevox_engine as engine_licenses.json

npm run license:generate -- -o voicevox_licenses.json
npm run license:merge -- -o public/licenses.json -i engine_licenses.json -i voicevox_licenses.json

コードフォーマット

コードのフォーマットを整えます。プルリクエストを送る前に実行してください。

npm run fmt

リント(静的解析)

コードの静的解析を行い、バグを未然に防ぎます。プルリクエストを送る前に実行してください。

npm run lint

タイポチェック

typos を使ってタイポのチェックを行っています。

npm run typos

でタイポチェックを行えます。 もし誤判定やチェックから除外すべきファイルがあれば 設定ファイルの説明 に従って_typos.tomlを編集してください。

型チェック

TypeScript の型チェックを行います。

npm run typecheck

Markdownlint

Markdown の文法チェックを行います。

npm run markdownlint

Shellcheck

ShellScript の文法チェックを行います。 インストール方法は こちら を参照してください。

shellcheck ./build/*.sh

OpenAPI generator

音声合成エンジンが起動している状態で以下のコマンドを実行してください。

curl http://127.0.0.1:50021/openapi.json >openapi.json

npx openapi-generator-cli generate \
    -i openapi.json \
    -g typescript-fetch \
    -o src/openapi/ \
    --additional-properties "modelPropertyNaming=camelCase,supportsES6=true,withInterfaces=true,typescriptThreePlus=true"

npm run fmt

OpanAPI generator のバージョンアップ

新しいバージョンの確認・インストールは次のコマンドで行えます。

npx openapi-generator-cli version-manager list

VS Code でのデバッグ実行

npm scripts の serveelectron:serve などの開発ビルド下では、ビルドに使用している vite で sourcemap を出力するため、ソースコードと出力されたコードの対応付けが行われます。

.vscode/launch.template.json をコピーして .vscode/launch.json を作成することで、開発ビルドを VS Code から実行し、デバッグを可能にするタスクが有効になります。

ライセンス

LGPL v3 と、ソースコードの公開が不要な別ライセンスのデュアルライセンスです。 別ライセンスを取得したい場合は、ヒホに求めてください。
X アカウント: @hiho_karuta

voicevox_core's People

Contributors

aoirint avatar char5742 avatar cm-ayf avatar eggplants avatar femshima avatar fuziki avatar github-actions[bot] avatar haru3me avatar higumachan avatar hiroshiba avatar hyodakazuaki avatar misogihagi avatar nebocco avatar nekomimimi avatar neruneruna7 avatar oyaki122 avatar pickledchair avatar qryxip avatar qwerty2501 avatar renovate[bot] avatar segu-g avatar sevenc-nanashi avatar shigobu avatar tantan-tanuki avatar tarepan avatar windymelt avatar y-chan avatar yamachu avatar yerrowtail avatar yosshi999 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

voicevox_core's Issues

PythonサンプルはCUDA/CUDNNが必須かどうか調べる

libtorchはGPU+CPU版と、CPUだけ版の2つがあります。
CPUだけ版でも動くかどうか、知りたいです。

その場合は、READMEをCUDA/CUDNNはオプショナルであるように書き換えたり、
CPUだけ版VOICEVOXの作成などができるかもしれません。

ヘッダやバイナリにバージョン情報を埋め込む

内容

恐らく現状core.hや実装にバージョンを返す関数がなく、またpythonモジュールがビルド時にバージョンを埋め込むために参照している/VERSION.txt が更新されずそのままになっている。
DLLとpythonモジュールのバージョン情報は一致している方が良いと思うので、そのあたりの修正方法やVERSION.txtの処置を決めてほしい。

Pros 良くなる点

  • ファイル名のパース以外の方法で、外部からバージョンを参照できるようになる
  • pythonモジュールとDLLとreleaseページのバージョン名の一致

Cons 悪くなる点

  • リリース手順が増える

実現方法

  • pythonモジュール&DLLのビルド時にいずれもVERSION.txtを参照して埋め込む
  • core.hに埋め込み、pythonモジュールはそれを見る

依存ライブラリのライセンスを管理できるようにする

内容

onnx化するにあたって、使用するライブラリが変わるのでライセンス利用情報の書き換えが必要です。
エンジンやソフトウェアではパッケージマネージャがあるので比較的簡単に管理できますが、c++だと難しそうな印象があります。

とりあえずエンジンのCUDAなどと同様にディレクトリ内でライセンス情報を管理するのが良さそうなので、同様の方法で管理したいです。
https://github.com/Hiroshiba/voicevox_engine/tree/df91c55c7223547e71a6aca15b893bccb2950883/docs/licenses

その他

良い方法があれば助言もらえると非常に心強いです。

複数種類のモデルファイルを持てるようにしたい

内容

onnxモデルを複数持てるようにしたいです。

今はyukarin_s.onnxyukarin_sa.onnxdecode.onnxが1つずつある形ですが、これを複数ずつ持てるようにし、話者によってどのモデルの何番のspeaker_idで推論するかを変更可能にしたいです。
(今までは全話者で共通のモデルを用いていましたが、どうしてもモデルサイズが大きくなってしまって推論時間が伸びるので、モデルを分けられるようにしたい)

Pros 良くなる点

柔軟なモデル分割が可能

Cons 悪くなる点

実装が煩雑になる

実現方法

とりあえずonnxの個数分だけSessionを作る形が良いかなと考えています。
毎回onnxモデルをloadする方法も考えられますが、話者を切り替えるたびに時間がかかるようになるので避けた方が使いやすいと思いました。

簡単に作れるかなと思って実装を試していたのですが、Sessionをvectorにしたあとpush_backしようとするとcore/src/core.cpp: error: use of deleted function ‘Ort::Session& Ort::Session::operator=(const Ort::Session&)
というコンパイルエラーが出てコンパイルできませんでした。
C++力のある方におまかせしたいかもです。。

その他

話者ごとにどのモデルで推論するか指定が必要ですが、これは{speaker_id: [モデル番号, そのモデルでのspeaker_idの番号]}のMapを持っておき、そのMapにあるspeaker_idであればそれに従ってルーティングし、なければ0番目のモデルで推論するようにするのが設定が楽で良いのかなと思っています。

configure.pyが0.12.0-preview.2以降動作しない

不具合の内容

0.12.0-preview.2 以降ではcore.zipという名前で配布されなくなったため、releases取得時のフィルタリング (

if asset["name"] == "core.zip":
) やunzip処理が上手く動作しない

またdefault version (

default="0.10.0",
) を最新リリースに追従する必要がある。

現象・ログ

再現手順

python .\configure.py --voicevox_download_link="https://github.com/VOICEVOX/voicevox_core/releases/download/0.12.0-preview.3/voicevox_core-windows-x64-cpu-0.12.0-preview.3.zip"

※上述のフィルタリングの問題により、--voicevox_version による 0.12.0-preview.3 の指定はできない

期待動作

configureが完了する

OSの種類/ディストリ/バージョン

Windows 10
python 3.10.4

その他

GPU(CUDA・DirectML)版コアが期待通りに動いていない可能性がある

不具合の内容

Twitter における報告(現象・ログを参照)から、DirectML 版コアで yukarin_sa が期待したように動いていない可能性が考えられました。推論結果として異常な数値が返ってくるようです。

現象・ログ

当該現象が報告されたツイート: https://twitter.com/maki07061210/status/1531507875234861056

以下、引用です:

GPU版に限り、イントネーションのバーが
限界突破しており

冥鳴ひまりが下方向にイントネーションが振れております

青山流星は上方向にイントネーションが振れております。

CPU版では特にありませんでした

再現手順

https://github.com/VOICEVOX/voicevox/releases/tag/0.12.0 で配布されているプレビュー版の VOICEVOX(DirectML 版)を起動し、冥鳴ひまり・青山流星の音声合成を試みる。

期待動作

GPU (CUDA, DirectML) 版コアでも CPU 版とほぼ同じ推論結果を得られる。


OSの種類/ディストリ/バージョン

  • Windows (10? 11?)

Linux の GPU 版でも同様の問題が発生するかどうかは、今のところ不明です。


その他

Discord におけるやりとりで、以下のような追加情報が得られています。

1. CUDA 版も挙動がおかしいかもしれない

関連は不明ですが、CUDA 版の挙動が CPU 版と異なるという現象は、以前からあったかもしれないことが指摘されていました。CUDA 版も同様の問題を抱えている可能性があります:

なんかそういえばCUDA使ってたときyukarin_saだけもGPUとCPUで挙動違うみたいなのあった気がする。
その辺りが実はメモリ参照とかがぶっ壊れてて、DIrectML版だと運が良くてこうなったりするのかな。。。

2. 全ての Ort::Session インスタンスに対して GPU オプションが設定されるような変更があった

以前のコアでは、yukarin_sa は CPU で動かすようになっていたはず、という指摘がありました:

あれ、でも今も昔もyukarin_saはCPUで動かすようになってませんでしたっけ
あ、モデル複数読み込みを実装した時に崩壊したっぽい...?
もしかしたら、yukarin_saはDirectMLが壊れてるようにCUDAも壊れてる可能性はありそうではある...?

確認したところ、バージョン 0.11 以前では実際に、decode モデルに対応する Ort::Sessionインスタンスだけに OrtCUDAProviderOptions が設定されていました:

Ort::SessionOptions session_options;
session_options.SetInterOpNumThreads(cpu_num_threads).SetIntraOpNumThreads(cpu_num_threads);
yukarin_s = Ort::Session(env, yukarin_s_model.data(), yukarin_s_model.size(), session_options);
yukarin_sa = Ort::Session(env, yukarin_sa_model.data(), yukarin_sa_model.size(), session_options);
if (use_gpu) {
const OrtCUDAProviderOptions cuda_options;
session_options.AppendExecutionProvider_CUDA(cuda_options);
}
decode = Ort::Session(env, decode_model.data(), decode_model.size(), session_options);

それに対してバージョン 0.12 現在は、Status の初期化時に GPU のオプションが設定され、以降全ての Ort::Session インスタンスに対してこのオプションが適用されています:

session_options.SetInterOpNumThreads(cpu_num_threads).SetIntraOpNumThreads(cpu_num_threads);
if (use_gpu) {
#ifdef DIRECTML
session_options.DisableMemPattern().SetExecutionMode(ExecutionMode::ORT_SEQUENTIAL);
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_DML(session_options, 0));
#else
const OrtCUDAProviderOptions cuda_options;
session_options.AppendExecutionProvider_CUDA(cuda_options);
#endif

今後、元の実装に近づけることも提案されました。これで問題が解決される可能性があります:

今やるなら、common_session_optionsとdecode_session_optionsを用意する感じになりそう...?

バイナリを埋め込んだ製品版ビルドを作る

内容

を含めた製品版releaseを作るタスクです。
ただ、zipファイルの容量がおそらく2GBを超えること、製品版はバイナリ(onnxモデル)が複数あるのに対応する必要があることから、作成まではそれなりの時間がかかってしまうと思います。

Pros 良くなる点

エンジンのビルドコード修正が進められる

Cons 悪くなる点

工数が多い

実現方法

  • 動的ライブラリをzipでまとめるのを解体して個別にreleaseにアップロード
  • #83
  • とりあえずOSS版onnxモデルでビルドしてみる
  • 製品版でビルドする

(僕はC++コードの経験が20時間くらいしか無いのでとても時間がかかり、微妙なコードになると思います・・・。
もしよかったら手伝って頂けるととても心強いです。)

動的ライブラリ(dllとかso)にモデルファイルを同梱させたい

内容

C++だけでTTSできるライブラリを開発中です。
将来的には言語ごとのラッパー、もしくはdllなどで配布することになると思います。

もしdllとして配布する場合は、今の形式だと、dllの他に機械学習済みモデルやmetas.jsonなどのファイルを別ファイルとして同梱する必要があり、若干扱いづらいです。
dllの中にこれらのファイルを埋め込むことができれば、dll単体で動作可能になるのでとても便利そうです。

このissueはファイルを埋め込む方法を探ったり、実装したりすることが目的です。

Pros 良くなる点

動的ライブラリファイル1つをソフトウェアに組み込めば動くようになるので便利

Cons 悪くなる点

実現方法

動的ライブラリにファイルを埋め込むにはどうすれば良いのかが不明です。
最悪、ファイルのバイナリを返す関数をC++コードとして組み込めば実現できそうですが、もっとスマートな方法があれば知りたいです・・・。

OSの種類/ディストリ/バージョン

linux、mac、windows全てで実現できると嬉しい

previewのonnx版コアを使った合成で、開始・終了無音を0.3~0.4秒くらいにすると音声が変になることがある

不具合の内容

エディタのプレビュー版をインストールすると、onnx版のコアを使った生成ができます。
https://github.com/VOICEVOX/voicevox/releases/tag/0.10.preview.4
生成が速くて魅力的なのですが、音声の品質が以前より悪いことが何度かあり、ちょっと気になっています。

例えばですが、「どれもこれも反省しているのだ」と入力し、開始無音を0.4秒に再生すると、最初の「ど」の音がちょっと潰れてしまいます。

voicevox-cpu.2022-01-07.06-33-14.mp4

現象・ログ

前後の無音時間を0.3~0.4秒くらいにすると、音が変になることがある。

再現手順

エディタのバージョン0.10.preview.4にて、あまあまずんだもんで「どれもこれも反省しているのだ」を、開始無音を0.3秒くらいにして再生する

期待動作

以前と同じ音声が再生できる。

その他

差が出ているのがonnx化したからなのか、間違えて違うモデルを利用しているからなのかがわかりません。
ただ、記録を確認した感じ以前と機械学習済みモデルが同じはずなので、同じ結果が返るはずなんだよなぁと感じています。
(実際音素長と音高は完璧に同じ値が出力されています。)

結構微妙な差ではありますが、こういう微妙な品質ダウンがユーザー心情を悪くするのかなと思ったので、真剣に原因を探りたいなと思いました。

libtorch版とonnx版で、decode_forwarderの出力結果って完全に一致するかをちょっと確認したいかもです。 @Yosshi999
無音時間が特定の長さになるとエラーになるのは、onnx化するときに変換が若干不完全な部分があって、例えばconvolutionの受容野の範囲の関係で偶然そうなっているのかなぁなどと考えています。

ref

pythonへのinstallが通らない

環境

voicevox_core 0.5.4
windows 11 / python 3.8.10 / VS2019 (MSVC v142)

現象

readme通り進めていると、python setup.py installで失敗する

(.venv) C:\Users\takana\voicevox\voicevox_core-main\example\python>python setup.py install
Compiling core.pyx because it depends on C:\Users\takana\voicevox\.venv\lib\site-packages\Cython\Includes\libcpp\__init__.pxd.
[1/1] Cythonizing core.pyx
C:\Users\takana\voicevox\.venv\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\Users\takana\voicevox\voicevox_core-main\example\python\core.pxd
  tree = Parsing.p_module(s, pxd, full_module_name)
running install
running build
running build_ext
building 'core' extension
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\takana\voicevox\.venv\lib\site-packages\numpy\core\include -IC:\Users\takana\voicevox\.venv\include -Ic:\users\takana\.pyenv\pyenv-win\versions\3.8.10\include -Ic:\users\takana\.pyenv\pyenv-win\versions\3.8.10\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" /EHsc /Tpcore.cpp /Fobuild\temp.win-amd64-3.8\Release\core.obj
core.cpp
C:\Users\takana\voicevox\voicevox_core-main\example\python\core.h(1): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
C:\Users\takana\voicevox\.venv\lib\site-packages\numpy\core\include\numpy\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
core.cpp(1874): error C2664: 'bool initialize(char *,bool)': 引数 1 を 'const char *' から 'char *' へ変換できません。
core.cpp(1874): note: 変換で修飾子が失われます。
C:\Users\takana\voicevox\voicevox_core-main\example\python\core.h(18): note: 'initialize' の宣言を確認してください
core.cpp(1886): error C3861: 'last_error_message': 識別子が見つかりませんでした
core.cpp(2232): error C3861: 'last_error_message': 識別子が見つかりませんでした
core.cpp(2619): error C3861: 'last_error_message': 識別子が見つかりませんでした
core.cpp(3089): error C3861: 'last_error_message': 識別子が見つかりませんでした
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2

どなたかきちんとインストールできた方いらっしゃったら情報提供お願いします

Apple siliconのMacでサンプルで必要なnumpyのインストールに失敗する

不具合の内容

コアライブラリをビルドしてサンプルを実行しようとするとサンプルのrequirementsのインストールに失敗しました。

エラーを見てみるとnumpyの導入で失敗しているようで、調べるとApple siliconのmacはnumpy 1.21以降が必要そうです。
numpy/numpy#17807 (comment)

直接的な原因はエラーを見る限りここだと思います。
https://github.com/VOICEVOX/pyopenjtalk/blob/07f242eed8e9c2b51e7ee908d46fc789406adefe/pyproject.toml#L6

現象・ログ

pip install -r requirements.txt 
Collecting pyopenjtalk
  Cloning https://github.com/VOICEVOX/pyopenjtalk (to revision 69e5f354634f98098113f9cac5a6ea736443f9c9) to /private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-4juxky96/pyopenjtalk_6e29b64803fc488e950576702878adf8
  Running command git clone --filter=blob:none --quiet https://github.com/VOICEVOX/pyopenjtalk /private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-4juxky96/pyopenjtalk_6e29b64803fc488e950576702878adf8
  Running command git rev-parse -q --verify 'sha^69e5f354634f98098113f9cac5a6ea736443f9c9'
  Running command git fetch -q https://github.com/VOICEVOX/pyopenjtalk 69e5f354634f98098113f9cac5a6ea736443f9c9
  Running command git checkout -q 69e5f354634f98098113f9cac5a6ea736443f9c9
  Resolved https://github.com/VOICEVOX/pyopenjtalk to commit 69e5f354634f98098113f9cac5a6ea736443f9c9
  Running command git submodule update --init --recursive -q
  Installing build dependencies ... error
  error: subprocess-exited-with-error

  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 1
  ╰─> [220 lines of output]
      Collecting wheel
        Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
      Collecting setuptools
        Using cached setuptools-62.2.0-py3-none-any.whl (1.1 MB)
      Collecting cython>=0.21.0
        Using cached Cython-0.29.28-py2.py3-none-any.whl (983 kB)
      Collecting numpy<v1.20.0
        Using cached numpy-1.19.5.zip (7.3 MB)
        Installing build dependencies: started
        Installing build dependencies: finished with status 'done'
        Getting requirements to build wheel: started
        Getting requirements to build wheel: finished with status 'done'
        Preparing metadata (pyproject.toml): started
        Preparing metadata (pyproject.toml): finished with status 'error'
        error: subprocess-exited-with-error

        × Preparing metadata (pyproject.toml) did not run successfully.
        │ exit code: 1
        ╰─> [191 lines of output]
            Running from numpy source directory.
            setup.py:480: UserWarning: Unrecognized setuptools command, proceeding with generating Cython sources and expanding templates
              run_build = parse_setuppy_commands()
            Processing numpy/random/_bounded_integers.pxd.in
            Processing numpy/random/_philox.pyx
            Processing numpy/random/_bounded_integers.pyx.in
            Processing numpy/random/_sfc64.pyx
            Processing numpy/random/_mt19937.pyx
            Processing numpy/random/bit_generator.pyx
            Processing numpy/random/mtrand.pyx
            Processing numpy/random/_generator.pyx
            Processing numpy/random/_pcg64.pyx
            Processing numpy/random/_common.pyx
            Cythonizing sources
            blas_opt_info:
            blas_mkl_info:
            customize UnixCCompiler
              libraries mkl_rt not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            blis_info:
              libraries blis not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            openblas_info:
              libraries openblas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            atlas_3_10_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries tatlas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            atlas_3_10_blas_info:
              libraries satlas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            atlas_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries ptf77blas,ptcblas,atlas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            atlas_blas_info:
              libraries f77blas,cblas,atlas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            accelerate_info:
              libraries accelerate not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
            Library accelerate was not found. Ignoring
              libraries veclib not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
            Library veclib was not found. Ignoring
              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]

              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]

            non-existing path in 'numpy/distutils': 'site.cfg'
            lapack_opt_info:
            lapack_mkl_info:
              libraries mkl_rt not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            openblas_lapack_info:
              libraries openblas not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            openblas_clapack_info:
              libraries openblas,lapack not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            flame_info:
              libraries flame not found in ['/Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE

            atlas_3_10_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries tatlas,tatlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries tatlas,tatlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries tatlas,tatlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
              NOT AVAILABLE

            atlas_3_10_info:
              libraries lapack_atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries satlas,satlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries satlas,satlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries satlas,satlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_3_10_info'>
              NOT AVAILABLE

            atlas_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries ptf77blas,ptcblas,atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_threads_info'>
              NOT AVAILABLE

            atlas_info:
              libraries lapack_atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries f77blas,cblas,atlas not found in /Users/kadoyau/ghq/github.com/VOICEVOX/voicevox_core/env/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries f77blas,cblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries f77blas,cblas,atlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_info'>
              NOT AVAILABLE

              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]

            /private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py:275: UserWarning: Unknown distribution option: 'define_macros'
              warnings.warn(msg)
            running dist_info
            running build_src
            build_src
            building py_modules sources
            creating build
            creating build/src.macosx-12-arm64-3.9
            creating build/src.macosx-12-arm64-3.9/numpy
            creating build/src.macosx-12-arm64-3.9/numpy/distutils
            building library "npymath" sources
            objc[32257]: Class AppleTypeCRetimerRestoreInfoHelper is implemented in both /usr/lib/libauthinstall.dylib (0x1f98cdeb0) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec4f8). One of the two will be used. Which one is undefined.
            objc[32257]: Class AppleTypeCRetimerFirmwareAggregateRequestCreator is implemented in both /usr/lib/libauthinstall.dylib (0x1f98cdf00) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec548). One of the two will be used. Which one is undefined.
            objc[32257]: Class AppleTypeCRetimerFirmwareRequestCreator is implemented in both /usr/lib/libauthinstall.dylib (0x1f98cdf50) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec598). One of the two will be used. Which one is undefined.
            objc[32257]: Class ATCRTRestoreInfoFTABFile is implemented in both /usr/lib/libauthinstall.dylib (0x1f98cdfa0) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec5e8). One of the two will be used. Which one is undefined.
            objc[32257]: Class AppleTypeCRetimerFirmwareCopier is implemented in both /usr/lib/libauthinstall.dylib (0x1f98cdff0) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec638). One of the two will be used. Which one is undefined.
            objc[32257]: Class ATCRTRestoreInfoFTABSubfile is implemented in both /usr/lib/libauthinstall.dylib (0x1f98ce040) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1065ec688). One of the two will be used. Which one is undefined.

            You have not agreed to the Xcode license agreements, please run 'sudo xcodebuild -license' from within a Terminal window to review and agree to the Xcode license agreements.
            Traceback (most recent call last):
              File "/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/tmp8lprocsf_in_process.py", line 363, in <module>
                main()
              File "/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/tmp8lprocsf_in_process.py", line 345, in main
                json_out['return_val'] = hook(**hook_input['kwargs'])
              File "/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/tmp8lprocsf_in_process.py", line 164, in prepare_metadata_for_build_wheel
                return hook(metadata_directory, config_settings)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 157, in prepare_metadata_for_build_wheel
                self.run_setup()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 248, in run_setup
                super(_BuildMetaLegacyBackend,
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 142, in run_setup
                exec(compile(code, __file__, 'exec'), locals())
              File "setup.py", line 508, in <module>
                setup_package()
              File "setup.py", line 500, in setup_package
                setup(**metadata)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/core.py", line 169, in setup
                return old_setup(**new_attr)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/__init__.py", line 165, in setup
                return distutils.core.setup(**attrs)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/core.py", line 148, in setup
                dist.run_commands()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 967, in run_commands
                self.run_command(cmd)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 986, in run_command
                cmd_obj.run()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/command/dist_info.py", line 31, in run
                egg_info.run()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/command/egg_info.py", line 24, in run
                self.run_command("build_src")
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 313, in run_command
                self.distribution.run_command(command)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-build-env-9ahqa98s/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 986, in run_command
                cmd_obj.run()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/command/build_src.py", line 144, in run
                self.build_sources()
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/command/build_src.py", line 155, in build_sources
                self.build_library_sources(*libname_info)
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/command/build_src.py", line 288, in build_library_sources
                sources = self.generate_sources(sources, (lib_name, build_info))
              File "/private/var/folders/c3/dzjxr15911lcmx11vt987c7h0000gn/T/pip-install-q7xwj9sx/numpy_a2aab6efe31647e4b785c4423f27026e/numpy/distutils/command/build_src.py", line 378, in generate_sources
                source = func(extension, build_dir)
              File "numpy/core/setup.py", line 663, in get_mathlib_info
                raise RuntimeError("Broken toolchain: cannot link a simple C program")
            RuntimeError: Broken toolchain: cannot link a simple C program
            [end of output]

        note: This error originates from a subprocess, and is likely not a problem with pip.
      error: metadata-generation-failed

      × Encountered error while generating package metadata.
      ╰─> See above for output.

      note: This is an issue with the package mentioned above, not pip.
      hint: See above for details.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

再現手順

https://github.com/VOICEVOX/voicevox_core#%E3%82%B3%E3%82%A2%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89

期待動作

音が生成される?

OSの種類/ディストリ/バージョン

  • macOS 12.3.1 (チップはM1 Pro)

その他

READMEのサンプルを、製品版のものを実行する用途のコードに変更する

内容

READMEにpythonで実行するサンプルコードが書かれていますが、こちらはmodelsディレクトリにあるダミー用のモデルをつかって音声合成するサンプルコードになっていると思います。
https://github.com/VOICEVOX/voicevox_core/tree/5db2faef093071a534738849c164282f32e83048#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AE%E5%AE%9F%E8%A1%8C

以前のREADMEでは製品版のものを使うコードがサンプルとして書かれていました。
https://github.com/VOICEVOX/voicevox_core/tree/0.9.4#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E5%AE%9F%E8%A1%8C

ユーザーが知りたいのはたぶん以前のものと同じ、製品版を使うサンプルコードだと思うので、変更すると良さそうに感じました。

こちらの方のツイートを見て気づきました。
https://twitter.com/Lapis256/status/1484107704398651398

Pros 良くなる点

製品版の音声合成ライブラリを利用するサンプルが伝わる

Cons 悪くなる点

実現方法

サンプルには製品版を使うサンプルを書いて、別で「ビルド」みたいな項目を作ってそこにcmakeを使う例を書くのが良いかなと思いました。

OSの種類/ディストリ/バージョン

その他

@Oyaki122 @Yosshi999 意見伺えると嬉しいです!

mainブランチでDockerfileがビルドできない

不具合の内容

現象・ログ

Dockerfileがビルドできない

まず、

RUN curl -sLO "`curl -s https://api.github.com/repos/Hiroshiba/voicevox_core/releases/latest \
    | jq -r '.assets[]|select(.name=="core.zip")|.browser_download_url'`"

が失敗します。そこでwget https://github.com/VOICEVOX/voicevox_core/releases/download/0.9.0/core.zipに変更して実行しました。
すると

In file included from /usr/local/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h:1944,
                 from /usr/local/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                 from /usr/local/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                 from core.cpp:654:
/usr/local/lib/python3.9/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
   17 | #warning "Using deprecated NumPy API, disable it with " \
      |  ^~~~~~~
core.cpp: In function ‘PyObject* __pyx_f_4core_finalize(int)’:
core.cpp:2037:3: error: ‘finalize’ was not declared in this scope; did you mean ‘finite’?
 2037 |   finalize();
      |   ^~~~~~~~
      |   finite
error: command '/usr/bin/gcc' failed with exit code 1

と言われビルドできませんでした。

再現手順

git clone ...
cd voicevox_core
docker build -t voicevox_core example/python

期待動作

Dockerfileがビルドされる

OSの種類/ディストリ/バージョン

Linux #60~18.04.1-Ubuntu SMP Thu Sep 9 20:38:09 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

その他

Dockerを使わずにpython3 setup.py installする場合でも動きませんでした。

ONNX版Raspberry Pi向けビルド(armhf)の追加

内容

ONNX版コアのRaspberry Pi向けビルドを追加するPRを出そうかと考えています。
検証を進めるうえで、とりあえずIssue化してみました。

OpenJTalkやAquesTalk Piの代替選択肢のような形でIoTシステム/ハードウェアに組み込む利用例を想定していますが、
それらと比べて音声合成に時間がかかるだろうという課題があります。

Pros 良くなる点

  • Raspberry Pi上でスタンドアロンで音声合成できるようになる
  • IoTユーザを取り込めるかもしれない(利用の幅が広がる)

Cons 悪くなる点

  • Raspberry Pi上での音声合成には計算能力的に時間がかかるため、ユーザがネガティブな印象を受けるかもしれない
  • 自動ビルドに時間がかかり、コアのリリース作業時間が伸びる
  • ONNX Runtimeのビルドスクリプトの保守が必要になる

実現方法

  • ONNX Runtimeのarmhf自動ビルドを作成する
  • libcoreのarmhf自動ビルドを作成する

OSの種類/ディストリ/バージョン

  • Raspberry Pi / Raspberry Pi OS

[RFC] ビルド手順をよりシンプルにする

内容

現在のビルド手順は、不要な共有ライブラリ(たとえばubuntuなのに.soファイルではなく.dylibファイル)をダウンロードする必要があるなど、 きれいではないと感じています。
(UPD) すみません、これはビルドには関係なく、releaseでの配布物のことでした。自分の中で混同していました。すみません。

また、Dockerfileのビルドが不安定 (rel: #44, #76) なこともあり、シンプルなビルドスクリプトが求められていると思います。

mkdir build
cd build
cmake ..

ですべてが完了するスクリプトがほしいと考えています。

イメージとしてはFetchContentなどでONNXRuntimeのCMakeを取り込むことを想定しています。
(UPD) ONNXRuntimeのcmakeを見たところ、外部から取り込むのがかなり大変そうだったので、ビルド済みのものを使うのはかなり理にかなっている気がしてきました。cmakeの代わりにbuild.shみたいなスクリプトを用意するだけでもかなり良くなるのではと思っています。要議論ということでコメント募集しています。

Pros 良くなる点

  • ビルド手順が簡単で、環境によらずやることが同じ。
  • 最小限のファイルからなるので見た目がきれい。デバッグがしやすい。
  • CIでテストしやすい。

Cons 悪くなる点

  • ビルド時間が長くなる
  • ライセンスの関係でビルド済みライブラリの配布がしにくい(詳しくは未調査です)。

実現方法

  • cmakeで-DUSE_EXTERNAL_ONNXRUNTIME等のオプションを設けて、既存のビルドと両立するのがいいかと思います。

その他

開発に協力いたします。

VOICEVOX のコアライブラリのみプロプライエタリになっている理由が知りたい

タイトルの通りですが、VOICEVOX のコアライブラリのみプロプライエタリになっている理由を伺いたいです。

VOICEVOX 本体、そして VOICEVOX ENGINE に関しては、ヒロシバさん自身が初学者もコミットできるような取り組みを積極的に行われていますし、Contribute 大歓迎といった方針に見えます。
VOICEVOX 自体も、公式サイトでも謳われている通り OSS ソフトウェアだという点が、各種メディアでもフィーチャーされている特色の一つのように思います。

その一方で、この VOICEVOX CORE は、コードとして配置されているのはライブラリを利用するためのヘッダファイルとそのサンプルコードのみで、実際の音声合成の推論コードはプロプライエタリです。
実際のコアライブラリ本体は Release にバイナリの状態で公開されていますし、ライセンスにはリバースエンジニアリングの禁止の条項もあります。

仮に OSS になったとしても、私を含め音声合成の専門家以外には Contribute はおろか、処理を把握するのも困難な代物であるのは想像に難くありません。
ただ、コアも OSS にした方がより他のコントリビューターの開発がやりやすくなるのは間違いないでしょうし、この Issue を見ても、実際のコードが公開されていないことが OSS 開発としての障壁になっているように感じられます。
また、現時点での VOICEVOX CORE のバイナリには、Windows x64 と Linux x64 のアーキテクチャ向けのものしか同梱されています。これはつまり、ラズパイなどの ARM デバイスでは現時点で VOICEVOX を実行できない事を意味します。

また、vv_core_inference にて VOICEVOX CORE の推論コードが公開されています。これは libtorch をより軽量な手段で代替するための議論や Contribute を受けられるようにという意図からのようですが、コア全体が公開されていた方がより有益な Contribute を受けやすいでしょうし、プロプライエタリにすることに、敢えて別のモデルを用意しコードの一部分のみを公開するという遠回りな作業が必要になること以上の動機があるようには私には思えません。

VOICEVOX は DTMStation の記事で語られている経緯からして、今後も有料化や販売などの展開はないように思います。
UI 、そしてエンジン部分は OSS でむしろ Contribute を推奨しているのに、コアだけがプロプライエタリになっているのは、いささか不可解に思えます。
前述の通り OSS としての開発に支障すること、アーキテクチャの自由が狭まること、有料化や販売の予定がないであろう事を鑑みると、本来ヒロシバさんに VOICEVOX CORE をプロプライエタリにする動機はないはずです。

明示的にリバースエンジニアリング禁止条項を記載している事、さらに vv_core_interface に『諸事情により「第三者が簡単にモデルの内容を得られない」ようにする必要があります。pythonコードは容易にコードを推測できるので使えません』とあるあたり、ヒロシバさん本人の意向以外の何らかの事情が影響しているのだとは思いますが、そのあたりの経緯を明示していただけないでしょうか。

また、コア部分がプロプライエタリにも関わらず、あたかも音声合成周りのコアを含めた全てがオープンソースであると誤解させるような記述を公式サイトを含めた各媒体でなされているのは個人的にいささか不誠実であるように感じているところですが、そのあたりに関してどうお考えなのかもお伺いできればと思います。


このほか、少し話がそれますが、GitHub でも各所で使われている「製品版 VOICEVOX」とは何を示すものなのかに関してもお伺いしたいです。
「製品版」という表現は、一般的には価格をつけて販売されるものを意味するものだと思います。無料である VOICEVOX の場合、どれが製品版で、どれがそうでないのかが曖昧です。

また、公式サイト に記載されており、また VOICEVOX 内部から閲覧できる利用規約も、OSS である事とは裏腹に、VOICEVOX CORE と同じくリバースエンジニアリングの禁止事項や再配布禁止規定が記載されています。
コアだけならばともかく、OSS である VOICEVOX と VOICEVOX ENGINE にまで適用されるとなるとそれはオープンソースであるとは言えないのではないかと思いますが、それらの曖昧になっている部分を明示していただけないでしょうか。

OSS にしろゴラァと言いたいわけではありませんし公開できない事情があるのかと思いますが、私も最初全て OSS であると誤解していましたし、そのあたりの関係性や意図が非常に気になっています。よろしくお願いいたします。

Expand GPU support with onnx runtime

内容

So we have an onnx model besides the pytorch one, right? As far as I know this means it can run on onnx runtime (ORT), which supports multiple backends like directML and MIGraphX which supports AMD and even Intel GPUs.

Pros 良くなる点

GPU acceleration for more users

Cons 悪くなる点

It needs someone to write the code

実現方法

I don't know much about deep learning frameworks, but following the doc of ORT should be a good start.

その他

Part of the intention of this issue is to ask if the solution is possible, if the answer it true, I'll start digging into the docs.

pythonのexampleをArchLinuxで実行したときにcore.metasでエラー

VOICEVOX ENGINEでの動作ですが、ArchLinuxの場合core.metasがエラーで落ちるという報告があります。

[info] Starting ENGINE in CPU mode
(略)
[info] waiting engine...
(略)
[error] ENGINE: Traceback
(most recent call last):
  File "~/download/VOICEVOX 0.7.3 Linux/run.py", line 427, in <module>
  File "~/download VOICEVOX 0.7.3 Linux/run.py", line 87, in make_synthesis_engine
  File "core.pyx", line 16, in core.metas
  File "core.pyx", line 17, in core.metas
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8f in position 0: invalid start byte

ref: https://github.com/Hiroshiba/voicevox/issues/349

core.metas内で取得した.decode()される前のバイナリを見ると原因がわかるかも・・・?

音声ライブラリの作り方

質問の内容

音声ライブラリを自分の声で作りたいです。

OSの種類/ディストリ/バージョン

windowsだとうれしいですが、何でもいいです。

その他

Pythonはある程度できます。

ビルドできるようなファイル構造に変える

内容

onnx版が実装され、core.cppが誕生しました。 https://github.com/Hiroshiba/voicevox_core/pull/21

今後はよほどの問題がない限り、onnx版のコアを活用していくことになります。
いまは./onnx/ディレクトリ下にビルド環境がありますが、この環境をメインに開発を進めたいです。

となるとCMakeList.txtをrootディレクトリに移動したり、core.hやcore.cppをsrcディレクトリに移動したりなどが必要だと思うのですが、C++の知識に乏しく適切なファイル構造がわかりません。
ぜひよく知っている方の助力をお借りしたいです。

ビルド手順の再考

内容

現状学習済みonnxモデルが手元にある状態でCPU版をpip installすることしかできない。cmakeの実行をsetup.pyから切り離し、手動でやらせた方がいいのかもしれない

他に方法があったら意見ください。

ユースケース

  • 手元に学習済みモデルがあり、CPU/GPU版core.dllをビルドしたのちpython moduleをインストールする
  • 暗号化された公式のcoreモジュールをreleasesからダウンロードし、それに紐づけるようにpython moduleをインストールする
  • (github actionで) core.dllをビルドしつつ、別途unit testを実行する (python setup.py test)
    • 現状python setup.py testをやるとcore.dllのビルドが走り、python moduleがビルドされ、unittestが実行されていて、core.dllのビルドが無駄

EngineのSynthesis Engineに搭載されている機能を一部移行する

内容

現状、dllで提供されるyukarin_s_forwardyukarin_sa_forwarddecode_forwardを利用するには、そこまでのデータの整形を開発者が自ら行う必要があり、ユーザーの最大化につながるであろうサードパーティ連携の妨げになってしまう恐れがあると思います。
そこで、CoreがONNX化・一部オープンソース化された今だからこそ、Engineのsynthesis_engine.pycreate_accent_phrase(OpenJTalkに依存するのでこれは不要かも?)、replace_phoneme_lengthreplace_mora_pitchsynthesisといった、TTSの主要機能系関数をC++もしくはCythonで書き直し、Core(のPythonライブラリ)に同梱することで、より利用しやすい形にできるのではないかと考えます。

若干、以下に挙げるコメントと類似する内容だと思います。
VOICEVOX/voicevox_engine#119 (comment)

CythonとC++の2種類の手法を挙げた理由を記載しておきます。

  • Cythonで書くメリット
    • numpyの資産を利用できる。
    • 既存コードの流用が若干可能
  • C++で書くメリット
    • core.dll/libcore.so/libcore_cpu.dylibに内包できるため、他言語からも利用可能になる
    • 最大限考慮すれば、Synthesis過程を高速化できる可能性がある(どの程度かは不明、numpyを使った方がいい可能性もあり)

Cythonで書くのが一番楽かもしれませんが、個人的には他言語や様々な形で利用可能になるC++で書くのがよいと思います。
(単純に私が過去に作り上げた資産を流用できるというのもあります...w)
Cythonで書いてもdllなどに内包できるかもしれませんが、やり方に関する情報が少ないうえ、coreがnumpyなどのライブラリに依存するような形になる可能性もあり、あまり良くないかと思います。

Pros 良くなる点

Coreの利用の幅が広がり、扱いやすさが向上する

Cons 悪くなる点

最低限の機能で構成されていたCoreが肥大化する
そもそも、 VOICEVOX/voicevox_engine#119 (comment) ではCoreに移植することに関して議論がなされておらず、別ライブラリに分けるような方向性で議論が進んでいます。
しかし、個人的な考えとして、他言語からも読み込みやすいCoreの動的ライブラリ1つとその他のCUDAなどの環境さえ用意すれば大体の環境で実行できるので、良いと思います。

実現方法

C++であれば、私が以前に作ったnode-voicevox-engineのC++部分をベースに、Coreに組み込めると思います。
Cythonであれば、Engineのsynthesis_engine.pyをCythonで書き直すことで対応できると思います。
いずれにしても、提案者は私なので、私が出来る範囲で対応したいと思います。

metas情報を返すようにする

内容

コアの機能の1つに、話者やスタイルの情報をjson形式で返すというものがあります。
https://github.com/Hiroshiba/voicevox_core/blob/f59c6fbe20f248a094afbe717a4c1127ed5ceb96/core.h#L42

こんな感じのjsonです。

[
  {
    "name": "話者1",
    "styles": [{ "name": "ノーマル", "id": 0 }],
    "speaker_uuid": "uuid1",
    "version": "X.X.X"
  },
  {
    "name": "話者2",
    "styles": [{ "name": "ノーマル", "id": 1 }],
    "speaker_uuid": "uuid2",
    "version": "X.X.X"
  }
]

実現方法

initializeで与えられたroot_dirの下にあるmetas.jsonを読み込んで返す、というのが良いと思っています。
https://github.com/Hiroshiba/voicevox_core/blob/f59c6fbe20f248a094afbe717a4c1127ed5ceb96/onnx/core.cpp#L60

こうすることで、ディレクトリの指定を変えるだけで別のコアを読み込めるためです。

yukarin_sの結果が正の値でない場合は微小値を返す

内容

yukarin_sの推論結果が0以下になることがどうしてもあります。
こうなると後続の推論でエラーが出るので、0以下なときは微小値で置き換える処理を入れておくと使いやすいはずです。

実現方法

微小値はとりあえず0.01くらいが良いと思います。

AMD製GPUでも推論可能にする

内容

onnxruntimeに移行したので、AMD製GPUでも推論ができるはずな状況になりました。
たぶんDirectMLを使えば実現可能だと思うのですが、実機がないので試せていません。

もしお持ちの方がいらっしゃったらぜひ実装して試してみて頂けると・・・!

Pros 良くなる点

速くなる

実現方法

READMEにonnxruntimeのダウンロードからビルド方法まであるので、onnxruntimeをDirecML用のにしてAMD製GPUで試す

その他

DirectML版だとnvidia製GPUで推論が遅くなるかも・・・?

ref

CPU版をビルドする

libtorchのGPU版はDLLだけで5.5GBほどありますが、CPU版だけなら1GBほどです。
コアライブラリのビルドをCPU版だけにして別途配布すれば、軽量化できそうです。

Dockerfileがビルドできない

不具合の内容

REAMEにある通り、 git checkout origin/release-0.9してみてもDockerfileがビルドできません。

現象・ログ

$ docker build -t voicevox_core example/python
[+] Building 7.5s (12/20)                                                                                            
 => [internal] load build definition from Dockerfile                                                            0.1s
 => => transferring dockerfile: 1.65kB                                                                          0.0s
 => [internal] load .dockerignore                                                                               0.1s
 => => transferring context: 75B                                                                                0.0s
 => [internal] load metadata for docker.io/library/python:3.9.6-slim                                            5.4s
 => [internal] load build context                                                                               0.0s
 => => transferring context: 34.53kB                                                                            0.0s
 => [build-env  1/10] FROM docker.io/library/python:3.9.6-slim@sha256:4115592fd02679fb3d9e8c513cae33ad3fdd6474  0.0s
 => CACHED [build-env  2/10] RUN apt-get update -yqq &&  apt-get install -yqq     curl     unzip     jq         0.0s
 => CACHED [build-env  3/10] COPY ./* /voicevox/                                                                0.0s
 => CACHED [build-env  4/10] RUN curl -sLO https://download.pytorch.org/libtorch/cu111/libtorch-cxx11-abi-shar  0.0s
 => CACHED [build-env  5/10] RUN unzip -q libtorch*.zip && rm libtorch*.zip                                     0.0s
 => CACHED [build-env  6/10] RUN mv /libtorch/lib /voicevox                                                     0.0s
 => CACHED [build-env  7/10] RUN cd /voicevox/lib &&  ln -s ./libnvToolsExt-24de1d56.so.1 ./libnvToolsExt.so.1  0.0s
 => ERROR [build-env  8/10] RUN curl -sLO "`curl -s https://api.github.com/repos/Hiroshiba/voicevox_core/relea  1.8s
------
 > [build-env  8/10] RUN curl -sLO "`curl -s https://api.github.com/repos/Hiroshiba/voicevox_core/releases/latest     | jq -r '.assets[]|select(.name=="core.zip")|.browser_download_url'`":
#12 1.787 jq: error (at <stdin>:5): Cannot iterate over null (null)
------
executor failed running [/bin/sh -c curl -sLO "`curl -s https://api.github.com/repos/Hiroshiba/voicevox_core/releases/latest     | jq -r '.assets[]|select(.name=="core.zip")|.browser_download_url'`"]: exit code: 23

再現手順

git clone [email protected]:VOICEVOX/voicevox_core.git
git checkout origin/release-0.9
docker build -t voicevox_core example/python

の最小限の手順で再現するかと思います。

OSの種類/ディストリ/バージョン

macOS 12.0.1

build.ymlのonnxruntimeがビルドできない

不具合の内容

linuxのarm用(?)にonnxruntimeの自動ビルドを用意しているのですが、エラーで落ちてしまうっぽいです。

現象・ログ

https://github.com/VOICEVOX/voicevox_core/runs/4641665798?check_suite_focus=true

image

再現手順

forkしてreleaseタグを作ってビルドする

その他

プライベートリポジトリでもビルドしているのですが、通らなくてちょっと困っています。
別途onnxruntimeをビルドするリポジトリを作ってそちらに移してしまってメンテするのもありなのかなと感じました。

python example が正常に動作しない

不具合の内容

README.md に記載されている手順で環境構築・サンプル実行を一通り行うとエラーが発生します。

現象・ログ

PS C:\home\Rust\voicevox_core> python configure.py
Downloading onnxruntime from https://github.com/microsoft/onnxruntime/releases/download/v1.10.0/onnxruntime-win-x64-1.10.0.zip...                                                                                                               Downloading voicevox from https://github.com/VOICEVOX/voicevox_core/releases/download/0.10.0/core.zip...                Please enter number to select which library to use.
0: C:\home\Rust\voicevox_core\release\core_cpu_arm.dll
1: C:\home\Rust\voicevox_core\release\core_cpu_arm64.dll
2: C:\home\Rust\voicevox_core\release\core_cpu_x64.dll
3: C:\home\Rust\voicevox_core\release\core_cpu_x86.dll
4: C:\home\Rust\voicevox_core\release\core_gpu_x64_nvidia.dll
Your choice: 2
Successfully configured!

PS C:\home\Rust\voicevox_core> pip install -r requirements.txt
Requirement already satisfied: numpy in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbzPS

C:\home\Rust\voicevox_core> pip install .
Processing c:\home\rust\voicevox_core
  Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for core, since package 'wheel' is not installed.
Installing collected packages: core
  Attempting uninstall: core
    Found existing installation: core 0.0.1
    Uninstalling core-0.0.1:
      Successfully uninstalled core-0.0.1
  Running setup.py install for core ... done
Successfully installed core-0.0.1

PS C:\home\Rust\voicevox_core> cd .\example\python\

PS C:\home\Rust\voicevox_core\example\python> pip install -r requirements.txt
Collecting pyopenjtalk
  Using cached pyopenjtalk-0.1.4+69e5f35-cp39-cp39-win_amd64.whl
Requirement already satisfied: numpy in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from -r requirements.txt (line 1)) (1.20.2)
Requirement already satisfied: cython in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from -r requirements.txt (line 2)) (0.29.28)
Requirement already satisfied: soundfile in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from -r requirements.txt (line 3)) (0.10.3.post1)
Requirement already satisfied: cffi>=1.0 in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from soundfile->-r requirements.txt (line 3)) (1.15.0)
Requirement already satisfied: six in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from pyopenjtalk->-r requirements.txt (line 4)) (1.16.0)
Requirement already satisfied: pycparser in c:\users\personal\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages (from cffi>=1.0->soundfile->-r requirements.txt (line 3)) (2.21)

PS C:\home\Rust\voicevox_core\example\python> python run.py --speaker_id 1 --text "テスト"
Traceback (most recent call last):
  File "C:\home\Rust\voicevox_core\example\python\run.py", line 50, in <module>
    run(**vars(parser.parse_args()))
  File "C:\home\Rust\voicevox_core\example\python\run.py", line 19, in run
    core.initialize(use_gpu, cpu_num_threads)
  File "C:\Users\Personal\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\core\_core.py", line 56, in initialize
    success = lib.initialize(use_gpu, cpu_num_threads, load_all_models)
OSError: exception: access violation reading 0x0000000000000000

再現手順

リポジトリをクローンし、README.md に記載された手順をなぞる

期待動作

example/run.py が正常に実行される

OSの種類/ディストリ/バージョン

Win 10 Pro 64bit 21H2
python 3.9.13
d62a44b, main branch

その他

ref #137
configure.py でインストールされる voicevox_core のバージョンが 1.10.0 であるため、 API の形式変更による問題が生じているのではないか、という意見をいただきました。(@Yosshi999 さんありがとうございました)

ただし、 configure.py を実行せず onnxruntime, release/ を自分で用意した場合でもエラーが発生します。(読んでいるメモリ位置は異なる)
また configure.py を通して環境構築した際には現れなかった、バージョンが対象外である旨の警告も表示されました。
ort は v1.9.0、release は v0.12.0 を使用して確認しました。

PS C:\home\Rust\voicevox_core\example\python> python run.py --speaker_id 1 --text "これは本当に実行できているんでしょうか?"
The given version [10] is not supported, only version 1 to 9 is supported in this build.
Traceback (most recent call last):
  File "C:\home\Rust\voicevox_core\example\python\run.py", line 50, in <module>
    run(**vars(parser.parse_args()))
  File "C:\home\Rust\voicevox_core\example\python\run.py", line 19, in run
    core.initialize(use_gpu, cpu_num_threads)
  File "C:\Users\Personal\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\core\_core.py", line 56, in initialize
    success = lib.initialize(use_gpu, cpu_num_threads, load_all_models)
OSError: exception: access violation reading 0x0000000000000050

CPUの使用スレッド数を指定できるようにする

内容

ONNX RuntimeがCPU使用率を50%に抑える設定になっているので、それを環境変数を用いて設定できるようにしたいです。

このコメントにて、「Coreは本来デスクトップ版VOICEVOXなどで使われるため、50%の使用制限は適正」とされていたようです。

Pros 良くなる点

合成専用サーバーや、アナウンスなどのリアルタイム性が求められる場面でCPUを効率よく使用することができるようになります。

Cons 悪くなる点

今の所特に思いついていません。

実現方法

コメントにあるように、「モデルのSessionを作成する前に、Ort::SessionOptionsにオプションを設定することでスレッド数の指定ができそう」とのことです。

モデル読み込みをlazyにしたい

内容

で複数モデルを読み込めるようになりました。
initializeが呼ばれたタイミングで全部loadされています。
実際に製品版では複数のモデルを読み込んでいますが、そのせいでinitializeが遅く(とくにmacでは20秒近くかかる)なっています。

全部loadする必要があるユーザーは珍しく、使わないキャラクターのモデルはloadしなくて良いはずです。
なので、必要になったタイミングでモデルをロードできる設計にしたいです。

Pros 良くなる点

起動が早くなる

Cons 悪くなる点

APIを変えないといけないかも

実現方法

2つあると思います。

1つ目が、forwardするタイミングで、modelがloadされていなかったらloadする方法です。
この方法だとAPIは変わりませんが、forwardしたときに初回だけは遅いという副作用が生じます。

2つ目が、model(もしくはspeaker_id)を指定してmodelをloadするAPIと、load済みかを返すAPIを用意し、毎回エンジンなどから実行してもらう方法です。
この方法はモデルをloadするタイミングをアプリ側で制御できます(例えばキャラが選ばれたタイミングからloadし始めるということもできる)が、APIの変更が生じます。

どっちも実装するのもありかも。

その他

そろそろ4期生が現れてくるタイミングです。
更に起動時間が長くなってしまいそうなので、できればそれまでに実装しておきたいです・・・!

埋め込みファイルの数が多いとARMHFでビルドエラーが出る

不具合の内容

埋め込みファイルの数が多いとarmhfビルドがエラーになります。

現象・ログ

実際のビルドログはこちらです https://github.com/Hiroshiba/voicevox_core/runs/6438083012?check_suite_focus=true

一部抜粋してみます。

Run cmake --build . --config Release

...

/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: BFD (GNU Binutils for Ubuntu) 2.30 assertion fail ../../bfd/elf32-arm.c:9509
collect2: error: ld returned 1 exit status
make[2]: *** [core/libcore.so] Error 1
make[1]: *** [core/CMakeFiles/core.dir/all] Error 2
make: *** [all] Error 2
core/CMakeFiles/core.dir/build.make:829: recipe for target 'core/libcore.so' failed
CMakeFiles/Makefile2:115: recipe for target 'core/CMakeFiles/core.dir/all' failed
Makefile:135: recipe for target 'all' failed
Error: Process completed with exit code 2.

再現手順

ブランチはこちらです

  • DECODEなどのモデルを大量にembedする
  • ビルドする
  • エラーが出る

期待動作

エラーが出ずにビルドできる

OSの種類/ディストリ/バージョン

linux armhf

その他

  • モデル埋め込みのプルリクエスト
  • armhf周りのプルリクエスト

新しいキャラクター追加のためにモデルを足したところエラーに遭遇しました。
解決が難しそうであれば、いったんarmhfをビルドから外したいと思います。

DirectML版の動作チェック

内容

DirectML版が実装されました。 #81
いろんなデバイスや環境で問題なく動きそうかをチェックするissueです。
(もしよければご協力ください!)

↑ビルドしました!
https://github.com/VOICEVOX/voicevox_core/releases/tag/0.12.0-preview.0

  • Windows10で動くかチェック
  • Windows11で動くかチェック
  • NVIDIAのGPUで動くかチェック
  • RADEONのGPUで動くかチェック

Github Actionsでビルドする

内容

onnx版が実装され、CMakeLists.txtやcore.cppが誕生しました。 #21
おそらく自動ビルドが可能なので、実現していきたいです。

実現方法

onnx runtimeのインストールが必要になると思います。↓がとても参考になります。
https://github.com/Hiroshiba/voicevox_core/tree/f59c6fbe20f248a094afbe717a4c1127ed5ceb96/onnx

cudaやcudnnのインストールが必要になる場合は↓が参考になると思います。(libtorchを用いる場合のGithub Actionsビルド例です)
https://github.com/Hiroshiba/vv_core_build_check/blob/main/.github/workflows/blank.yml

その他

ONNX Runtimeのバージョンを上げる

内容

題の通り
v1.10.0が出ていて、OSXのuniversalビルドもあるので、あとはnuitka側でエンジンのビルドがuniversalでできるようになれば完全ネイティブ化が目指せると思います。
ONNX版の本リリースをする前にバージョンアップをやっちゃってしまった方がよいのかなと思います(複数のバージョンが混在するのは非常に扱いづらいと思うので)

Pros 良くなる点

Macビルドをuniversalに近づけられる

Cons 悪くなる点

特にないと思う

実現方法

Actionsに記載されているONNX Runtimeのバージョンを上げ、同時にonnxruntime-builderも更新する

Raspberry Pi (arm64) 向けビルドの追加

内容

Releasesにあるarmhf向けの共有ライブラリがarm64のPythonで利用できないので、arm64向けの共有ライブラリも自動ビルドしてリリースしてほしいです。

Pros 良くなる点

  • arm64のRaspberry Pi OSでも動作させられるようになる
  • 64bitに対応する事でRaspberry Piでのパフォーマンスが向上するかもしれない

Cons 悪くなる点

  • #40 でもあるようにリリース作業時間が伸びてしまう

実現方法

  • libcoreのarm64向け自動ビルドを追加する

OSの種類/ディストリ/バージョン

OS: Debian GNU/Linux 11 (bullseye) aarch64
Host: Raspberry Pi 4 Model B Rev 1.2

その他

ONNX Runtimeもarm64向けに自動ビルドしたほうがいいかもしれません。

APIにprefixを付ける、返り値をVoicevoxResultCodeで統一する

内容

API用headerをincludeしたときに宣言済みの名前を汚してしまうので、voicevox_ prefixを付ける形で統一したいです。
また、ついでに返り値をVoicevoxResultCodeで統一することで、last_error_messageをなくしたいです。

これら2つの破壊的変更を適用するのがこのissueの目的です。

Pros 良くなる点

使いやすくなる。

Cons 悪くなる点

APIが変わる破壊的変更なので案内が必要。

その他

での議論結果のまとめをissue化しました。

コアの実装言語を C++ から Rust へ移行する

内容

(以下の記述は必要に応じてアップデートしていきます。改善すべき点があればご指摘ください。)

現在、コアライブラリは C++ で記述されています。C++ は優れた言語ですが、ビルドツールなどを含め現代的でない部分が存在し、それにより開発の難しさを感じることがあります。ここで、開発言語として新たに Rust を採用することによって、開発体験が向上することが期待されるため、Rust による実装への移行を模索する意義があると考えられます。

この Issue では Rust による実装を段階的に進めるに当たって、実装の進め方や方針の議論、進捗の整理等を行うことができればと思います。

Pros 良くなる点

  • 基本的にメモリ安全・型安全になる
  • 非同期処理が書きやすくなる
    • C++20 と比較すると違いがないかも?
  • ビルド・パッケージ管理・テスト等が容易になる

Cons 悪くなる点

  • 学習コストの高い言語であることから、保守のための開発者を安定的に確保できるかどうか未知数な部分がある
    • Rust が言語的にフォーカスしている領域は C++ でも同様に難しい、ということはある
    • 今後の Rust 普及に伴って開発者増が期待できるかもしれない

その他、より詳しい Pros/Cons:
#128 (comment)

実現方法

作業は当面 rust branch で行われる予定です。

考えられる作業一覧:

  • onnuruntime wrapper の実装(既存 wrapper (https://github.com/nbigaouette/onnxruntime-rs) を改造する)
  • 現段階のエンジン側で必要なAPI(TTS機能以外)の実装
    • API 一覧
  • TTS 機能の実装
    • 雑に実装したものが既にある (https://github.com/PickledChair/voicevox-tts-rs) ので、これをベースに実装できそう
      • C++ 実装を参考に実装したもの
      • エラー処理や OpenJTalk とのグルーコード周りが特に雑なので要修正
      • OpenJTalk の wrapper の実装 #162 #165
      • 上記実装は kana_parser を含まないので、新規に実装する必要がある #155
    • API 一覧
      • VoicevoxResultCode
      • voicevox_load_openjtalk_dict #184
      • voicevox_tts
        • 基本機能の実装 #186
        • 疑問文対応 #192
      • voicevox_tts_from_kana #193
      • voicevox_wav_free #186
      • voicevox_error_result_to_message
  • ビルド方法等に関して README を書き直す #202
  • example を書き直す

また、並行して自動ビルド・テストも整備する:

  • CI の整備
    • テスト
      • Ubuntu 18.04 でのテストが落ちる問題の解決
    • リリースビルド #191
    • デプロイ #196

最後に、新しいコアが期待通りに動くか確認して、移行作業完了としたいです(main branch へのマージ後に確認?)。

  • コアの動作確認(特に GPU を期待通りに使えるか)

その他

ビルド可能な最初の貢献は @qwerty2501 さんによって行われています (#126) ありがとうございます!

last_error_messageではなく標準出力にエラーログを流すようにする

内容

エラーが出た後にエラーメッセージをgetする方式にしていますが、エラーログはglobal変数で管理しており、何かと不便です。
実際に使う際、エラーメッセージが見れればOKだと思うので、stderrにエラーログを流す運用に変えるissueになります。

この辺りの内容です

Pros 良くなる点

コードの見通しが立ちやすい

Cons 悪くなる点

実際に利用する際、「エラーメッセージをダイアログに表示する」等ができなくなる?

実現方法

srd:cerr

その他

ライブラリ実行時の標準エラーってキャプチャできるのでしょうか。
別プロセスを作らないと無理・・・?

AMDGPU環境でDirectML版GPU出力を用いた場合に、音割れした音声が出力される

不具合の内容

AMDGPU環境でDirectML版GPU出力を用いた場合に、CPU出力をした場合とは明らかに異なる、音割れした音声が出力される。

現象・ログ

出力結果

compare.mp4

APU内蔵グラフィックスの占有VRAMを512MBから2GBに増やしても結果は同じだった。

再現手順

python configure.py --use_directml --voicevox_version 0.12.0-preview.0
#"Please enter number to select which library to use."ではcore_gpu_x64_directml.dllを選択
pip install -r requirements.txt
pip install .
cd .\example\python\
pip install -r requirements.txt
python run.py --text "あめんぼあかいな。アイウエオ。うきもにこえびもおよいでる。柿の木、栗の木。カキクケコ。きつつきこつこつ、枯れけやき。" --speaker_id 1 --root_dir_path="../../release" --use_gpu

期待動作

--use_gpuオプションを付けた音声と外した音声がほぼ同じに聴こえる

OSの種類/ディストリ/バージョン

  • Windows 11 Home 64bit (build 22572.201)

その他

環境
AMD Ryzen7 4800U + Vega8 + 8GB RAM
Python 3.9.10

VRAMの容量や内蔵グラフィックスであることなどが関係している?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.