Skip to content

Commit

Permalink
0.10.4をマージ (#320)
Browse files Browse the repository at this point in the history
* to 0.10.preview.2

* ユーザ辞書読み込み時のWarningを修正 (#305)

* to 0.10.0 (#306)

* onnxruntimeを0.10に (#302)

* to 0.10.0

* .

* .

* To 0.10.1 (#311)

* 疑似疑問文化をsynthesis APIの直前に移動 (#310)

* append interrogative mora just before synthesis

* parse_kana should not append interrogative mora

* #310 の追加修正

* update doc

Co-authored-by: Yosshi999 <[email protected]>

* はてなマーク付きアクセント句でバグるのを修正 (#313)

* はてなマーク付きアクセント句でバグるのを修正

* ドキュメント修正

* parse_kanaの修正漏れ

* Enable interrogativeをsynthesisのみにする (#314)

* enable_interrogativeをsynthesisのみにする

* コメント移動

* to 0.10.2

* ライセンス情報を修正 (#317)

* pyopenjtalkを更新 (#319)

* コンフリクト修正ミス

Co-authored-by: takana-v <[email protected]>
Co-authored-by: Yosshi999 <[email protected]>
  • Loading branch information
3 people authored Feb 4, 2022
1 parent 4c71253 commit c7cda72
Show file tree
Hide file tree
Showing 19 changed files with 253 additions and 231 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ on:
env:
IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/voicevox_engine
PYTHON_VERSION: '3.8.10'
VOICEVOX_CORE_VERSION: '0.10.preview.7'
VOICEVOX_CORE_VERSION: '0.10.0'
VOICEVOX_CORE_SOURCE_VERSION: '0.10.0'
VOICEVOX_ENGINE_VERSION: |- # releaseのときはタグが、それ以外はlatestがバージョン名に
${{ github.event.release.tag_name != '' && github.event.release.tag_name || 'latest' }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ on:
env:
IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/voicevox_engine
PYTHON_VERSION: '3.8.10'
VOICEVOX_RESOURCE_VERSION: '0.10.preview.3'
VOICEVOX_CORE_VERSION: '0.10.preview.7'
VOICEVOX_RESOURCE_VERSION: '0.10.0'
VOICEVOX_CORE_VERSION: '0.10.0'
VOICEVOX_ENGINE_VERSION: |- # releaseのときはタグが、それ以外はlatestがバージョン名に
${{ github.event.release.tag_name != '' && github.event.release.tag_name || 'latest' }}
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ RUN <<EOF
rm -rf /var/lib/apt/lists/*
EOF

# assert VOICEVOX_CORE_VERSION >= 0.10.preview.0 (ONNX)
ARG VOICEVOX_CORE_VERSION=0.10.preview.7
# assert VOICEVOX_CORE_VERSION >= 0.10.0 (ONNX)
ARG VOICEVOX_CORE_VERSION=0.10.0
ARG VOICEVOX_CORE_LIBRARY_NAME=libcore_cpu_x64.so
RUN <<EOF
set -eux
Expand Down
31 changes: 16 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ curl -s \
- アクセント句は`/`または``で区切る。``で区切った場合に限り無音区間が挿入される。
- カナの手前に`_`を入れるとそのカナは無声化される
- アクセント位置を`'`で指定する。全てのアクセント句にはアクセント位置を 1 つ指定する必要がある。
- 文末に``(全角)を入れることにより疑問文の発音ができる
- アクセント句末に``(全角)を入れることにより疑問文の発音ができる

```bash
# 読ませたい文章をutf-8でtext.txtに書き出す
Expand Down Expand Up @@ -240,22 +240,23 @@ python run.py --voicevox_dir=$VOICEVOX_DIR --voicelib_dir=$VOICELIB_DIR
python run.py
```

### CPU スレッド数を指定する

### CPUスレッド数を指定する
CPUスレッド数が未指定の場合は、論理コア数の半分か物理コア数が使われます。(殆どのCPUで、これは全体の処理能力の半分です)
もしIaaS上で実行していたり、専用サーバーで実行している場合など、
VOICEVOX ENGINEが使う処理能力を調節したい場合は、CPUスレッド数を指定することで実現できます。
CPU スレッド数が未指定の場合は、論理コア数の半分か物理コア数が使われます。(殆どの CPU で、これは全体の処理能力の半分です)
もし IaaS 上で実行していたり、専用サーバーで実行している場合など、
VOICEVOX ENGINE が使う処理能力を調節したい場合は、CPU スレッド数を指定することで実現できます。

- 実行時引数で指定する
```bash
python run.py --voicevox_dir=$VOICEVOX_DIR --cpu_num_threads=4
```

```bash
python run.py --voicevox_dir=$VOICEVOX_DIR --cpu_num_threads=4
```

- 環境変数で指定する
```bash
export VV_CPU_NUM_THREADS=4
python run.py --voicevox_dir=$VOICEVOX_DIR
```
```bash
export VV_CPU_NUM_THREADS=4
python run.py --voicevox_dir=$VOICEVOX_DIR
```

### 過去のバージョンのコアを使う
VOICEVOX Core 0.5.4以降のコアを使用する事が可能です。
Expand Down Expand Up @@ -358,16 +359,16 @@ pip-compile requirements-test.in

### ライセンス

依存ライブラリは「コアビルド時にリンクして一体化しても、コア部のコード非公開OK」なライセンスを持つ必要があります。
主要ライセンスの可否は以下の通りです。
依存ライブラリは「コアビルド時にリンクして一体化しても、コア部のコード非公開 OK」なライセンスを持つ必要があります。
主要ライセンスの可否は以下の通りです。

- MIT/Apache/BSD-3: OK
- LGPL: OK (コアと動的分離されているため)
- GPL: NG (全関連コードの公開が必要なため)

## ユーザー辞書の更新について

以下のコマンドでopenjtalkのユーザー辞書をコンパイルできます
以下のコマンドで openjtalk のユーザー辞書をコンパイルできます

```bash
python -c "import pyopenjtalk; pyopenjtalk.create_user_dict('user-dic.csv','user.dic')"
Expand Down
2 changes: 1 addition & 1 deletion docs/api/index.html

Large diffs are not rendered by default.

26 changes: 26 additions & 0 deletions generate_licenses.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,32 @@ def generate_licenses() -> List[License]:
)
)

# VOICEVOX CORE
with urllib.request.urlopen(
"https://raw.githubusercontent.com/VOICEVOX/voicevox_core/main/LICENSE"
) as res:
licenses.append(
License(
name="VOICEVOX CORE",
version=None,
license="MIT license",
text=res.read().decode(),
)
)

# VOICEVOX ENGINE
with urllib.request.urlopen(
"https://raw.githubusercontent.com/VOICEVOX/voicevox_engine/master/LGPL_LICENSE"
) as res:
licenses.append(
License(
name="VOICEVOX ENGINE",
version=None,
license="LGPL license",
text=res.read().decode(),
)
)

# world
with urllib.request.urlopen(
"https://raw.githubusercontent.com/mmorise/World/master/LICENSE.txt"
Expand Down
4 changes: 2 additions & 2 deletions make_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import run

from voicevox_engine.dev.core import mock as core
from voicevox_engine.dev.synthesis_engine.mock import SynthesisEngine
from voicevox_engine.dev.synthesis_engine.mock import MockSynthesisEngine

if __name__ == "__main__":
app = run.generate_app(SynthesisEngine(speakers=core.metas()))
app = run.generate_app(MockSynthesisEngine(speakers=core.metas()))
with open("docs/api/index.html", "w") as f:
f.write(
"""<!DOCTYPE html>
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ pip-licenses
pip-tools
pre-commit

# 以下のパッケージはWindowsでは必要とされてるが、Linux上でpip-compileすると出力内容に含まれないため明示的に含めている
# fow windows
atomicwrites
colorama
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ pycparser==2.20
# via cffi
pydantic==1.8.2
# via fastapi
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@8466b5a331e4736181648d5585be626aa7f9bde1
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@a85521a0a0f298f08d9e9b24987b3c77eb4aaff5
# via -r requirements.in
python-multipart==0.0.5
# via -r requirements.in
Expand Down
2 changes: 1 addition & 1 deletion requirements-test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ pydantic==1.8.2
# via fastapi
pyflakes==2.3.1
# via flake8
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@8466b5a331e4736181648d5585be626aa7f9bde1
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@a85521a0a0f298f08d9e9b24987b3c77eb4aaff5
# via -r requirements.in
pyparsing==3.0.1
# via packaging
Expand Down
2 changes: 1 addition & 1 deletion requirements.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ soundfile
scipy
PyYAML
pyworld
git+https://github.com/VOICEVOX/pyopenjtalk@8466b5a331e4736181648d5585be626aa7f9bde1#egg=pyopenjtalk
git+https://github.com/VOICEVOX/pyopenjtalk@a85521a0a0f298f08d9e9b24987b3c77eb4aaff5#egg=pyopenjtalk
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pycparser==2.20
# via cffi
pydantic==1.8.2
# via fastapi
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@8466b5a331e4736181648d5585be626aa7f9bde1
pyopenjtalk @ git+https://github.com/VOICEVOX/pyopenjtalk@a85521a0a0f298f08d9e9b24987b3c77eb4aaff5
# via -r requirements.in
python-multipart==0.0.5
# via -r requirements.in
Expand Down
54 changes: 21 additions & 33 deletions run.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,6 @@ def generate_app(
# loop = asyncio.get_event_loop()
# _ = loop.create_task(cancellable_engine.catch_disconnection())

def enable_interrogative_query_param() -> Query:
return Query(
default=True,
description="疑問系のテキストが与えられたら自動調整する機能を有効にする。現在は長音を付け足すことで擬似的に実装される",
)

def get_engine(core_version: Optional[str]) -> SynthesisEngineBase:
if core_version is None:
return synthesis_engines[latest_core_version]
Expand All @@ -101,21 +95,12 @@ def get_engine(core_version: Optional[str]) -> SynthesisEngineBase:
tags=["クエリ作成"],
summary="音声合成用のクエリを作成する",
)
def audio_query(
text: str,
speaker: int,
enable_interrogative: bool = enable_interrogative_query_param(), # noqa B008,
core_version: Optional[str] = None,
):
def audio_query(text: str, speaker: int, core_version: Optional[str] = None):
"""
クエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。
"""
engine = get_engine(core_version)
accent_phrases = engine.create_accent_phrases(
text,
speaker_id=speaker,
enable_interrogative=enable_interrogative,
)
accent_phrases = engine.create_accent_phrases(text, speaker_id=speaker)
return AudioQuery(
accent_phrases=accent_phrases,
speedScale=1,
Expand All @@ -136,10 +121,7 @@ def audio_query(
summary="音声合成用のクエリをプリセットを用いて作成する",
)
def audio_query_from_preset(
text: str,
preset_id: int,
enable_interrogative: bool = enable_interrogative_query_param(), # noqa B008,
core_version: Optional[str] = None,
text: str, preset_id: int, core_version: Optional[str] = None
):
"""
クエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。
Expand All @@ -156,9 +138,7 @@ def audio_query_from_preset(
raise HTTPException(status_code=422, detail="該当するプリセットIDが見つかりません")

accent_phrases = engine.create_accent_phrases(
text,
speaker_id=selected_preset.style_id,
enable_interrogative=enable_interrogative,
text, speaker_id=selected_preset.style_id
)
return AudioQuery(
accent_phrases=accent_phrases,
Expand Down Expand Up @@ -189,7 +169,6 @@ def accent_phrases(
text: str,
speaker: int,
is_kana: bool = False,
enable_interrogative: bool = enable_interrogative_query_param(), # noqa B008,
core_version: Optional[str] = None,
):
"""
Expand All @@ -199,11 +178,12 @@ def accent_phrases(
* アクセント句は`/`または`、`で区切る。`、`で区切った場合に限り無音区間が挿入される。
* カナの手前に`_`を入れるとそのカナは無声化される
* アクセント位置を`'`で指定する。全てのアクセント句にはアクセント位置を1つ指定する必要がある。
* アクセント句末に`?`(全角)を入れることにより疑問文の発音ができる。
"""
engine = get_engine(core_version)
if is_kana:
try:
accent_phrases = parse_kana(text, enable_interrogative)
accent_phrases = parse_kana(text)
except ParseKanaError as err:
raise HTTPException(
status_code=400,
Expand All @@ -215,11 +195,7 @@ def accent_phrases(

return accent_phrases
else:
return engine.create_accent_phrases(
text,
speaker_id=speaker,
enable_interrogative=enable_interrogative,
)
return engine.create_accent_phrases(text, speaker_id=speaker)

@app.post(
"/mora_data",
Expand Down Expand Up @@ -280,9 +256,21 @@ def mora_pitch(
tags=["音声合成"],
summary="音声合成する",
)
def synthesis(query: AudioQuery, speaker: int, core_version: Optional[str] = None):
def synthesis(
query: AudioQuery,
speaker: int,
enable_interrogative_upspeak: bool = Query( # noqa: B008
default=True,
description="疑問系のテキストが与えられたら語尾を自動調整する",
),
core_version: Optional[str] = None,
):
engine = get_engine(core_version)
wave = engine.synthesis(query=query, speaker_id=speaker)
wave = engine.synthesis(
query=query,
speaker_id=speaker,
enable_interrogative_upspeak=enable_interrogative_upspeak,
)

with NamedTemporaryFile(delete=False) as f:
soundfile.write(
Expand Down
Loading

0 comments on commit c7cda72

Please sign in to comment.