2016年1月8日金曜日

VOCALOID SDK for Unity でユニティちゃんをリアルタイムに歌わせる方法

How to make unity-chan sing songs #2 (Realtime mode)


2015年12月に公開された VOCALOID SDK for Unity とそれに付属するランタイム版ユニティちゃん歌声ライブラリを使うと ゲームエンジンUnity3D(以下Unity)でユニティちゃんを歌わせることができます。
前回は VOCALOID SDK for Unity でvsqxファイルを歌わせるPlayback モードについてブログを書きました。
VOCALOID SDK for Unityでユニティちゃんにvsqxを歌わせる方法

今回はRealtime モードで歌わせる方法を試してみました。

© UTJ/UCL


環境

・Windows8.1
・Unity 5.3.1f1 Personal版


VOCALOID SDK for Unityをダウンロードする

「Unity with VOCALOID」特設サイト
http://business.vocaloid.com/unitysdk/
からVOCALOID SDK for Unityをダウンロードします。
ファイルはunitypackage形式です。


UnityのプロジェクトにVOCALOID SDKをインポートする

Unityを起動して適当なプロジェクトを作ります。
ダウンロードしたunitypackage形式のVOCALOID SDK for Unityをダブルクリックしてインポートします。


エラーが発生したら

動作確認のためVOCALOID SDKのインポート直後にゲームを開始してみたら次のエラーが起きました。
Assets/Editor/PostProcessBuild.cs(14,19): error CS0234:
The type or namespace name `iOS' does not exist in the namespace `UnityEditor'. Are you missing an assembly reference?

UnityDownloadAssistant の最新版を公式サイトからダウンロードして起動し
iOS.Build.Support
の追加オプションをインストールしたらエラーがなくなりました。


SceneにAudioSourceとスクリプトを追加する

VOCALOID SDK for Unity でユニティちゃんに歌わせるには最低でも次の2つのコンポーネントが必要です。
  • Audio Source
  • VOCALOID SDK for Unity のAPIを呼び出すスクリプト
  • Audio Listner
Audio ListnerはデフォルトでSceneのMain Cameraにアタッチされているので説明は省きます。

今回はSceneにEmptyオブジェクトに配置してこれらのコンポーネントをアタッチします。
メニューの
GameObject - Create Empty
を実行してEmptyオブジェクトを追加します。
HierarchyにGameObjectが追加されるのでInspectorからAudio Sourceをアタッチします。

次にスクリプトを追加してGameObjectにアタッチします。
ProjectにC#のスクリプトを MyScript2.cs というファイル名で 追加し、GameObjectにアタッチします。
今回はレイテンシー(遅延)がわかりやすいようにマウスのクリックで発音するようにしました。

MyScript2.cs


これでゲームを実行すると、Gameウィンドウをクリックするたびにユニティちゃんが「ゆにゆににしてやんよ」と歌います。(「ミクミクにしてあげる」の替え歌)
Realtimeモードでは、歌声が流れる間スクリプトのInspectorにオーディオのレベルメーターが表示されます。


APIを扱う際の注意点

VOCALOID API for Unity は全て YVFクラス を通して扱います。
YVF.YVFRealtimeStart() を実行したらそのアプリが終了するまでに YVF.YVFShutdown() を実行してシャットダウンする必要があります。
YVFOpenSong() を実行したらそのアプリが終了するまでに YVF.YVFRealtimeStop() を実行してリアルタイム合成を停止する必要があります。
シャットダウンや停止を忘れるとリソースが解放されないようで、Unityを再起動するまで挙動がおかしくなります。
YVFクラスのメソッドが正常に実行できなくなったらUnityを再起動してください。


Realtimeモードの留意点

Playbackモードと違い、vsqxファイルは不要です。
高度な歌声を合成するにはMIDIデータフォーマットの知識が必要です。

バッファーサイズによってレイテンシーが大きく変わります。
YVF.YVFRealtimeSetStaticSetting(YVF.YVFRealtimeMode.Mode1);
でバッファー最小・低レイテンシ、高負荷
YVF.YVFRealtimeSetStaticSetting(YVF.YVFRealtimeMode.Mode5);
でバッファー最大・高レイテンシ、低負荷

ボーカロイドは歌詞の「は」は常に「は」と発音します。助詞の「は」は「わ」に文字を置き換える必要があります。
「こんにちは」と歌わせるなら歌詞を「こんにち」に設定する必要があります。


関連ブログ

VOCALOID SDK for Unityでユニティちゃんにvsqxを歌わせる方法
[Unity3D] オーディオの音量が小さく再生されるトラブルと直し方
[Unity3D] 透視投影と平行投影を合成するには [ユニティちゃん]
[Unity3D] サイドバイサイドで立体視できるゲームを作るには [クエリちゃん][ユニティちゃん]
[Unity3D] ユニティちゃんたちのアニメーションを分離するスクリプト
Blenderで作ったアニメーションがUnity3Dで違う動きをする原因と直し方
[Unity3D] 画面表示を左右反転させる方法
[Unity3D] 二つのscene(シーン)を一つにまとめる方法
[Unity3D] Unity5のアプリをAndroid Studioにインポートする方法
[Unity3D] ゲーム画面をキャプチャしてMovie Studioで動画に編集する

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿