SlideShare a Scribd company logo
1 of 45
Unreal Engine4で合成音声を使いたい
~そもそも合成音声ってなんだろう?~
自己紹介
MozPaca
・Twitter ID : @MozPaca398
・フリーランスプログラマ。
・趣味でサウンド系の色々を触ってる。
・ブログ書いてる
http://mozpaca.hatenablog.com/
・UE4初心者
目次
・概要
|-どんなものを開発しているか
|-何人で作っているか
・合成音声とは
|-フォルマント合成
|-波形接続型音声合成
|-その他の音声合成
|-無料で使える音声合成エンジン
|-合成音声まとめ
・開発手順(外部)
|-Open JTalkの使い方
|-音声収録
|-音響モデルの作成
・開発手順(UE4)
|-エディタ拡張
|-外部ファイルの起動
|-ファイルパスの取得
|-作成した.wavのインポート
・現在の開発状況いわゆる進捗
|-残り作業
|-宣伝
・まとめ
概要
どんなものを開発しているか
GrayちゃんOfficialSite
http://pronama.azurewebsites.net/2017/04/19/gray-chan/
UE4非公式キャラクターのGrayちゃんの
発声データベースから、UE4のエディタ上で
入力した文章を音声として組み立てるための
プラグインを作っています。
Grayちゃんの合成音声を作ってます!
どんなものを開発しているか
Open JTalk
ライセンスフリーの音声合成エンジン
http://open-jtalk.sourceforge.net/
完全に0から作ると大変なので、
今回はOpen JTalkという音声合成エンジンを使用しています。
波形データを繋ぎや、.wavの作成はOpen JTalkに投げるスタイルで。
どんなものを開発しているか
どんなものを開発しているか
きっかけ
合成音声(UTAU)を趣味でやってた。
↓
UE4を触るようになった。
↓
UE4で合成音声を扱いたくなった。
/** 「合成音声とは」でググるところから始めた */
UE4で合成音声?が使いたいなぁ
何人で開発してるのか
MozPaca
開発者一覧
何人で開発してるのか
雲井木乃香(@KmoKno )
とげとげP(@checkela )
alwei(@aizen76 )
Grayちゃんの担当声優。
Grayちゃんのパパ。
某会社の社長。
合成音声とは
合成音声とは(フォルマント合成)
録音された人間の音声を使用せずに作成された合成音声。
基底周波数や音色のパラメータを調整して波形を作成する。
簡単にいうと人工的な声。
メリット
・高速に発声させても明瞭に聞き取れる。
・音声データベースを使用しないので、データのサイズが小さくなる。
・出力音声を容易に変更することができる。
・イントネーションや音色を変更することができる。
デメリット
・ロボット的に聞こえることが多い。
フォルマント合成音声の作り方
http://www.geocities.jp/onsei2007/scilab4.html#setei
Rosenberg波
バンドパスフィルタ
代表ソフト(フォルマント合成)
SofTalk
AquesTalkの技術をベースにしている
テキスト読み上げソフト。
棒読みちゃん
合成音声とは(波形接続型音声合成)
録音された音声の断片を連結させて作成された合成音声。
メリット
・極めて肉声に近い自然な音声に合成することができる。
・データベースの情報を追加することで、
さらに綺麗な発声にすることができる。
デメリット
・データベースの情報量が膨大になる。
・(個人でやった場合)収録が大変。
・音声辞書、韻律辞書の作成が大変。
・手直しが大変。
合成音声とは(波形接続型音声合成)
波形接続型音声合成は怪文書の音声版
合成音声とは(波形接続型音声合成)
お い し い お に く がた べ た い
一音ずつ収録した音声データを
指定した文字列に合わせて再生する
合成音声とは(波形接続型音声合成)
参考:https://www.ai-j.jp/about/
例)AITalkの場合
その他の合成音声
Articulatory synthesis
人間の声道で起こることを人工的に再現するフォルマント合成の一種。
Hybrid synthesis
フォルマント音声合成と波形接続型音声合成を組み合わせた合成音声。
それぞれで起こる音の欠損を少なくしたもの。
HMM-based synthesis
隠れマルコフモデル(HMM)に基づいた合成。
パラメータがHMMによってモデル化される。
波形データはHMMが最尤法に基いて生成される
※今回使用した合成音声はこれ。
Sinewave synthesis
使ったこと無い合成方式。
純粋な正弦波をフォルマント合成する。
無償の音声合成エンジン
Microsoft Haruka Desktop
Windows 10 / 8 (OSに標準搭載、デスクトップアプリ用)
Windows標準の音声合成エンジン
Microsoft Ayumi Mobile
Windows 10 / 8、Windows Phone (OSに標準搭載、ストアアプリ用)
高めの声が特徴の音声合成エンジン
Open JTalk
基本的にはLinux環境で動作する。他のOS用にビルドしてください。
今回使っている音声合成エンジン
開発手順(外部)
Open JTalkの使い方
・ビルドしたOpen JTalk.exeを用意する
・音響モデルと、読み上げ用のテキストも用意する
・パラメータや、音響モデルを引数として
Open JTalkを起動する
合成音声の出力が行われる
Open JTalkの使い方
音声収録
ATR503文を読み上げたものを一文ずつ収録します。
ATR503文とは
2音素連鎖402種、3音素連鎖223種を
バランスよく含んだ503つの短い文章のことです。
収録時の注意として、
・はっきりとした発音で収録する
・一定の音程で等速で読み上げる
・48000Hzで収録する
あらゆる 現実を すべて 自分の ほうへ ねじ曲げたのだ。
音響モデルの作成
http://mahoro-ba.net/e1876.html
Windowsでは上手く作成できなかった。
Linux-ubuntuで作成しています。
・収録した音声データから音素ラベルファイルに変換する
・音響モデルの学習に必要なデータを作成する
・音響モデルの学習を開始する
・完成する
開発手順(UE4)
エディタ拡張
プラグインを作成していきます。
Edit→Pluginを選択します。
エディタ拡張
←コレ
Pluginタブ右下にあるNew Pluginボタンを押します。
エディタ拡張
プラグインのテンプレートを選択します。
エディタ拡張
今回使用するテンプレート
Editor Standalone Windowテンプレートを使用すると、
UE4エディタ上にタブを追加することができます。
エディタ拡張
作成したプラグインはデフォルトのままだと、Project/Otherにあります。
作成したプラグインを有効化しておきます。
エディタ拡張
Editor Standalone Windowのテンプレートを使用すると、
赤丸の箇所から作成したタブが出せます。
エディタ拡張
追加していきたい情報→
エディタ拡張
←全然収まらなかった
ソースコードを(気合で)書きます。
外部ファイルの起動
FWindowsPlatformProcess::ExecProcess(TEXT(“起動したい.exeのパス”),
TEXT(“.exeの引数"),
&ReturnCode, &StdOut, &StdErr);
Open JTalkをUE4側から起動します。
C++側でExecProcess()を呼び出します。
必要なIncludeファイルは
#include "WindowsPlatformProcess.h"
https://docs.unrealengine.com/latest/INT/API/Runtime/Core/GenericPlatform/FGenericPlatformProcess/ExecProcess/index.html
ファイルパスの取得
フォルダパスを取得するにはFPathsクラスの関数を使用します。
プロジェクトのルートフォルダを取得する場合は
FPaths::GameDir()を使います。
今回はProjectName/Pluginsのパスが欲しいので
FPaths::ProjectPluginsDir()を使います。
これらの関数を使用すると、exe化前は
D:/EpicGames/UE_4.18/Engine/Binaries/Win64/
からの相対パスが帰ってきます。
.exe化した後は知らない。だれか教えて…
作成した.wavのインポート
UE4のImportボタンもしくは、
ファイルを直接D&Dでインポートしてください。
現在の開発状況いわゆる進捗
ダメです!
残り作業
現在、全体の完成度としては6割くらい。
残っている作業として、
・Grayちゃんの中の人の音声データを収録。
・収録した音声データから音響モデルを作成。
が完了すれば、形になるかな…?
・パラメータ調整
・音響モデル調整
・発声イントネーション調整
・欠損データ補完調整
・その他調整
・英語を読み上げれるように改良したい。
宣伝
Grayちゃん合成音声プラグイン
2017年12月公開(予定)
α版だけど
みんなで合成音声を使おう
まとめ
まとめ
スライド作った後に見つけたもの
http://isw3.naist.jp/~shinnosuke-t/pdf/Mthesis_ppt_takamichi.pdf
http://unicorn.ike.tottori-u.ac.jp/2007/s042011/paper/NLP_2008_03/PD3-1.pdf
スライド作成に参考にしたサイト
https://ja.wikipedia.org/wiki/%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90
https://answers.microsoft.com/en-us/windows/forum/windows_10-start/use-mobile-tts-voices-as-desktop-tts-voices/d6d9bffd-3c85-4669-941d-bf0cfb895915?auth=1
開発時に参考にしたサイト
http://d.hatena.ne.jp/rti7743/20111215/1323965483
https://denspe.blog.fc2.com/blog-entry-190.html
まとめ
・合成音声には、大きく分けて計算式から声を作る
フォルマント合成と元肉声の波形接続型音声合成の2つがある。
・UE4からOpen JTalkを呼び出して合成する
呼び出すにはExecProcess()を使う
・完成度6割(もうゴールしてもいいよね…)
・Open JTalkを使用する場合はWindows用にビルドして、
音響モデルを設定する。
・プラグインテンプレートを使って、
エディタを拡張する
ご静聴ありがとうございました。

More Related Content

What's hot

UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』
UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』
UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』Yuuki Ogino
 
UE4勉強会 in 大阪 - アニメーション基礎
UE4勉強会 in 大阪 - アニメーション基礎UE4勉強会 in 大阪 - アニメーション基礎
UE4勉強会 in 大阪 - アニメーション基礎com044
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計Masahiko Nakamura
 
C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて
C++コードはいらない!UE4で作るお手軽マルチプレイネットワークゲームについてC++コードはいらない!UE4で作るお手軽マルチプレイネットワークゲームについて
C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについてMasahiko Nakamura
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なことhistoria_Inc
 
ゆるゆるUE4ネットワーク入門
ゆるゆるUE4ネットワーク入門ゆるゆるUE4ネットワーク入門
ゆるゆるUE4ネットワーク入門ssuser221848
 
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!エピック・ゲームズ・ジャパン Epic Games Japan
 
UnrealBuildTool勉強会まとめ
UnrealBuildTool勉強会まとめUnrealBuildTool勉強会まとめ
UnrealBuildTool勉強会まとめShun Sasaki
 

What's hot (20)

UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』
UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』
UE4 Saitama 初心者向けハンズオン #5 『アニメーションモンタージュ(Slotアニメーション)でコンボを作る』
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
 
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
 
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
 
UE4におけるレベル制作事例
UE4におけるレベル制作事例  UE4におけるレベル制作事例
UE4におけるレベル制作事例
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
 
UE4勉強会 in 大阪 - アニメーション基礎
UE4勉強会 in 大阪 - アニメーション基礎UE4勉強会 in 大阪 - アニメーション基礎
UE4勉強会 in 大阪 - アニメーション基礎
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて
C++コードはいらない!UE4で作るお手軽マルチプレイネットワークゲームについてC++コードはいらない!UE4で作るお手軽マルチプレイネットワークゲームについて
C++コードはいらない!UE4で作るお手軽マルチプレイ ネットワークゲームについて
 
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem 猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法
 
ゆるゆるUE4ネットワーク入門
ゆるゆるUE4ネットワーク入門ゆるゆるUE4ネットワーク入門
ゆるゆるUE4ネットワーク入門
 
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
 
UnrealBuildTool勉強会まとめ
UnrealBuildTool勉強会まとめUnrealBuildTool勉強会まとめ
UnrealBuildTool勉強会まとめ
 

UnrealEngine4で合成音声を使いたい

Editor's Notes

  1. はい。では始めて行きます。 よろしくお願いします。 AR、VRと最新技術の話題が続きましたが、 私は最新じゃない話をします。 私のあとには、おかずさんのポロリもあるというのに… もーお腹痛い。 今回の内容はニッチというか、特殊なジャンルですので、 聞きなれない固有名詞が多く出るかと思います。 できるだけ、砕いて説明しますが、それでもよくわからないという場合は、 後ほど質問していただければと思います。 この講演の後にこのスライドを公開しますが、 その時は固有名詞の解説はないので、 今日来られてる方は家に帰ってスライドを見たときも、 こんな感じやったなってなると思います。 Unreal Engine4で合成音声を使いたい(願望)
  2. まずは自己紹介から。 えー、初めまして…じゃない人もそれなりにいらっしゃいますね…こんにちは! TwitterなどではMozPacaというハンドルネームで活動しています。 普段はゲーム開発をしたり、専門学校の先生をしながら生活しています。 サウンド関連に色々手を出してます。演奏する側であったり、いじる側であったりを趣味の範囲でやってます。 UE4に関するブログを細々と書いてます。 UE4触ってる期間は大体3年ほどですが、 触ってるだけなので、UE4は初心者です。 UE4初心者ー。
  3. 今回のお品書きです。 まずは全体の概要から入っていき、 私が現在開発しているものを基軸に合成音声とは何かを掘り下げていきたいと思います。 次に実際にどのように開発しているかを、UE4とUE4以外で説明できたらいいなぁって感じで進めていきます・ で、最後にゆるっと話をして、まとめて終わりって感じですね。
  4. では、早速内容の方を話していきたいと思います。 概要!
  5. 現在、私が開発しているものについてざっくりと説明します。 UE4のエディタから文章や各パラメータを入力し、 あらかじめ作成したGrayちゃんの音声データベースから、 発声データを取り出し、素片データを繋ぎ合成してWaveファイルに書き出すプラグインを作成しています。 と説明するとめちゃんこ分かりにくいので、 MozPacaはGrayちゃんの合成音声を作ってるんだと認識していただければいいかと思います。 Grayちゃんについて知らない方はオフィシャルサイトがあるので、是非見てください。 みんなでGrayちゃんを使おう。
  6. Grayちゃんの合成音声を作ってますとは言っても、 完全に0から色々作るのは大変なので、 今回の開発ではOpen JTalkという名古屋工業大学の 研究チームが開発した音声合成エンジンを使用します。 波形データの繋いだり、最終的なWaveファイルを書き出すのは Open Jtalkに全投げする形でやります。 基本的には音声データのパラメータ設定や、合成用の波形データベースの作成をこちらでやっていきます。
  7. 実際の使い方としてはこうなります。 拡張したエディタから、必要な情報を入力します。 読み上げて欲しい文章を入力、読み上げる速度や各種フィルタなどをかけて、 ボイス生成ボタンをクリックします。 UE4からOpen JTalkに全てのパラメータが渡され、 音声合成を行います。 作成された合成音声はWaveファイルとして書き出されます。 書き出されたWaveファイルはPluginフォルダの中のResourcesフォルダに書き出されます。 が 書き出し場所の指定と、自動インポートの設定を入れたいなと、 スライドを作ってるときに思いましたので、追加してみようと思います。 今は全部test.wavというふうに書き出されるので、 ここはリリースまでには書き出す名前を変更できるようにしておきます。
  8. 動画を用意しましたので御覧ください。 これは少し前のエピックフライデーのときに投稿したものです。 このプラグインについてというボタンをクリックすると、 外部ファイル起動の処理が走り、readmeテキストが開きます。 これは現在メモ帳からUE4のダイアログボックスに処理を書き換えています。 次に読み上げさせたい文章を文章入力欄にいれます。 文章が入力できたら、ボイス作成ボタンを押します。 そうするとですね、左側のフォルダの中にWaveファイルが生成されます。 これを再生してみます。 こんな感じで再生されます。 現在は拡張したエディタにパラメータなどが追加されています。
  9. なんでまたそんなものを作り始めたのかと言われると もともとUTAUという合成音声に歌わせるソフトがあるのですが、 それを趣味でやってたわけです。 数年前にUE4を触るようになり、 UE4で合成音声を使えたらいいなぁって、 IQ3の顔ぐらいで考えてたのがきっかけです。 そのときは合成音声の仕組みすら知らなかったんですけどね。
  10. えー、次に何人で開発してるかについてですが、 開発者の一覧を作成しましたので、一気に紹介したいと思います。 一人で開発しています。 ビバぼっち開発
  11. 開発は一人でやってますが、いろんな人に支えられて開発をしています。 関係者の人たちを この場で紹介したいと思います。 まず雲井さんですね。 書いてあるとおり、Grayちゃんの中の人です。 合成音声に使う予定の素片データの収録をお願いしています。 次にトゲトゲさんです。 Grayちゃんの生みの親です。 私が色んな理由で現地に行けないため、東の方で色々協力してもらってます。 あとはalweiさんですね。 UE4わからんってなった際に相談に乗ってもらってます。 …あわあわ(棒)
  12. 次にそもそも合成音声ってなんだろうねって話をしようと思います。 サブタイにもつけたので、この話がメインみたいなもんですね。 一言で合成音声と言ってもいくつかの種類があります。
  13. その中のフォルマント合成についてお話します。 フォルマント合成とは、録音された人間の音声を使用せずに波形計算を行うことで音声を作るものです。 一言で言うと人工的な声になります。 一般的に言われる合成音声は大体これですね。 フォルマント合成は 音声のデータに欠損がないので、早口で読み上げさせてもはっきりと聞こえる。 波形計算式から音声を作るのでデータのサイズが小さくなる。 読み上げ用のテキストデータを変更するだけで、話す言葉を簡単に変更することができる。 イントネーションや音色…まぁ声色ですね。それを変更することができる。 などの特徴があります。 しかし、人間の声っぽくしているとはいえ、 計算式から算出された波形データですので、 どうしても機械的な声に聞こえてしまうということも多々あります。
  14. 少し話が脱線しますが、 フォルマント合成の一種にArticulatory synthesis(アーティキュラトリ)、というのがあります。 これは人工的に人間の喉を再現して、合成音声を作成するものです。 我々人間の声は声帯…首の根本あたりで音が作られ、 声道…喉あたりで加工されたものが口から出力されています。 フォルマント合成は人間の喉の仕組みを真似て作成します。 まず、声帯にあたる仕組みから作成しましょう。 ノコギリ波が使われることもあるんですが、 合成音声向けのRosenberg波というものがあるので、 そちらを使って音を出します。 この状態だとブーという音になるんですが、 この音を加工して、声ってぽくします。 加工にはBPF、バンドパスフィルタを使います。 指定した範囲の周波数を目立たせる… 指定していない範囲の周波数を減衰させるフィルタです。 計算や音の加工などはUE4でも余裕で可能なため、 波形データの再生や、Waveファイルの生成がUE4側で可能であれば フォルマント合成をUE4でリアルタイムに再生するなどはできると思います。 もし、作ってみたいなぁって方は参考になりそうなサイトのURLをを貼り付けたので、 見てみてください。
  15. フォルマント合成を手軽に無料で生成することができるソフトが世の中には、 それなりの数あります。 その中でも代表的な2つを紹介しておこうと思います。 えー、「ゆっくりしていってね」でおなじみのSofTalk。 ニコニコ生放送などで読み上げに使われる棒読みちゃん、の2つです。 最近はゲームの実況動画などでもよく使用されているソフトです。 これらは株式会社Aquestが作成した、AquesTalkの技術をベースに、 波形データの生成を行っています。 他にもフォルマント合成をするためのソフトや、実用例などは ググってウィキペディってもらったらリストが載っていると思います。
  16. フォルマント合成音声の話もほどほどに。 波形接続型合成音声の話をしたいと思います。 波形接続型合成音声はフォルマント合成の人口的な声とは違い、 収録した人間の声をちぎって繋げ直した合成音声です。 メリットとしましては、 元が肉声のデータなので、ものすごく肉声に近い音声に合成することができます。 また、イントネーションの情報や、感情の違う読み上げ方をした音声データ追加することで、 さらに人間の声に近い合成音声にすることが可能です。 しかし、 元が肉声で発声データを管理するデータベースの情報量が結構えげつないことになります。 綺麗に発声するためには数十GBのデータが必要になります。 その影響で、音声データの収録もかなり大変です。 合成音声を販売している企業などでは、3時間ほどで収録できるようですが、 私は最低限のデータを用意するのに数日かかりました。最低限ですよ? またですね。 音声辞書や韻律辞書の作成が大変です。 漢字の読みを推測したり、イントネーションや、喋り方をある程度制御するためのものを 自作しようとすると死にますね。 私の場合は音声辞書の方はOpen JTalkにほとんど任せています。 あと、手直しですね。 フォルマント合成音声のように計算式を変更するだけでは、 音声データの変更はできません。 収録を行った人に再び収録に来てもらい、 データベースに再収録した音声データを追加してもらう必要があります。 デメリットの方が大きく見えますが、 その分ほんとに綺麗に発声してくれるので、 個人的にはものすごく好きな合成音声です。
  17. 波形接続型合成音声のイメージとしては怪文書が分かりやすいんじゃないかなと思います。 このような文章一文字一文字が、それぞれの音声データだと思ってください。 「お」という音声データのあとに「い」という音声データを続けて再生する。 そのあとは「し」ですね。 このように文章を一文字ずつ再生していくのが、波形接続型音声合成です。
  18. 先ほどの怪文書を波形データで表現してみました。 ひらがな50音+アルファを収録した音声データから、 文章に合わせて音声データを一つずつ並べていきます。 そして、再生速度や、イントネーション情報を追加することで、 あたかも人間が話しているかのような合成音声が出来上がります。
  19. この画像は業務用の合成音声で、よく使われている AITalkという(有償の(小声))音声合成エンジンの合成手順というか、 データベースから音声が合成されて出力されるまでのながれです。 この画像を使って、波形接続型音声合成の作成手順を説明します。 Open JTalkも大体同じ流れで出力されます。 流れとしては 読み込まれたテキストデータを解析します。 日本語には漢字、ひらがな、カタカナがありますので、 漢字だった場合は読みを推測したり、アクセントの付与などを行います。 次にですね、あらかじめ作成しておいたデータベースから、 韻律予測、言葉の強弱や、抑揚を予測します。 音声単位選択でデータベースの中から最適音声データを選択します。 必要な音声データ、言葉の強弱や、抑揚が揃ったら、 波形合成を行い、混ぜ込みわかめします。 そして、完成したWaveファイルが出力されるといった流れで 合成音声は作成されます。
  20. フォルマント合成音声と波形接続型合成音声の他にも 合成音声の作成手法というか、種類があります。 まず、先ほどチラッと話したArticulatory Synthesis(アーティキュラトリ)です。 これは人間の声道を人口的に再現するもので、フォルマント合成の一種です。 紹介するページをまともに作ってなかったので、このページに書きました。 次にハイブリットシンセサイズです。 名前で大体イメージつくかと思いますが、 フォルマント合成と、波形接続型合成音声を組み合わせた合成音声です。 波形接続型音声合成で起こる、音の欠損をフォルマント合成で補うように使用します。 非常に聞き取りやすい合成音声ではありますが、 フォルマント合成と波形接続型音声合成を両方行う必要があり、 またフォルマント合成では波形接続型音声合成で収録した人間の声にパラメータを近づける必要があります。 今回使用しているOpen JTalkなどで採用されている HMM-based synthsisです。 HMM…Hidden Markov Model(ヒドゥン マルコフ モデル)という確率論に基いて生成する音声合成です。 パラメータがHMMでモデル化されます。 わかりやすく言うと架空のキャラクターを作成し、このキャラクターがこうする確率はなんちゃらーということを行っています。 波形データもHMMが最尤法(さいゆうほう)に基いて生成します。 前準備がそれなりに大変ですが、使い勝手のいい私お気に入りの合成方法です。 最後にSinewave synthesis(サインウェーブ)です。 これについては使ったことが無いのでよくわからないのですが、 Rosenberg波やノコギリ波ではなく、純粋な正弦波をフォルマント合成するようです。
  21. 合成音声を自分のゲームに組み込みたいという方や、ちょっと触ってみたいと言う人向けに 無料で使える音声合成エンジンをまとめてみました。 まずはWindows8以降に標準で搭載されている音声合成エンジンのMicrosoft Haruka Desktopです。 Microsoft Haruka PlatformというエンジンがWindows vistaやWindows7で使用されていたのですが、 現在はSAPI5に対応しているMicrosoft Haruka Desktopに完全移行しています。 SAPI5というのはSpeech Application Programming Interface 5の略です。 Microsoftが開発したWindowsアプリケーションで音声合成を扱うためのAPIですね。 次にMicrosoft Ayumi Mobileです。 モバイル向けの音声合成エンジンです。 特徴として.netフレームワーク環境ではなく、UWP環境で動作します。 で、先ほど今回使ったエンジンはこれです!で紹介したOpen Jtalkですね。 Windowsで使用するにはWindows用にビルドする必要がありますが、 ライセンスや、収録した音声を引数から変更できるので、個人的に使い勝手がよかったです。 他にも音声合成エンジンはあるのですが、日本語に対応していなかったり、 色々紹介するのに不都合があったりしたので、興味のある方は調べてみてください。
  22. 合成音声の話はかなりしたので、 次は私が作成しているGrayちゃんの合成音声プラグイン(完成していない)の開発手順を 紹介と思います。 UE4の話も少しします。少し。
  23. 今回作成しているプラグインでは、 処理のほとんどをOpen Jtalkで行います。 ですので、 まずは、Open Jtalk.exeがどのように動くのかお話します。 OSごと、今回はWindows用にビルドした、 Open Jtalkを用意します。 また、ボイスデータである音響モデルや、読み上げ用のテキストも用意します。 Open Jtalk.exeの引数にパラメータや、音響モデル、テキストデータなどを加えて起動します。 正しく情報が受け取れれば、Waveファイルとして、合成音声が作成されます。
  24. 昔録画してたデータがあったので、動画でも見てみましょう。 左のフォルダにはOpen Jtalk.exe、音響モデル、テキストデータが入っています。 テキストデータを読み上げさせたい文章に書き換えます。 色々な引数を含めて、コマンドプロントから、Open Jtalk.exeを起動します。 すると、左のフォルダにwaveファイルが生成されます。 Open Jtalkはこのように合成音声を作成します。 UE4側からこの処理を呼び出して、Ue4で合成音声を使いましょう。
  25. Open Jtalkを使うためには、様々な前準備が必要です。 この前準備はかなり大変だったりします。 まずは音声の収録からお話します。 音声の収録についてです。 先ほどもお話しましたが、Open Jtalkでは HMMの音響モデルが必要になります。 これを作成する前準備として、 音響モデルのモデルとなるボイスデータを収録します。 収録用の文章として、私はATR503文を使用します。 ATR503文とはですね。 2音素連鎖を402種類、3音素連鎖を223種類含んだ文章です。 音素連鎖とは発生した音と音の繋ぎの部分のことです。 例えば「あ」から「り」と言うのと「あ」から「く」と言うのを続けて発生すると、それぞれ 音が遷移する間の波形が違います。 ATR503文はそれらの音素連鎖を2種と3種をバランスよく含んだもので、 この503文を読み上げたデータを使うことで、 比較的安定した音声データベースを作成することができます。 収録時の注意として、 収録される側、声優さんは、はっきりした発音かつ 一定の音程で等速に読み上げる必要があります。 また、48000Hzで収録します。 これはですねOpen Jtalkの仕様上こちらの方が扱いやすいからです。 あとモノラルじゃないとダメ、とか エンコードとかも16bitにしてねとか色々トラップがあるので、注意してください。 私は何回か引っかかって依頼用のサンプルを取り直しました。 音素連鎖に関しては音素配列論という、音韻論のいち分野にあたるので、 気になった方は調べてみてください。 下の方に書いてある、 あらゆる 現実を すべて 自分の ほうへ ねじ曲げたのだ。 というのはATR503文の一番最初の文章。A01です。 こんな感じの文章が503個続きます。
  26. 収録した音声から音響モデルを作成していきます。 正直なところ、この音響モデルを制作するというのが、 一番むずかしいと思います。 この話だけで数時間話せそうなくらい、 面倒な手順と細心の注意が必要になります。 また、Windows環境では上手く作成できなかったので、 私はLinuxを使用しました。ディストリビューションはubuntuです。 当然というか、まぁ端末、Windowsでいうところのコマンドプロントを ひたすら叩き続けることになります。そういうのが苦手な人は慣れてください。私も苦手です。 ざっくりと手順だけ紹介します。 まずは収録した音声データを音響モデルに読ませるための音素ラベルファイルに変換します。 次に音響モデルの学習に必要なデータを作成します。 音響モデルの学習を開始する 完成。 たった4手順ですね。 学習に必要なデータ、音素ラベルファイルへの変換の仕方は 下のURLのサイトに全部書いてあるので、参考にどうぞ。 かなり根気のいる作業ですので、やってみよう方はまじで頑張ってください。
  27. はい。やっと来たUE4のお話。 開始○分で初UE4の話題ですね。 そろそろUE4勉強会であるということを忘れそうでした。 UE4側ではどんな処理を行っているかについてお話します。
  28. 基本的にはOpen Jtalk全投げスタイルなので、 エディタをちょろっといじって、Open JtalkのパラメータをUE4から渡せるようにします。 まずはパラメータを渡したり合成をエディタ側から行うために プラグインを作成します。 UE4エディタ左上のEditからPluginsを選択してください。
  29. Pluginsタブが開いた右下にあるNew Pluginsボタンをクリックします。
  30. New Pluginsボタンをクリックするとプラグインのテンプレート選択画面になります。 プロジェクト作成時のテンプレートと同じようにある程度プラグインとして、 機能するテンプレートが用意されています。 非常に楽です。 もーUE4好き。
  31. 私の好き嫌いは置いておいて、今回使用するテンプレートは Editor Standalone Windowテンプレートです。 このテンプレートを選択してプラグインを作成すると、 エディタ上で扱えるタブを追加することが出来ます。
  32. プラグインを作成したら、 作成したプラグインを有効にしておきます。 恐らくデフォルトで有効になっていると思いますが、 Project/Otherの中にある自分のプラグインのEnabledにチェックをいれ、 エディタを再起動します。
  33. プラグインが有効になっていると、 ビューポートの上にあるプラグインの名前の入ったアイコン、 もしくは、エディタ左上のWindowからプラグインの名前の箇所を選択すると、 右の画像のようなタブが出ます。 画像は開発している途中のタブなので、色々書かれていますが、 作成したばかりのタブはもう少しシンプルな感じです。
  34. プラグイン作成によって新しいタブを出せるようになったので、 そこに追加する情報をまとめていきます。 こんな感じにしたら使いやすいかなーとか考えながら、 UI設計とか必要パラメータをまとめていきます。 今回は縦長のUIにした方が使いやすそうだなと思い、画像のように作っていきたいと思います。 私はノートにまとめる派なので、毎回こんな感じでノートに書き込んでいきます。
  35. ある程度まとめることができたら、 ソースを書きます、気合で。ごりごり書きます。 基本的には、SlateでInputBoxを追加したり、 エディタ側から受け取ったパラメータを変数に格納したりしてます。 今回重要なのはここではないので、というか私があまりSlateに詳しくないので割愛します。 今回重要なのは、Open JTalkにパラメータを渡し、Open JTalk.exeを起動することです。
  36. Open JTalkをUE4のエディタから起動します。 UE4側からOpen JTalkを呼び出すには、 C++からExecProcess関数を使用します。 この関数を使用するには、 Window Platform Process.hが必要になりますので、 Includeしてください。 公式ドキュメントのURLを貼り付けておいたので、詳しい使用方法などはそちらを スライド公開後に参考にしてください。
  37. ExecProcess関数を使用するには、起動したいexeのパスが必要になります。 そこで、UE4のFpathsクラスにある関数を使用します。 UE4のFPathsクラスにはSavedフォルダや、configフォルダなどUE4周りのファイルパスを取得する関数があります。 例えばプロジェクトフォルダ、uprojectがあるフォルダパスは FPaths::GameDir()を使います。 今回はPluginsフォルダの中に指定ファイルを置いているので、 Fpaths::ProjectPluginDir()関数を使っています。 これらの関数なんですが、私の環境の場合は D:/EpicGames/UE_4.18/Engine/Binaries/Win64/ の相対パスがリターンされます。 この値をExecProcess関数で使用します。 今回はエディタオンリーのプラグイン制作なので、 UE4をexe化したあとはこの値がどうなるのかは知りません。 先ほど公演されてた平良さんが極稀に更新すると言っていた、 ブログにもこの関数の話が出ていたと思います。
  38. Open Jtalkを起動すると、 Waveファイルが作成されます。 作成されたWaveファイルをインポートして使ってください。 これで合成音声をUE4で使うことができます。
  39. みんな大好き進捗のお話です。 現在の開発状況、いわゆる進捗。
  40. 全体の完成度としては6割…いや、4割くらい… いや!6割です。 残っている作業として、 既に雲井さんにお願いしている音声データの収録と、 音声データが届き次第、編集してデータベースに突っ込んで音響モデルにする作業が 終わればGrayちゃんの合成音声としてある程度形になるんじゃないかと思います。 ある程度形になったとしても、 パラメータの調整とか、音響モデルの調整とか、 韻律調整、欠損データ補完など色々することはあるわけで、 まぁこれからって感じですかね。 あと、最終的な目標ですが、グローバルしゃかいですから、 英語を読み上げれるにしたいなと思います。
  41. で、ここで少し宣伝なんですが、 このGrayちゃんの合成音声プラグインのα版をですね。 今年中に出したいなと考えてます。 ちょっと色んな事情で音声収録が遅れているので、 Grayちゃんの声を扱えるようになるまで、少し時間がかかりそうなんですが、 ひとまず、UE4で合成音声をお使うためのプラグインとして、リリースしたいなと思います。 ソースも公開する予定なので、皆さんでいい感じに触ってもらえると嬉しいです。はい。
  42. あ、もうまとめか… じゃあまとめます。
  43. 私が合成音声を作成する際に色々参考にしたサイトです。 開発しているときに参考にしていたサイトはたくさんあるのですが、 紹介しきれないので、少しだけ紹介します。 一番上から 私が合成音声の開発時に参考にしたサイト。 スライドを作る際に参考にしたサイト 昨日見つけた面白そうなサイト です。 紹介すると言ってもURLを貼っておくので、このスライドが公開されたら見てみてくださいって感じになりますけどね。
  44. はい。まとめていきます。 合成音声には人工的に人間の声を再現するフォルマント合成と、 人間から抽出した音声データから作成する波形接続型音声合成の2つがあります。 Open Jtalkを使用する場合にはダウンロードしてから、 Windows用にビルドして、読み上げ用の音響モデルを作成し、設定しましょう。 私は最近、雲井さん…Grayちゃんの中の人ですね。 雲井さんの声の波形データとにらめっこしてます。 はたからみたら、重度のストーカーだと思われそうです。 UE4側でプラグインを作成し、 エディタを拡張します。 音響モデルを作成したら、UE4側からExexcProcess関数を使って、 Open JTalkを呼び出しましょう。 パスの指定も忘れずに。 私のプラグイン、完成度6割。 こんな感じでしょうか。 あんまりUE4っぽい話はしてませんが、 合成音声は非常に面白いので、 皆さんにも個人のゲーム開発などで使って欲しいなと思います。
  45. ご静聴ありがとうございました。