見出し画像

【深入り解説】タイミング情報ファイル(.lab)って?

こんにちは!いぬいぬです!
この記事は「ぼすきー 裏 Advent Calendar 2023」の参加記事です!

今日は合成音声ソフト界隈でおなじみの
「タイミング情報ファイル(.labファイル)」
について書きたいと思います!

タイミング情報ファイルって?

合成音声ソフトには歌声とか話し声の音声を合成してくれる以外にも、”発音がどのタイミングでされるの?”、を教えてくれるソフトもあります。

この「どういうタイミングでどの音なの」を教えてくれるのが「タイミング情報ファイル」(.labファイル)です。

  • それぞれのソフトでの呼び方

    • CeVIO/VoiSona: 「タイミング情報ファイル」

    • A.I.VOICE:「音素情報ファイル」

    • VOICEVOX: 「labファイル」

どんなの?

たとえばCeVIO AIトークの「さとうささら」ちゃんの
「あいうえお」というセリフのタイミング情報ファイルの中身はこんな感じになります。

0 50000 sil
50000 1250000 a
1250000 2750000 i
2750000 4200000 u
4200000 6250000 e
6250000 8400000 o
8400000 9650000 sil

音の開始時間 音の終了時間 音の種類(「音素」)、
が1音ごとにならんでるだけの情報です。

エディタで音の長さを調声してから出力すると、
ちゃんと反映されます。

エディタで音を伸ばすと…
0 50000 sil
50000 3200000 a
3200000 7250000 i
7250000 7850000 u
7850000 11950000 e
11950000 16100000 o
16100000 17350000 sil

よくある使い方: 動画のあいうえお口パクに使う

なんといってもよく使うのは、
動画の立ち絵の「あいうえお口パク」(リップシンク)に使う方法です。

  • AviUtl + PSDToolKit

昔からある立ち絵表示のおなじみの方法です!
labファイルがあると「あいうえお口パク」ができます。

  • YMM4 + KuchiPaku

いぬいぬが自作したツールです!
このツールではlabファイルの情報でYMM4で
あいうえお口パクを実現してます!

詳しいことはnoteの記事↓よんでね!

応用の使い方:いろいろある

  • MVの歌詞字幕をタイミングぴったりに合わせる

発音とタイミングが合うので、MV制作のときに
歌詞字幕をピッタリ合わせることができます!

楽譜情報だとほんのちょっと実際の発音とずれるのでこっちほうが正確です。頑張ればカラオケみたいに文字と発音を
合わせることもできますね!

追記: やってみました



  • ソングソフトをしゃべらせる

去年のnoteの記事に書きましたけど、NodoAmeもタイミング情報を使ってしゃべってます。

そういえば、タイミング情報と音素情報はCeVIOトークから取れるなぁ…
あー、あとはPITさえ真似できればしゃべれそう…

ちなみに、最新のver4.0系では.labファイルを読み込むこともできます。
なのでソングtoソングもできます。

  • トークソフトを(自然に)歌わせる

ぶっちゃけ、トークソフトを歌わせるだけなら楽譜情報だけでもそこそこできます。

トークtoソングはタイミング情報は絶対必要ですけど、
ソングtoトークは、なくてもまあまあ歌えるんですよね…。

とはいえ自然に歌うための「歌唱指導」として
タイミング情報は使えます!

  • CeVIOソングのブレスを自動で抑える

CeVIOソング、特にCeVIO AIや同じエンジンのVoiSonaの特徴は印象的なブレスです。ですが、曲調によっては要らないときもあります。

これを一つ一つ手で調整するのはなかなか大変ですが、
タイミング情報ファイルにはブレス部分に該当するタイミングがわかるので、これを使って自動化できます。

出力に応している合成音声ソフト

昔調べたところこんな感じでした!他にもあるかも?

公式に出力サポートしているソフト (officialy supported tools)

ここからDeepな世界へ

さて。ここまでとっても基本的な情報でした…。
ここからちょっとディープな情報が来ます!うわー!!!

音素表記

タイミング情報ファイルに出力される音の種類を表す
音素」ですが、実はあんまり詳しい情報は公式のマニュアルにも乗ってません…。

IPAの発音記号とは違うので、参考にもできません…。
こまった…。


一番まとまっているのはSinsyの音素表PDFマニュアルだと思います。日英中のCeVIO系のソングソフトで使える音素がまとまってます。
これはCeVIO系のトークソフトでも大体同じです。なのでこのPDFを見ればだいたいOK!

https://sinsy.sp.nitech.ac.jp/reference.pdf

…ただし、のってない音素も実はあります。


CeVIOソングの日本語音素パレット

CeVIO系のソングソフトは直接音素を編集できるため、
エディタ上に一覧があったりします(音素パレット)。
こっちも参考になりますし、実際に入力するならこっちですね。

CeVIOの日本語ソング 音素パレット
CeVIOの英語ソング 音素パレット

英語ソングの音素パレットにだけのってる情報として
ハミング用の音素」があります。
「んん~~~♫」って歌う時用の音素です。

  • [mm]

  • [nn]

Sinsyの英語音素一覧にはなぜか載っていません。
VoiSonaの英語音素パレットにもありませんが、実は使えます。


トークソフトの場合、表示はされるけど直接編集できないから?あまり情報がありません…。

例外的に、CeVIO AIトークの英語は直接音素指定ができるので、マニュアルに使える音素の一覧があります。

トークでも直接編集できるようにしてほしいなぁ…。
音素パレットも欲しいなぁ…。


マニュアルに乗ってないけど使える音素には次のようなものがあります。

  • [sil][pau]

    • 無音部分の音素です

    • 無音と言っても正確には無発音・無声です
      CeVIOの場合ブレス音などが合成されます

    • sil はCeVIOの場合

      • トークのセリフの前後の空白

      • silent?

    • pau はCeVIOの場合

      • トークのセリフの間

      • ソングの間

      • pause?

    • A.I.VOICEの場合、セリフ前後の sil は出力されません

  • [A][I][U][E][O]

    • 日本語の無声化母音の音素です

    • CeVIOトークのルビ指定で「’」を付けるとできます

    • 実はソングボイスでも使えます

      • CeVIOソングの歌詞の「’」は別です!
        母音脱落です!異なる発音になります

  • [xx]

    • 合成されないエラーの音素です

    • 対応してない文字があるとこの音素になることが多いです

  • [mm][nn]

    • 英語ソングのハミング用音素です

ソフトによって微妙に音素表現が違う

合成音声ソフトによっては、タイミング情報ファイルに対応していても微妙に音素表現が異なります。

たとえば、「な行」の音素表現。
日本語は「な行」のうち「」だけ子音が違います

音素片接続方式のA.I.VOICEは下のように「に」は "ny,i" と出力されます(にゃにゅにょと同じ子音の音素)。

0 530000 n
530000 1550000 a
1550000 2040000 ny
2040000 2610000 i
2610000 3160000 n
3160000 3790000 u
3790000 4340000 n
4340000 5160000 e
5160000 5710000 n
5710000 6600000 o

機械学習系方式のCeVIOは下のように「に」を "n,i" と出力します。

0 250000 sil
250000 800000 n
800000 1600000 a
1600000 2150000 n
2150000 2950000 i
2950000 3350000 n
3350000 4100000 u
4100000 4500000 n
4500000 5300000 e
5300000 5750000 n
5750000 7550000 o
7550000 7800000 sil

これはCeVIOが「に」の子音音素表現を間違っているわけではなく、

  • 音を切り刻んでつなぐタイプの音声合成ソフトはちゃんと区別しないといけない

  • 前後の情報から機械学習で音を推定するタイプの合成音声ソフトは区別の必要がない

っていう違いになります。
機械学習タイプになるA.I.VOICE2はどうなるのか気になりますね!


逆パターンもあります
たとえば、日本語(標準語)の「~です・~ます」の「す」は母音が無声化します。

A.I.VOICEの場合、「そうです」の「す」は "s,u" と出力されます。

0 1480000 s
1480000 2200000 o
2200000 2970000 o
2970000 3490000 d
3490000 4310000 e
4310000 5780000 s
5780000 6960000 u

CeVIOの場合「そうです」の「す」は "s,U"という無声化母音を表現する大文字の音素が出力されます。

0 250000 sil
250000 1450000 s
1450000 2100000 o
2100000 3250000 o
3250000 3550000 d
3550000 4300000 e
4300000 6050000 s
6050000 6500000 U
6500000 6750000 sil

これはA.I.VOICEが無声子音を発音できないというわけではなく、labファイルの書き出しに反映されてない(無声母音の音素を書き出さない)ってだけのようです。

音声合成ソフトのAPIでのタイミング情報

トークソフトの中にはAPIで外部連携できるソフトがありますが、そのなかにはタイミング情報ファイルを経由しなくてもAPIでタイミング情報を教えてくれるソフトがあります。

  • CeVIO CS/AI トーク

  • VOICEVOX / SHAREVOX


CeVIO

CeVIO CS / AI トークの場合、.NETインターフェイスの GetPhonemes(string text); でゲットできます。実際に音声を合成しなくても、タイミング情報だけゲットできます。

返ってくる PhonemeData(2) の秒数は.labファイルと基準が違うので注意です。


VOICEVOX

VOICEVOX / SHAREVOXの場合、REST APIの /audio_query や /accent_query でタイミング情報を含んだJSONがゲットできます。こちらも実際に音声の合成処理をしなくてもゲットできます。

[
  {
    "moras": [
      {
        "text": "コ",
        "consonant": "k",
        "consonant_length": 0.10002632439136505,
        "vowel": "o",
        "vowel_length": 0.15740256011486053,
        "pitch": 5.714912414550781
      },
      {
        "text": "ン",
        "consonant": null,
        "consonant_length": null,
        "vowel": "N",
        "vowel_length": 0.08265873789787292,
        "pitch": 5.8854217529296875
      },
      {
        "text": "ニ",
        "consonant": "n",
        "consonant_length": 0.03657080978155136,
        "vowel": "i",
        "vowel_length": 0.117112897336483,
        "pitch": 5.998487949371338
      },
      {
        "text": "チ",
        "consonant": "ch",
        "consonant_length": 0.08808862417936325,
        "vowel": "i",
        "vowel_length": 0.09015568345785141,
        "pitch": 5.977110385894775
      },
      {
        "text": "ワ",
        "consonant": "w",
        "consonant_length": 0.08290570229291916,
        "vowel": "a",
        "vowel_length": 0.2083434909582138,
        "pitch": 6.048254013061523
      }
    ],
    "accent": 5,
    "pause_mora": null,
    "is_interrogative": false
  }
]

VOICEVOX互換APIを持っていても、タイミング情報がゲットできないソフトもありますCOEIROINKなど)。
意外とAPI経由で取れないソフトは多いです。

タイミング情報ファイルには正確には2種類ある

  • モノ(mono)ラベル : いつもの

  • フルコンテクストラベル

フルコンテクストラベルは合成音声ソフトを普通に使うぶんには見ることはありません。
これはライブラリとかを触り始めると見かけるようになります。

[開始時間] [終了時間] [音素] [コンテキスト情報]

という感じで意味不明な文字列(コンテキスト情報)が普通のタイミング情報以外にくっついてきます。

この詳しい情報は、「HMM/DNN-based Speech Synthesis System (HTS)」というツールの関連デモファイルの「lab_format.pdf」という名前のPDFにかかれてます(全部英語!)。このファイルは他のデータの中に一緒に含まれていて、DLしてから展開して取り出す必要があります。

あ~…。なるほど全部わかったわ(←わかってない)
  • ソング用フルコンテクストフォーマット

    • HTS-demo_NIT-SONG070-F001/data/lab_format.pdf

  • トーク用各言語フルコンテクストフォーマット

    • 日本語

      • HTS-demo_NIT-ATR503-M001/data/lab_format.pdf

    • 英語

      • HTS-demo_CMU-ARCTIC-SLT/data/lab_format.pdf

    • ポルトガル語(ブラポル語)

      • HTS-demo_NIT-BP613-F001/data/lab_format.pdf

ソングのフォーマットは一緒だけど、
トークは言語ごとに違うんですね!

これの解読はめっちゃ大変ですが、少しだけ日本語の情報もあります。

https://gist.github.com/yamachu/5dab4393ade50173bebe51c65cd9e8f3

https://www.gavo.t.u-tokyo.ac.jp/~mine/japanese/nlp+slp/VoiceMaker-doc-1.1.pdf

で、何に使うの?って感じですが、
これを使って音声合成や音声認識をするようですね~。

そこまでやらなくても、
例えば日本語トークのフルコンテクストラベルでは、
音素単位のモーラやアクセント句情報がGETできるので、
モーラの区切りとかの判断に使えます。

いぬいぬは「VoiSonaトークを歌わせるツール(開発中)」の中のモーラの解析に使ってます。

この辺は応用次第でいろいろできそうですね…!

.labファイルをあつかうライブラリ

CeVIOのCCSファイルを扱う、いぬいぬ自作の.NETライブラリ「LibSasara」があります。
この中には.labファイルを扱うクラスもあって、
これでlabファイルを扱えます。

動画のフレーム数で計算したり、すべての音を指定した時間前後にずらしたり、比率で時間を伸び縮みさせたり、文単位で分割したり…、といった便利機能もあります。

なにかプログラムで扱いたいときは候補に入れてみてください!

※実はフルコンテクストラベル対応も制作中だったり…。


まとめ

  • タイミング情報ファイル(.labファイル)とは?

    • 合成音声ソフトで音声がどのタイミングで発されるかを示すファイル

    • タイミングや詳細情報を提供し、口パクから歌詞字幕のタイミング合わせまで幅広い用途に使える

  • それぞれのソフトでの呼び方

    • CeVIO/VoiSona: 「タイミング情報ファイル」

    • A.I.VOICE:「音素情報ファイル」

    • VOICEVOX: 「labファイル」

  • ファイルの中身

    • 音の開始時間、終了時間、音の種類が記録される。

    • エディタで音の長さを調整し、反映可能。

  • 使い方

    • 動画の口パクや歌詞字幕のタイミング合わせに利用。

  • 応用の使い方

    • ソングソフトをしゃべらせたり、トークソフトを歌わせる際に使用もできる

  • APIを介した情報取得

    • CeVIO/AIトークやVOICEVOXなどがAPI経由でタイミング情報を提供。

  • フルコンテクストラベル

    • 合成音声ライブラリにおける詳細な情報記述で、音声合成や認識に用いられるが、解読が複雑。

  • ライブラリ

    • .labファイルを扱うLibSasaraなどの.NETライブラリがあり、時間調整や便利な機能を提供。

次の記事は遊牧家族/yuubokuさんの「MYCOE収録後に役立つAudacityのマクロ」です。


この記事が気に入ったらサポートをしてみませんか?