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

Update README #24

Merged
merged 32 commits into from
May 22, 2024
Merged
Changes from 3 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6c1ca52
add lead paragraph
femshima May 19, 2024
6050b36
add "discord bot"
femshima May 20, 2024
fbb9515
install and usage
cm-ayf May 21, 2024
c862396
typo in README
cm-ayf May 22, 2024
77846d0
リポジトリ
cm-ayf May 22, 2024
ec2bc04
better install procedure
cm-ayf May 22, 2024
b1fb94f
better folder handling
cm-ayf May 22, 2024
bf6454d
してください
cm-ayf May 22, 2024
f577518
remove cross compilation settings
cm-ayf May 22, 2024
e3b9dc4
better explanation on streaming synthesis
cm-ayf May 22, 2024
69d6f57
explanation on streaming synthesis
cm-ayf May 22, 2024
bd1312c
better explanation on model exampleness
cm-ayf May 22, 2024
71506f9
annotation on jbonsai models
cm-ayf May 22, 2024
b66e8e4
想定して
cm-ayf May 22, 2024
bcd651a
this library
cm-ayf May 22, 2024
3a30de2
日本語
cm-ayf May 22, 2024
bfea10b
fix
cm-ayf May 22, 2024
688372c
better usage
cm-ayf May 22, 2024
69d5dd8
declare to change version in readme every time
cm-ayf May 22, 2024
bbeff56
latest release
cm-ayf May 22, 2024
ed5e780
eliminate inconsistent code span
cm-ayf May 22, 2024
1c43a5e
clarify return type
cm-ayf May 22, 2024
1c69935
restructure into quickstart
cm-ayf May 22, 2024
4541ef6
specify path to extract tars
cm-ayf May 22, 2024
538eebf
specify directory by cwd
cm-ayf May 22, 2024
4463341
add dictionary url
cm-ayf May 22, 2024
32124f8
pin dictionary version
cm-ayf May 22, 2024
06e8aee
eliminate br
cm-ayf May 22, 2024
2f431d3
strange space
cm-ayf May 22, 2024
c96c1e8
not latest
cm-ayf May 22, 2024
c2215fc
swap link
cm-ayf May 22, 2024
cbf39ca
eliminate space 2
cm-ayf May 22, 2024
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
67 changes: 67 additions & 0 deletions README.md
cm-ayf marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,5 +1,72 @@
# om-syrinx

om-syrinx(読み方:おーむ・しーりんくす)は,Discordの読み上げボット「[om](https://github.com/discordjs-japan/om)」のために作られた,音声合成ライブラリです.

実際のテキスト処理と音声合成はそれぞれ「[jpreprocess](https://crates.io/crates/jpreprocess)」と「[jbonsai](https://crates.io/crates/jbonsai)」が担っています.このリポジトリはこれらとNode.jsとのバインディングに加え,スレッド管理,バッファリング,opusへのエンコード機能を提供します.
cm-ayf marked this conversation as resolved.
Show resolved Hide resolved

## インストール

### ライブラリ本体

1. `package.json`の`dependencies`に以下を追加します:
```
"@discordjs-japan/om-syrinx": "github:discordjs-japan/om-syrinx#v0.3.0"
```
ただし,バージョンは適宜変更してください.
2. `npm install`を実行します.

### jpreprocess用の辞書

1. [`jperprocess`のリリース](https://github.com/jpreprocess/jpreprocess/releases)から最新の辞書 (`naist-jdic-jpreprocess.tar.gz`) をダウンロードします.
1. `tar xz`等で展開して,`naist-jdic`フォルダができることを確認します.

### jbonsai用のモデル

ここでは,[`htsvoice-tohoku-f01`](https://github.com/icn-lab/htsvoice-tohoku-f01)をダウンロードします.`htsvoice-tohoku-f01`は,4種類の声色のモデルを含むレポジトリです.他のモデルを利用することもできます.
cm-ayf marked this conversation as resolved.
Show resolved Hide resolved

1. `htsvoice-tohoku-f01`の`master`ブランチ (<https://github.com/icn-lab/htsvoice-tohoku-f01/archive/refs/heads/master.tar.gz>) をダウンロードします.
1. `tar xz`等で展開して,`htsvoice-tohoku-f01-master`フォルダができることを確認します.

## 使い方

ここでは,`inputText`から`stream`を生成する例を示します.

```ts
import { Syrinx, EncoderType, type SynthesisOption } from "@discordjs-japan/om-syrinx";

// インスタンスを生成
const syrinx = Syrinx.fromConfig({
dictionary: "naist-jdic",
models: ["htsvoice-tohoku-f01-master/tohoku-f01-neutral.htsvoice"],
encoder: { type: EncoderType.Opus },
});

// 音声を合成
const inputText = "鳴管は、鳥類のもつ発声器官。";
const option: SynthesisOption = {};
const stream = syrinx.synthesize(inputText, option);

// @discordjs/voice で利用
import { createAudioResource, StreamType } from "@discordjs/voice";

const resource = createAudioResource(stream, { inputType: StreamType.Opus });
```

インスタンスを生成する際に必須の設定は以下の通りです:
- `dictionary`:[`jpreprocess`用の辞書](#jpreprocess用の辞書)のフォルダのパス
- `models`:[`jbonsai`用のモデル](#jbonsai用のモデル)の`.htsvoice`ファイルのパスの配列
- `encoder`:エンコード設定.エンコードは,`@discordjs/voice`の`createAudioResource`に渡すことを念頭に行われています.
- `EncoderType.Opus`の場合,オブジェクトモードで,1つのオブジェクトが1つのOpusフレームに対応します.`@discordjs/voice`の`StreamType.Opus`に対応します.
- `EncoderType.Raw`の場合,16ビットPCMデータが流れます.`@discordjs/voice`の`StreamType.Raw`に対応します.

その他の設定については,`EncoderConfig`を参照してください.

音声を合成する際に渡す引数は以下の通りです:
- `inputText`:合成するテキスト
- `option`:合成される音声を調整するオプション.詳しくは,`SnthesisOption`を参照してください.
cm-ayf marked this conversation as resolved.
Show resolved Hide resolved

返り値の`stream`は`Readable`で,`encoder`設定の通りにエンコードされた音声データが流れます.合成はメインスレッドとは別のスレッドで行われます.また,音声は合成された分から合成終了を待たずに取得できます.

## Cross compilation settings

To avoid linker error, write the following to your `~/.cargo/config.toml`
Expand Down