Open5
CeVIO連携用につくったもの
NodoAme
- 歌声合成ソフトCeVIOソングのボイスを”しゃべらせる”ためのソフト
- しゃべり方は対応TTSソフトを”まね”する
- CeVIOトーク、VOICEVOX、OpenJTalk、SHAREVOX
- v0.4では書き出した音声ファイルとlabファイルがあればどんなソフトも対応
- 詳しい経緯はnoteの記事に
- (まだ)OSSじゃないです
技術的なところ
基本スペック
- C#
- 内部処理部分とUI処理部分が同じ言語でかけるのでラク!
- エラーを握りつぶさないので、ユーザーに使ってもらうときにちゃんとエラーをつぶせる
- 必要なライブラリがnugetで簡単に導入出来てラク(python版はビルドが必要…)
- dotnet framework 4.8
- CeVIOの外部連携インターフェイスがこれじゃないと動かない
- WPF
- Epoxy (MVVMライブラリ)
- WPFを置き換える可能性を考えて
タイミング情報
- タイミング情報ファイル(.labファイル)がCeVIOのソングとトークで共通なところから着想したもの
- CeVIOトークの外部連携インターフェイスはタイミング情報が自動で取得できるのでこれで音素とタイミングを合わせてます
- labファイルと外部連携インターフェイスでは時間の単位が違うので注意が必要です
OpenJTalk
- CeVIOと同じくOpen JTalkが使われてるVOICEVOXも同じ仕組みで対応
- タイミング情報が取れないソフト(COEIROINKなど)は対応できてません
- CeVIOトークもVOICEVOXが無くても動作するようにOpen JTalkのdotnetラッパー SharpOpenJTalkを使ってます(便利)
音声分析
- ピッチ(音程)情報の解析はWORLDのdotnetラッパー DotnetWorldを使ってます
- DotnetWorldのwavファイル読み込みには制限があるみたいなので、NAudioで置き換えてます
- 16bit/48kHzに内部的に変換
- 演技指導に使うTTSソフトはソフトによって書きだしフォーマットがバラバラ、変更可能なので統一
NAudio
- 定番音声処理ライブラリ
- v0.4では色んなフォーマットの音声ファイルを16bit/48kHz wavに変換するのにつかってます
Wanakana-net
- ローマ字→かな変換ライブラリWanaKana.jsの dotnet移植版 Wanakana-net
- 音素→ひらがな変換につかってます
- そのままではOpenJTalk/CeVIOの音素に対応できないので追加ルールを加えてます
Fluent CeVIO Wrapper
- CeVIOトークの外部連携インターフェイスをつかいやすくしたラッパーライブラリ&サーバー
- .NET Core系でも連携できるようになります
- 新しめの書き方で書けます
ドキュメント
特徴
- CeVIO AI, CeVIO Creative Studio 7 対応
- 共通ライブラリAPIはモダンな記法が可能
-
async
/await
nullable
ValueTask<T>
- C# 10
-
- nuget経由での導入
- No more GAC、nupkg形式での提供
- 現在はローカルnugetの想定です
- 共通ライブラリは .NET Standard 2.0対応
- .NET Framework系環境・.NET Core系環境どちらからも利用可能
- .NET 6 / 7での動作を確認済
- 連携IPCサーバーは .NET Framework 4.8上で起動
- 名前付きパイプでのIPCを行います
Problems of the CeVIO .NET interface
- .NET Framework 4.8
- Not supported async/await
- Different name API (CeVIO CS / CeVIO AI)
- Old style C# 7.3
構成
- FluentCeVIOWrapper.Common
- アプリに組み込む用のライブラリのプロジェクト
- APIドキュメント
- .NET Standard 2.0
- FluentCeVIOWrapper.Server
- CeVIO連携用サーバーのプロジェクト
- これを子プロセスとかで動かして連携する想定
- FluentCeVIOWrapper.Unity
- Unity3Dで動かす用のプロジェクト
-
.unitypackage
に必要なライブラリ一式とServerも一緒にいれてます
LibSasara
音声合成ソフトウェアのCeVIOのプロジェクトファイル(.ccs
)、トラックファイル(.ccst
)、タイミングラベルファイル(.lab
)を便利に扱うための.NETライブラリです。
特徴
- The utility .NET class library for CeVIO files
- Written in C# 10
- .NET Standard 2.0
- Supported file formats:
- CeVIO project file (
.ccs
) - CeVIO track file (
.ccst
) - timing label file (
.lab
)
- CeVIO project file (
API documents
経緯
NodoAmeを実装したときにccsファイル(中身はXML)とかlabファイルの処理が大変だったのでライブラリ化したものです。NodoAmeから移植したりしています(v0.4からNodoAmeでも一部使用)。
ccs/ccstファイルの処理はLINQ to XMLの薄いラッパーになってます。必要な処理から加えているので、ccs/ccstの全要素にはまだ対応していません。対応してない処理はRaw~
で直接元の XElement
を取得して処理できるようになっています。
cevio-casts
JSON形式で定義されたCeVIOのキャスト(ボイスライブラリ)の定義データです。
特徴
- CeVIOトークの外部連携インターフェイスを経由せずにキャスト(ボイスライブラリ)の名前やIDを取得できます
- CeVIOトークボイスの感情パラメータの名前やIDも同様に静的に取得できます
- CeVIOソングボイスの内部IDも静的に取得できます
- キャスト名・感情名は日本語表記の他、一部英語表記の定義も含まれます
データ
ccsファイルなどで各キャストを参照するには、id
ではなくcname
を使ってください。
cname
は実際のccsファイルで使われていますが、一部のボイスがトークボイス・ソングボイスの区別がありません(同じ文字列です)。そのため、ボイスをしっかり区別できるよう、そのようなボイスは cevio-casts オリジナルのid
を定義しています。
JSONスキーマ
JSONスキーマを用意しています。
各言語むけにquicktypeをつかってヘルパーコードを出力できます。
quicktype ../data/data.json -o csharp/CevioCasts/Definitions.cs -l csharp --namespace CevioCasts --features complete -S ../model/schema.json
C#の例
C#向けには生成済みのヘルパーコードを用意しています。また、それを呼び出せるクラスライブラリプロジェクトがあります。
機械生成ではなく一部手動で修正しています。
using CevioCasts; //if you included classlib `CevioCasts`
var jsonString = File.ReadAllText("path/to/data.json");
var defs = Definitions.FromJson(jsonString);