An open API service indexing awesome lists of open source software.

https://github.com/oov/voicevox_volume_adjust


https://github.com/oov/voicevox_volume_adjust

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

VOICEVOX でスタイルごとの音量差を整える
====

要約: 適当なセリフで Integrated Loudness を求め、それを基準にしてスタイル毎に調整する

VOICEVOX 0.7.x 時点での出力音声は、たとえ同じキャラクターであってもスタイルを変えると音量差が大きく、
感情表現目的でスタイルを切り替えるような使い方をしようとした場合、そのままでは少なくない違和感があります。

もちろん手動で音量を調整することで違和感を小さくすることができますが、
その調整を完全に人間に任せるのではなく、ある程度自動で決めることができれば人間が楽をできます。

これはそのための雑多な手順書です。

## 1. スタイル毎に、同じセリフを書き出す

スタイル毎の音量差を計測するために、少し長めの同じセリフを全てのスタイルで読み上げて、その音声を書き出します。

今回の例文は以下のようなものにしました。

```
再生ボタンを押すと、文章が読まれます、読み方が変なときは、イントネーションを修正することもできます
```

この例文を四国めたんの4つのスタイルで読み上げて書き出します。

- [001_四国めたん_再生ボタンを押すと….wav](001_四国めたん_再生ボタンを押すと….wav)
- [002_四国めたん(あまあま)_再生ボタンを押すと….wav](002_四国めたん(あまあま)_再生ボタンを押すと….wav)
- [003_四国めたん(ツンツン)_再生ボタンを押すと….wav](003_四国めたん(ツンツン)_再生ボタンを押すと….wav)
- [004_四国めたん(セクシー)_再生ボタンを押すと….wav](004_四国めたん(セクシー)_再生ボタンを押すと….wav)

上記の4つのファイルを作成しました。

デフォルトとツンツンが、少し音量が小さめに聴こえます。

## 2. ファイル毎の音量を求める

[ffmpeg](https://ffmpeg.org/) をダウンロードし、コマンドラインから以下のようにして実行します。

```
ffmpeg -nostats -i 001_四国めたん_再生ボタンを押すと….wav -filter_complex ebur128 -f null -
```

するとたくさんログが流れますが、その最後にこのような表示があります。

```
Integrated loudness:
I: -26.4 LUFS
Threshold: -36.8 LUFS

Loudness range:
LRA: 2.2 LU
Threshold: -47.2 LUFS
LRA low: -28.5 LUFS
LRA high: -26.3 LUFS
```

この `I:` の後ろに表示されているのがファイル全体の音量です。
4つのファイルで同じように実行して値をまとめたところ、以下のようになりました。

- `ffmpeg -nostats -i 001_四国めたん_再生ボタンを押すと….wav -filter_complex ebur128 -f null -`
- -26.4 LUFS
- `ffmpeg -nostats -i 002_四国めたん(あまあま)_再生ボタンを押すと….wav -filter_complex ebur128 -f null -`
- -23.7 LUFS
- `ffmpeg -nostats -i 003_四国めたん(ツンツン)_再生ボタンを押すと….wav -filter_complex ebur128 -f null -`
- -29.8 LUFS
- `ffmpeg -nostats -i 004_四国めたん(セクシー)_再生ボタンを押すと….wav -filter_complex ebur128 -f null -`
- -23.7 LUFS

ファイルを直接聞いた印象でも音量が小さいデフォルトやツンツンは、求めた数値上でも少し小さめの値になっています。

## 3. 音量を調整する

今回は -23 LUFS を目標として音量を調整してみます。
(-23 LUFS は EBU R128 におけるノーマライズ基準値)

例えば -26.4 LUFS を -23 LUFS にするためには +3.4 する必要があります。
それを踏まえた上で、それぞれのファイルに対して以下のような処理を施し、音量調整済みのファイルを生成してみます。

- `ffmpeg -i 001_四国めたん_再生ボタンを押すと….wav -af volume=3.4dB 001_四国めたん_再生ボタンを押すと….fixed.wav`
- [001_四国めたん_再生ボタンを押すと….fixed.wav](001_四国めたん_再生ボタンを押すと….fixed.wav)
- `ffmpeg -i 002_四国めたん(あまあま)_再生ボタンを押すと….wav -af volume=0.7dB 002_四国めたん(あまあま)_再生ボタンを押すと….fixed.wav`
- [002_四国めたん(あまあま)_再生ボタンを押すと….fixed.wav](002_四国めたん(あまあま)_再生ボタンを押すと….fixed.wav)
- `ffmpeg -i 003_四国めたん(ツンツン)_再生ボタンを押すと….wav -af volume=6.8dB 003_四国めたん(ツンツン)_再生ボタンを押すと….fixed.wav`
- [003_四国めたん(ツンツン)_再生ボタンを押すと….fixed.wav](003_四国めたん(ツンツン)_再生ボタンを押すと….fixed.wav)
- `ffmpeg -i 004_四国めたん(セクシー)_再生ボタンを押すと….wav -af volume=0.7dB 004_四国めたん(セクシー)_再生ボタンを押すと….fixed.wav`
- [004_四国めたん(セクシー)_再生ボタンを押すと….fixed.wav](004_四国めたん(セクシー)_再生ボタンを押すと….fixed.wav)

生成されたファイルを聴いてみると、元のファイルより音量差が小さくなっていることが確認できるはずです。

完全に同一とは言えないかも知れませんが、人間の耳で判断せずに調整した結果としてはまずまずです。

## 4. 他のセリフにも同じ音量調整を適用してみる

同じスタイルを使っている場合は、喋る内容が変わったとしても、ある程度は同じような音量になることが期待できます。

一方で、例えば力む場所で高い音を使うと音量が大きめになったり、静かに喋る場所で低い音を使うと音量が小さめになったりするかもしれません。
しかし、このようなセリフ内で発生する「自然な音量差」までを全部 -23 LUFS に揃えてしまうのは、逆に不自然な結果に繋がることもあります。

そこで、ここでは `毎回音声ファイルの音量を調べ、-23 LUFS になるように調整する` という方針ではなく、
`ツンツンの時は常に +6.8dB する` などのように、スタイル毎に求めた基準値をそのまま適用する方針で進めます。

```
もっと細かく調整することもできます、ぜひ、みなさんもダウンロードして、遊んでみてください
```

この例文を四国めたんの4つのスタイルで読み上げて書き出し、音量は測定せずにさっきと同じだけ上げてみます。

- デフォルト [変更前](001_四国めたん_もっと細かく調整す….wav) → +3.4dB → [変更後](001_四国めたん_もっと細かく調整す….fixed.wav)
- あまあま [変更前](002_四国めたん(あまあま)_もっと細かく調整す….wav) → +0.7dB → [変更後](002_四国めたん(あまあま)_もっと細かく調整す….fixed.wav)
- ツンツン [変更前](003_四国めたん(ツンツン)_もっと細かく調整す….wav) → +6.8dB → [変更後](003_四国めたん(ツンツン)_もっと細かく調整す….fixed.wav)
- セクシー [変更前](004_四国めたん(セクシー)_もっと細かく調整す….wav) → +0.7dB → [変更後](004_四国めたん(セクシー)_もっと細かく調整す….fixed.wav)

セリフ内容が変わっても、概ね同じぐらいの音量に揃っていることがわかります。

## 5. まとめと応用

- ある程度長めなセリフでスタイル毎に音量を計測しておいて、違うセリフに調整を適用してもそこそこイケそう
- かんしくんの `modifier` でスタイル毎に自動調整とかにも応用できる
- VOICEVOX 側で core からの出力前に音量調整を入れたり、metas で調整に必要なデータを返して engine で音量調整を入れたりもできそう