多趣味ブログ

いろいろな事を広く浅く楽しむブログ

VOCALOID SDK for Unityのメソッド見ていくメモ

   

vocaloidfulogo

サンプル読みながら書きました。

ボカロはほぼ知らないです。ミクだけあるけど。

Playbackモードの処理フロー

ボカロエンジンには2種類あって1つが譜面通り歌うタイプ、もう1つがリアルタイムで発声するタイプ。

今回は前者のPlaybackモードを使用します。

YVFクラスのメソッドを順番に実行しながら音声を合成するのが基本の流れ。

  1. YVFStartup()
  2. YVFSetStaticSetting()
  3. YVFOpenSong()
  4. シーケンスロード、編集など(ボカロ設定、楽譜読み込みetc…)
  5. YVFSetupMidiEventsToEONInPart()
  6. YVFBeginRender()
  7. YVFRender()
  8. YVFEndRender()
  9. YVFClearMidiEventsInPart() //4に戻ったりする
  10. YVFCloseSong() //3に戻ったりする
  11. YVFShutdown()

4番がプログラム的にはやること多いんですが、今回は.vsqxファイルを読み込んでしまおうかと。

サンプルプロジェクト(PlayBackシーン)を見ながらざっくりと使用メソッドをとりあげていきます。

だいたいリファレンスから引っ張ってます。

YVF.YVFStartupメソッド

public static YVF. YVFResult YVFStartup(
	string targetName,
	string path
)

YVFクラスの初期化を行うメソッド。

targetNameは”personal”で固定、pathはボカロが使用するDB_iniフォルダのパスです。通常であればAssets>StreamingAssets>VOCALOID>DB_iniにあるかと。

戻り値はYVFResultという列挙型です。例外処理で使用。

YVF.YVFSetStaticSettingメソッド

public static YVF. YVFResult YVFSetStaticSetting(
	int length
)

Playbackモードでエンジンを起動するメソッド。

lengthで起動する歌声合成エンジンの数を指定します。1~16個まで可能。またこれがそのままエンジンハンドルNo.になります。3なら0~2ですね多分。

戻り値はYVF.YVFStartupメソッドと同じなので省略。後もたくさん出てきますがそれも省略します。

YVF.YVFOpenSongメソッド

public static int YVFOpenSong()

ソングをオープンします。(原文ママ)

よくわかりませんがソングハンドルを返してくれます。

ソングハンドルは後のメソッドでたくさん使用します。

YVF.YVFLoadVSQXFileメソッド

public static YVF. YVFResult YVFLoadVSQXFile(
	int handle,
	string filePath
)

VSQXファイルをロードしてくれる神メソッドです。

handleで上のYVFOpenSongで取得したソングハンドルを指定、ファイルパスはフルパス。

複数のVSQXファイルを読み込んで合掌したいとかいう場合はそれぞれ新しいソングをオープンする必要があるということですね。

我が家にはボカロエディタが無いので詳しい事がわからないのですが、適当に拾ってきた.vsqxファイルでテストしたいときはwavPartの記述があると読み込みエラーが発生するので、その場合はコメントアウトしておくとよいかと。

YVF.YVFFindTempoInMasterメソッド

public static YVF. YVFFindResult YVFFindTempoInMaster(
	int handle,
	int time,
	out YVF. YVFTempo tempo
)

本筋とはあまり関係ありませんが、サンプルに出てきたメソッドを順番に。

検索開始位置以降の最初のテンポを検索します。(原文ママ)

handleはソングハンドル、timeは検索開始位置(tick単位)、YVF. YVFTempo構造体でout。

多分検索開始位置というか検索位置のBPMを返すと思うんですけど。

VSQXファイルを読み込むなら記載あると思うから要らない気がするんですが。どうなんだ。

YVF.YVFFindPartメソッド

public static YVF. YVFFindResult YVFFindPart(
	int handle,
	short track,
	int time,
	out YVF. YVFPartHead partHead
)

パートを取得するメソッド。

handleはソングハンドル、trackはトラックナンバー、timeは検索開始時間(tick)。

outでパートヘッダをYVF. YVFPartHead構造型で取得。

YVF.YVFSetSingerInPartメソッド

public static YVF. YVFResult YVFSetSingerInPart(
	int handle,
	int partHandle,
	ref YVF. YVFSinger singer
)

シンガーを設定するメソッド。

handleはソングハンドル、partHandleはYVF. YVFPartHead.partHandleから取得できます。

singerはYVF. YVFSinger構造型を参照渡し。シンガーの設定が入ってますが今はunityちゃんしか選べないですね。

 

YVF.YVFSetupMidiEventsToEONInPartメソッド

指定パートのVOCALOID MIDIデータを元に、フレームインデックスとの対応データをセットアップします。

public static YVF. YVFResult YVFSetupMidiEventsToEONInPart(
	int handle,
	int partHandle,
	int startTick
)

フローの本筋に戻ってきてこのメソッド。なにを言ってるのかわからないですね。

handleはソングハンドル、partHandleはパートハンドル(パートヘッダのメンバから取得)、startTickはセット時間でしょうか。

partHandleで指定したパートをhandleで指定したソングのstartTickの位置にセットする、って事ですかね?

YVF.YVFGetTotalFrameByPartメソッド

public static int YVFGetTotalFrameByPart(
	int partHandle
)

指定パートをレンダリングした時の総フレーム数を取得するメソッド。

BPMとTickからなんかいろいろしてくれてそうな気がします。

YVF.YVFBeginRenderメソッド

public static YVF. YVFResult YVFBeginRender(
	int engineHandle
)

レンダリング準備を行うメソッド。

engineHandleで指定したエンジンでレンダリング準備します。

エンジンハンドルはYVF.YVFSetStaticSettingメソッドで一応出てきてますね(記憶にない)

YVF.YVFRenderメソッド

public static YVF. YVFResult YVFRender(
	int partHandle,
	short[] renderingData,
	int targetSamples,
	int engineHandle,
	out int renderedSamples
)

レンダリングするメソッドです。

partHandleはパートハンドル、renderingDataは取得データの先頭ポインタ(????)、ターゲットサンプルは総サンプル数(1フレーム256サンプルらしい)、engineHandleはエンジンハンドル、renderdeSamplesは処理したサンプル数。

まるでわけがわかりませんのであとまわし。

YVF.YVFEndRenderメソッド

public static void YVFEndRender(
	int engineHandle
)

Playbackモードのレンダリング終了メソッド。

YVF.YVFClearMidiEventsInPartメソッド

public static YVF. YVFResult YVFClearMidiEventsInPart(
	int handle,
	int partHandle
)

指定パートのフレームインデックスとの対応データをクリアするメソッド。

引数はソングハンドルとパートハンドル。

YVF.YVFCloseSongメソッド

public static void YVFCloseSong(
	int handle
)

ソングをクローズするメソッド。

handleはソングハンドルですね。

YVF.YVFShutdownメソッド

public static YVF. YVFResult YVFShutdown()

YVFを終了するメソッドです。

とりあえずこんなところで

まるで意味が分からんのが幾つかありましたが、とりあえずplaybackモードで.vsqxファイル読み込んで再生するってのは何とかなりそうですね。

適当に組んでみたいと思います。

 - Unity, VOCALOID, おぼえ書き