Skip to content

Latest commit

 

History

History
171 lines (119 loc) · 10.8 KB

File metadata and controls

171 lines (119 loc) · 10.8 KB

jbonsai

English

フルコンテキストラベルから音声を合成するライブラリです.JPreprocessと組み合わせると,Open JTalk相当の音声合成ができます.

HTS EngineをRustで書き直したものなので,HTS Engine用の日本語音声モデルを流用できます.

なお,jbonsaiとHTS Engineの出力が完全一致することは保証されていません.現状でも浮動小数点演算の微妙な違いにより,音声波形に違いがあります(整数に変換する際に丸められて結局一致することも多く,品質にはほとんど影響しない範囲です).

目標

  • 可能な限り可読性を改善すること
  • 可読性を損なわない範囲で,
    • 高速であること
    • メモリ消費量が少ないこと
  • Webassembly向けにコンパイル可能であること

使い方

Cargo.tomlに次のように書いてください.

[dependencies]
jbonsai = "0.4.2"

使用例

以下の例は,「盆栽」と読み上げる音声を生成し,speech変数にモノラル, 48000 HzのPCMとして格納します.

// 盆栽,名詞,一般,*,*,*,*,盆栽,ボンサイ,ボンサイ,0/4,C2
let lines = [
    "xx^xx-sil+b=o/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:4_4%0_xx_xx/H:xx_xx/I:xx-xx@xx+xx&xx-xx|xx+xx/J:1_4/K:1+1-4",
    "xx^sil-b+o=N/A:-3+1+4/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "sil^b-o+N=s/A:-3+1+4/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "b^o-N+s=a/A:-2+2+3/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "o^N-s+a=i/A:-1+3+2/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "N^s-a+i=sil/A:-1+3+2/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "s^a-i+sil=xx/A:0+4+1/B:xx-xx_xx/C:02_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:4_4#0_xx@1_1|1_4/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-4@1+1&1-1|1+4/J:xx_xx/K:1+1-4",
    "a^i-sil+xx=xx/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:4_4!0_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:xx_xx%xx_xx_xx/H:1_4/I:xx-xx@xx+xx&xx-xx|xx+xx/J:xx_xx/K:1+1-4",
];
let engine = jbonsai::Engine::load(&[
    // `.htsvoice`モデルファイルへのパスです.
    // 現在はjlabelの制約により,日本語の音声合成モデルのみに対応しています.
    "models/hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice",
])?;
let speech = engine.synthesize(&lines)?;
println!(
    "The synthesized voice has {} samples in total.",
    speech.len()
);

パフォーマンス

HTS Engineとjbonsai v0.4.1の合成速度を比較しました.合成した文は日本国憲法の前文で,約128秒と比較的長い文章です.その結果,jbonsaiは1.6–2.2倍の速度で合成できることを確認しました.なお,合成された音声波形は両者で同一でした.

この性能向上は,jbonsaiで行われた,フィルタ演算等の最適化によるものと考えられます.

また,Intel x86_64では,-C target-cpu=native及びそれに対応するC言語のオプションを使うことで,HTS Engine,jbonsaiともに大幅に性能が向上しました(「結果詳細」参照).

なお,このベンチマークは2026年6月,jbonsai v0.4.1に対し当時の最新版のツールを用いて行われました.より新しいjbonsaiのバージョンや,より新しいrustc,LLVM等では異なった結果となる可能性があります.

加えて,今回は音声全体を合成する時間を計測しましたが,jbonsaiはストリーミング合成にも対応しています.ボイスチャットの代わり等,リアルタイム性が重要な用途でお使いください.

HTS Engineとjbonsaiで,合成にかかる時間を4つのプラットフォーム(Intel Core i5-13500, Apple M2, Raspberry Pi 4, Compute Module 3)で比較した棒グラフ.時間はHTS Engineが100%になるように正規化してある.jbonsaiは安定してHTS Engineよりも高速に動作し,44.8–60.1%の時間で合成できている.

結果詳細
プラットフォーム 使用ライブラリ・最適化 平均実行時間(秒)
Intel Core i5-13500 hts_engine_default 1.8076678
Intel Core i5-13500 hts_engine_native 1.4573735
Intel Core i5-13500 jbonsai_default 0.9408125
Intel Core i5-13500 jbonsai_lto 0.9374387
Intel Core i5-13500 jbonsai_native 0.8016296
Apple M2 hts_engine_default 2.0302433
Apple M2 hts_engine_native 1.9764867
Apple M2 jbonsai_default 0.9127072
Apple M2 jbonsai_lto 0.8880196
Apple M2 jbonsai_native 0.8853029
Raspberry Pi 4 hts_engine_default 14.1488875
Raspberry Pi 4 hts_engine_native 14.1636672
Raspberry Pi 4 jbonsai_default 8.2963959
Raspberry Pi 4 jbonsai_lto 8.3044165
Raspberry Pi 4 jbonsai_native 8.5164151
Compute Module 3 hts_engine_default 32.7140591
Compute Module 3 hts_engine_native 32.7214677
Compute Module 3 jbonsai_default 22.0358614
Compute Module 3 jbonsai_lto 21.9978278
Compute Module 3 jbonsai_native 18.8089429

Core i5-13500 (Manjaro Linux, Clang 22.1.5, Rustc 1.98.0-nightly)

Apple M2 (macOS 26.4.1, Homebrew Clang 22.1.7, Rustc 1.98.0-nightly)

Raspberry Pi 4 (Debian GNU/Linux 13, Clang 22.1.8, Rustc 1.98.0-nightly)

Compute Module 3 (Debian GNU/Linux 13, Clang 22.1.8, Rustc 1.98.0-nightly)

手法

目的・評価方法

このベンチマークでは,音声モデルとしてtohoku-f01-neutralを用いたとき,日本国憲法前文を合成するのにかかる時間を測定した.合成された音声サンプルは約128秒(6,130,960 サンプル, 48 kHz)であった.合成速度の評価の前に,cmpを用い,生の音声出力が両者で完全に一致することを確認している.

評価対象

HTS Engineとjbonsaiの違いに加え,コンパイルオプションによる違いを見るため,以下の5つの組み合わせについて評価を行いました.

  • HTS Engine (Default): LTO最適化を有効化したほかは通常のRelease条件でコンパイル (-DCMAKE_BUILD_TYPE=Release -DCPU_NATIVE=OFF).
  • HTS Engine (Native): LTO最適化を有効化し,かつNativeのCPU向けにコンパイル (-DCPU_NATIVE=ON).
  • jbonsai (Default): Cargoを用い,通常のRelease条件でコンパイルしている.codegen-units=1を指定し,また,LTOは無効化している (lto=off).
  • jbonsai (LTO): Defaultに加え,LTOを有効化 (lto=on)
  • jbonsai (Native): LTOに加え,NativeのCPU向けにコンパイル (-C target-cpu=native)

測定

コンパイルと測定は,共通のシェルスクリプト(コミットID 86441a40b74780afef9aa9901ac5602ffd8788fdhts-bench/bench.sh)を用いて行われた.ただし,いくつかの環境ではこのスクリプトに変更を加えているので,「環境」の項を参照のこと.

測定はhyperfine (v1.19.0 / v1.20.0)を用いて行われた.それぞれ本測定の前に5回のウォームアップを行い,続けて25回実行時間の測定を行った.

環境

測定は4台の異なるコンピュータを用いて行われた.それぞれのOS等の制約に合わせるため,後述するように測定スクリプトを一部変更している.

環境 CPUアーキテクチャ OS コンパイラ・リンカ Power & Governor Tuning
Intel Core i5-13500
(14 Cores / 20 Threads)
x86_64 Manjaro Linux Clang 22.1.5
Rustc 1.98.0-nightly (f428d123a 2026-06-19)
LLD 22.1.5
PL2 power limit capped at 65W via sysfs;
powersave scaling governor
Apple M2
(8 Physical Cores)
arm64 macOS 26.4.1 Homebrew Clang 22.1.7
Rustc 1.98.0-nightly (f428d123a 2026-06-19)
Homebrew LLD 22.1.7
N/A (OS-managed)
Raspberry Pi 4
(Cortex-A72, 4 Cores)
aarch64 Debian GNU/Linux 13 (trixie) Clang 22.1.8
Rustc 1.98.0-nightly (1f087276b 2026-06-13)
LLD 22
ondemand scaling governor
Compute Module 3
(Cortex-A53, 4 Cores)
aarch64 Debian GNU/Linux 13 (trixie) Clang 22.1.8
Rustc 1.98.0-nightly (1f087276b 2026-06-13)
LLD 22
ondemand scaling governor

測定スクリプトの変更について

  • Intel Core i5-13500: Rustのコンパイルでローカルのリンカを用いるよう,-fuse-ld=lld-22から-fuse-ld=lldに変更している.

  • Apple M2 (macOS): システム情報の取得を,Linux向けのコマンドからMacのコマンドに変更している (sysctl, vm_stat, sw_vers).また,LTOを有効化した際でもコンパイルが通るようにするため,Cargoのコンパイルオプションを一部変更している.

Copyright

このソフトウェアは以下のコードを使用しています.

  • hts_engine API.
    • Copyright (c) 2001-2014 Nagoya Institute of Technology Department of Computer Science
    • Copyright (c) 2001-2008 Tokyo Institute of Technology Interdisciplinary Graduate School of Science and Engineering

ライセンス

BSD-3-Clause