2017年7月13日星期四

MMDAgent :: 檔案格式

前言


在上一篇已經說了 MMDAgent "Sample Script" 中不同檔案的作用和內容了, 所以在本篇就主要會介紹那些檔案的書寫格式, 還有如何去改寫它們的內容。

".FST"檔的格式

在".Fst"檔的指令當中, 一般都會有分成 4 個區域 (Field)。
  • 第一區域 (1st Field) 主要是有關初始狀態, 就是該項目最原始的狀態。
  • 第二區域 (2nd Field) 主要是有關最終狀態, 就是該項目完成命令後的狀態。
  • 第三區域 (3rd Field) 主要是有關於指令輸入, 就是你想要 MMDAgent 作出什麼行動。
  • 第四區域 (4th Field) 主要是有關於回應輸出, 就是 MMDAgent 作出了什麼几行動。

以下將會逐個部分作出例子...

與 Model 相關的:
  • MODEL_ADD | (model alias) | (model file name) | (x position), (y position), (z position) | (x rotation), (y rotation), (z rotation) | (ON or OFF for cartoon) | (parent model alias) | (parent bone name)

<*Example*> MODEL_ADD|メイ|Model\mei\mei.pmd|0.0,0.0,-14.0|0.0,0.0,0.0|OFF

解釋: 如果指令讀取成功的話, 系統便會把"メイ"這個單位和"mei.pmd"這個單位畫上等號。期次, 在以上的例子中我並沒有加入 Parent Model Alias 和 Parent Bone Name, 這是因為"メイ"並沒有任何親本模型, 而且這點又和默認的指令相同。所以把指令跳過不輸入也是可以的。

  • MODEL_CHANGE | (model alias) | (model file name)

<*Example*>MODEL_CHANGE|メイ|Model\IA\IA.pmd

解釋: 如果指令讀成功的話, 系統便會把"メイ"這個單位, 從"mei.pmd"給轉換成為"IA.pmd"。

  • MODEL_DELETE | (model alias)

<*Example*>MODEL_DELETE|メイ

解釋: 如果指令讀成功的話, 系統便會把對應的模型從任務中移除。如果按照以上例子來說的話, 系統便會把"メイ"也就是"IA.pmd"移除出該任務中。

  • MODEL_EVENT_ADD | (model alias)
  • MODEL_EVENT_CHANGE | (model alias)
  • MODEL_EVENT_DELETE | (model alias)

與 Motion 相關的:
  • MOTION_ADD | (model alias) | (motion alias) | (motion file name) | (FULL or PART) | (ONCE or LOOP) | (ON or OFF for smooth) | (ON or OFF for repos)

<*Example*> MOTION_ADD|メイ|Wait|Motion\Wait\wait.vmd|FULL|LOOP|ON|OFF

解釋: Full / Part 的意思是要使用模型的全部骨架還是部分骨架, Smooth 的作用是令到模型在轉換動作更加流暢, Repos 就是 Reposition 的意思, 也就是當模型完成任務時把模型的骨架撤回原點(Center)。

  • MOTION_ACCELERATE | (model alias) | (motion alias) | (speed) | (duration) | (specified time for end)

<*Example*> MOTION_ACCELERATE|メイ|Wait|Motion\Wait\wait.vmd|5.0|2.0|1.0

解釋: 如果指令讀取成功的話, 系統便會把模型以正常速度運作1秒, 之後再進行加速。 Speed 是以動作的當前速度去以倍數增加, Duration 其實我並不覺得它是維持時間用的指令, 因為這個指令的作用是減慢加速速度, 而不是控制加速的持續時間, Specified time for end 反而更像是持續時間用的, 不過他的用法是倒置的(像是冷卻時間)。

  • MOTION_CHANGE | (model alias) | (motion alias) | (motion file name)

<*Example*> MOTION_CHANGE|メイ|Wait|Model\Laugh\Laugh.vmd

解釋: 如果指令讀取成功的話, 系統便會把"Wait"這個動作, 從"wait.vmd"給轉換成"Laugh.vmd"。

  • MOTION_DELETE | (model alias) | (motion alias)

<*Example*> MOTION_DELETE|メイ|Wait

解釋: 如果指令讀取成功的話, 系統便會直接把對應的動作從任務中移除。如果按照以上例子來說的話, 系統便會把"Wait"也就是"Laugh.vmd"移除出該任務中。

  • MOTION_EVENT_ADD | (model alias) | (motion alias)
  • MOTION_EVENT_ACCELERATE | (model alias) | (motion alias)
  • MOTION_EVENT_CHANGE | (model alias) | (motion alias)
  • MOTION_EVENT_DELETE | (model alias) | (motion alias)

與 Move And Rotate 相關的:
  • MOVE_START | (model alias) | (x position), (y position), (z position) | (GLOBAL or LOCAL position) | (move speed)

<*Example*> MOVE_START|メイ|0.0,10.0,0.0|GLOBAL|2.0

解釋: 如果指令讀取成功的話, 系統便會把模型以兩倍速向中心點(Center)為本的 0.0, 10.0, 0.0 坐標移動, GLOBAL 是指以原點(Center)作為中心點, 而 LOCAL 則是以模型骨架(Model Bone)作為中心點。換言之, 若果使用 GLOBAL 指令的話, 不論執行多少次, 模型也只會移動一次, 並且停留在坐標 0.0, 10.0, 0.0 處, 但如果是用 LOCAL 去執行指令的話, 模型就會不停地向自己的 Y 軸 10.0 方向移動, 每執行一次就會移動一次。

  • MOVE_STOP | (model alias)

<*Example*> MOVE_STOP|メイ

解釋: 如果指令讀取成功的話, 系統便會把移動中的模型停止。

  • MOVE_EVENT_START | (model alias)
  • MOVE_EVENT_STOP | (model alias)
  • TURN_START | (model alias) | (x position), (y position), (z position) | (GLOBAL or LOCAL position) | (rotation speed)

<*Example*> TURN_START|メイ|0.0,10.0,0.0|GLOBAL|2.0

解釋: 如果指令讀取成功的話, 系統便會把模型緩慢地向後翻, 並在到達適當位置時停止(Global)。如果在 Local 的情況下, 模型(mei)便會緩慢地向後翻並永遠都不會停止。TURN 的坐標次序為 (X, Y, Z)。(尚未知道 Z 軸的作用, X, Y, Z 軸是分別代表 "左右軸", "上下軸" 和 "前後軸")。(我稱之為注視點角度轉向)

  • TURN_STOP | (model alias)

<*Example*> TURN_STOP|メイ

解釋: 如果指令讀取成功的話, 系統便會把轉向中的模型停止。

  • TURN_EVENT_START | (model alias)
  • TURN_EVENT_STOP | (model alias)
  • ROTATE_START | (model alias) | (y rotation), (z rotation), (x rotation) | (GLOBAL or LOCAL rotation) | (rotation speed)

<*Example*> ROTATE_START|メイ|10.0,0.0,0.0|GLOBAL|2.0

解釋: 如果指令讀取成功的話, 系統便會把模型緩慢地向前傾斜, 並在到達適當位置時停止(Global)。如果在 Local 的情況下, 模型便會緩慢地向前傾斜並永遠都不會停止。TURN 的坐標次序為 (Y, Z, X)。( Z 軸的作用和 TURN 的 Y 軸作用相同。(ROTATE 的轉速比 TURN 的慢)(我稱之為直接角度轉向)

  • ROTATE_STOP | (model alias)

<*Example*> ROTATAE_STOP|メイ

解釋: 如果指令讀取成功的話, 系統便會把轉向中的模型停止。

  • ROTATE_EVENT_START | (model alias)
  • ROTATE_EVENT_STOP | (model alias)

與 Sound 相關的:
  • SOUND_START | (sound alias) | (sound file name)

<*Example*> SOUND_START|IA_Concert|Music\Vocaloid\IA\IA_Concert.mp3

解釋: 如果指令讀取成功的話, 系統便會開始播放 IA_Concert。

  • SOUND_STOP | (sound alias)

<*Example*> SOUND_STOP|IA_Concert

解釋: 如果指令讀取成功的話, 系統便會停止播放 IA_Concert。

  • SOUND_EVENT_START | (sound alias)
  • SOUND_EVENT_STOP | (sound alias)

與 Stage 相關的:
  • STAGE | (stage file name)

<*Example*> STAGE|Building

解釋: 如果指令讀取成功的話, 系統便會加載場景"Building"。(主要檔案格式為".pmd")

  • STAGE | (bitmap file name for floor), (bitmap file name for background)

<*Example*> STAGE|Stage\building2\floor.bmp,Stage\building2\background.bmp

解釋: 如果指令讀取成功的話, 系統便會加載 MMDAgent_Example 的背景。(主要檔案格式為 ".bmp"))

與 Light 相關的:
  • LIGHTCOLOR | (red), (green), (blue)

<*Example*> LIGHTCOLOR|0.0,90.0,0.0

解釋: 如果指令讀取成功的話, 系統便會把屏幕畫面將會轉為綠色。(此功能是利用三原色的不同度數去互相作配合而製作顏色。)

  • LIGHTDIRECTION | (x position), (y position), (z position)

<*Example*> LIGHTDIRECTION|0.0,90.0,0.0

解釋: 如果指令讀取成功的話, 系統便會把照射模型的光源轉到去模型的正上方。(可以從模型改變了的影子判斷而出。(尚未知道 Z 軸的作用。)

與 Camera 相關的:
  • CAMERA | (x position), (y position), (z position) |(y rotation), (x rotation), (z rotation) | (distance) | (fovy)(field of view, y axis) | (time)

<*Example*> CAMERA|0.0,15.0,0.0|0.0,15.0,0.0|5.0|5.0|5.0

解釋: 此指令的坐標次序為 X, Y, Z, 迴轉次序為 Y, X, Z (未知道坐標 Z 的作用, 只知道使用後鏡頭和目標距離會縮短。 迴轉 Z 的作用為旋轉)。(Fovy 的作用為"指定視野的垂直方向核")

  • CAMERA | (motion file name)

<*Example*> CAMERA|Camera\Camera.vmd

解釋: 如果指令讀取成功的話, 系統便會把鏡頭跟隨著在 Camera.vmd 內已儲存好的資料作出相關的控制。
與 Speech recognition 相關的:
  • RECOG_EVENT_START
  • RECOG_EVENT_STOP | (word sequence)
  • RECOG_MODIFY | GAIN | (ratio)
  • RECOG_MODIFY | USERDICT_SET | (dictionary file name)
  • RECOG_MODIFY | USERDICT_UNSET
  • RECOG_MODIFY | CHANGE_CONF | (config file name)

根據 MMDAgent 版本 1.7 更新說明, 有關 RECOG_MODIFY 的作用都是用來改變語音識別配置的。(Change configuration of speech recognition.)(由於未有詳細研究, 因此說明不多。)

與 Speech synthesis 相關的:
  • SYNTH_START | (model alias) | (voice alias) | (synthesized text)

<*Example*> SYNTH_START|メイ|mei_voice_normal|こんにちは。

解釋: 如果指令讀取成功的話, 系統便會使用 mei_voice_normal 的聲音開始語音合成。

  • SYNTH_STOP | (model alias)

<*Example*> SYNTH_STOP|メイ

解釋: 如果指令讀取成功的話, 系統便會停止合成中的語音。

  • SYNTH_EVENT_START | (model alias)
  • SYNTH_EVENT_STOP | (model alias)
  • LIPSYNC_START | (model alias) | (phoneme and millisecond pair sequence)

<*Example*> LIPSYNC_START|メイ|こんにちは。

解釋: 如果指令讀取成功的話, 系統便會根據指令中的文字而合成相關的嘴唇模型動作。

  • LIPSYNC_STOP | (model alias)

<*Example*> LIPSYNC_STOP|メイ

解釋: 如果指令讀取成功的話, 系統便會停止合成相關的嘴唇模型動作。

  • LIPSYNC_EVENT_START | (model alias)
  • LIPSYNC_EVENT_STOP | (model alias)

有關 LIPSYNC 的作用是用來合成嘴唇模型動作的, 通常是用於 OpenJTalk 的插件內部調整。而且此指令的作用已經包含了在 SYNTH 的指令中, 所以正常來說是沒什麼機會可以使用到此指令。(要體驗此指令的話, 是需要把系統語言設置成日文。否則會導致指令失去作用)

與 Variable 相關的:
  • VALUE_SET | (variable alias) | (value)

<*Example*> VALUE_SET|X|1

解釋: 此指令的作用就等同於宣告出 X = 1。

  • VALUE_SET | (variable alias) | (minimum value for random) | (maximum value for random)

<*Example*> VALUE_SET|X|1|9

解釋: 此指令的作用就等同於宣告出 X = 1 ~ 9 中的隨機一個數。

  • VALUE_UNSET | (variable alias)

<*Example*> VALUE_UNSET|X

解釋: 此指令的作用就等同於重設 X 的定義。

  • VALUE_EVAL | (variable alias) | (EQ (Equivalent With) or NE (Not Equivalent With) or LE (Less Than Or Equivalent With) or LT (Less Than) or GE (Greater Than Or Equivalent With) or GT (Greater Than) for evaluation) | (value)

<*Example*> VALUE_EVAL|X|LE|10

解釋: 此指令的作用就等同於宣告出 X <= 10 的任何數字(Less Than Or Equivalent With 10)

  • VALUE_EVENT_SET | (variable alias)
  • VALUE_EVENT_UNSET | (variable alias)
  • VALUE_EVENT_EVAL | (variable alias) | (EQ (Equivalent With) or NE (Not Equivalent With) or LE (Less Than Or Equivalent With) or LT (Less Than) or GE (Greater Than Or Equivalent With) or GT (Greater Than) for evaluation) | (value) | (TRUE or FALSE)
  • TIMER_START | (count down alias) | (value)

<*Example*> TIMER_START|CountDown|5

解釋: 此指令將會為名為 "CountDown" 的任務保留 5 秒。

  • TIMER_STOP | (count down alias)

<*Example*> TIMER_STOP||CountDown

解釋: 此指令將會刪除名為 "CountDown" 的任務。

  • TIMER_EVENT_START | (count down alias)
  • TIMER_EVENT_STOP | (count down alias)

TIMER 是一種轉接型指令, 很少會獨立使用。

與 Plugin 相關的:
  • PLUGIN_ENABLE | (plugin name)
  • PLUGIN_DISABLE | (plugin name)
  • PLUGIN_EVENT_ENABLE | (plugin name)
  • PLUGIN_EVENT_DISABLE | (plugin name)

有關 PLUGIN 的作用都是用來增加或改變 MMDAgent 的功能, 由於本人並沒有安裝過, 所以說明不多。

與 Other events 相關的:
  • DRAGANDDROP | (file name)

<*Example*> DRAGANDDROP|Music\IA_Test.mp3

解釋: 此指令的作用等同於半自動化 Drag & Drop。

  • KEY | (key name)

與 Other commands 相關的:
  • EXECUTE | (file name)

<*Example_1*> EXECUTE|http://www.google.com/
<*Example_2*> EXECUTE|C:\Steam\Steam.exe

  • KEY_POST | (window class name) | (key name) | (ON or OFF for shift-key) | (ON or OFF for ctrl-key) | (On or OFF for alt-key)

<*Example*> KEY_POST|MMDAgent|x|OFF|OFF|OFF

解釋: 此指令的作用等同於半自動化按下鍵

以上就是各種不同 .Fst 指令的格式。
接著以下將會說明.Fst 的直接書寫格式。

.Fst 的書寫格式

.Fst 指令主要是用於控制 MMDAgent 程式與最終用戶直接接觸的部份, 而只要有一點的書寫文法錯誤就可以導致整個 MMDAgent 程式沒法運作。
所以.Fst 簡單點來說就是 MMDAgent 的故事腳本。此為重要部分, 請大家多加留意。

先看一下以下.Fst 的書寫例子

以第一行為例
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   0   11   <eps>     MODEL_ADD|bootscreen|Accessory\bootscreen\bootscreen.pmd|0.0,12.85,17.6|0.0,0.0,0.0|OFF ]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

從以上的指令, 我們可見得指令一共可被分拆為4個部份:

  • 第一部分[0], 這是起始的頁數, 用於告訴 MMDAgent 系統指令該從哪裏開始執行。系統會跟據起始頁數的數目大小而選擇該從哪裏開始執行指令,數目越小則越優先採用。(0 為最小)
  • 第二部分[11], 這是結束的頁數(或者可以當作下一頁), 用於告訴 MMDAgent 系統下一步該使用哪一頁的指令。
  • 第三部分<eps>, 這是指令的觸發條件(EVENT 類的指令只可以在此部份使用), 是要使用者先滿足這裡所訂下的條件後系統才會執行下一部份的指令。(<eps>意思為無需條件。)
  • 第四部分 MODEL_ADD, 這部份是指令內容, 是一行指令中的最終部分。(這部份也可以使用 <eps>, 作用是等同於跳過(Skip)。)在這部份的一些特定指令是可以簡寫的。(若跳過一些值的輸入, 系統便會自動用預設的值去填補被漏空的位置)

一套完整指令的例子
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   1   31   RECOG_EVENT_STOP|こんにちは     SYNTH_START|メイ|mei_voice_normal|こんにちは]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

こんにちは (Kon ni chi wa)

解釋: 此指令的作用為, 如果系統偵察到使用者說出"こんにちは", 那麼系統便會控制模型"メイ", 並採用 mei_voice_normal 的聲音模組去語音合成出"こんにちは"。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   1   31   RECOG_EVENT_STOP|こんにちわ     SYNTH_START|メイ|mei_voice_normal|こんにちは]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

こんにちわ (Kon ni chi wa)

解釋: 此指令意思同上, 只是把用家語音輸入由"こんにちは"改成"こんにちわ"。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ 31   32   <eps>     MOTION_ADD|メイ|action|Motion\mei_greeting\mei_greeting.vmd|PART|ONCE]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

解釋: 此指令的作用為, 如果系統偵察到頁數 31 中的指令已經完成了的話, 系統便會控制模型"メイ", 並採用 mei_greeting.vmd 的動作模組。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ 32     2   SYNTH_EVENT_STOP|mei     <eps>]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

解釋: 此指令的作用為, 如果系統偵察到頁數 32 中的指令和 SYNTH_START 已經完成了的話, 那麼系統便會將 MMDAgent 的讀取頁數重設回第 2 頁, 並等待下一個指令。

從以上的例子可以讓我們得知數件事:
  • 1. 數項不同的指令是可以導向同樣結果的。
  • 2. 有效地利用同音字是可以大為增加語音識別的成功率。
  • 3. MMDAgent 的 .Fst 系統其實就是一個不斷的循環(Loop), 所以如果下一頁的頁數填錯了的話, 循環(Loop)自然便會被中斷, 系統也就不能執行下一個指令。

有關 .Fst 的總結與補充

感想:
起初學 .Fst 檔案時其實是很痛苦的, 因為周邊的教學全都是用日文寫的, 而且我個人理解能力又差.. 結果是花上了好一段時間才明白到 .Fst 檔案的基本用法。但是用慣了後就會覺得寫指令就像寫故事一樣, 做出什麼選擇就會導向什麼結果, 所以我個人認為也是挺好玩的。

提示:
  • 1. 有效地利用頁數是可以製造出 HotWord Detection 的效果

例子:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   2   21   <eps>                                          TIMER_START|idle1|20]
[ 21   22   TIMER_EVENT_START|idle1     TIMER_START|idle2|40]
[ 22   23   TIMER_EVENT_START|idle2     TIMER_START|idle3|60]
[ 23     1   TIMER_EVENT_START|idle3     VALUE_SET|random|0|100]
[   1     1   RECOG_EVENT_START           MOTION_ADD|mei|listen|Expression\mei_listen\mei_listen.vmd|PART|ONCE]
[   1     1   TIMER_EVENT_STOP|idle1      MOTION_ADD|mei|idle|Motion\mei_idle\mei_idle_boredom.vmd|PART|ONCE]
[   1     1   TIMER_EVENT_STOP|idle2      MOTION_ADD|mei|idle|Motion\mei_idle\mei_idle_touch_clothes.vmd|PART|ONCE]
[   1     1   TIMER_EVENT_STOP|idle3      MOTION_ADD|mei|idle|Motion\mei_idle\mei_idle_think.vmd|PART|ONCE]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   1     3   RECOG_EVENT_STOP|メイ     <eps>]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

解釋: 此指令的作用為, 如果系統偵察到使用者說出"メイ"後就會進入第 3 頁面, 進入到此頁面後除非使用者說出"こんにちは"又或者"こんにちわ", 否則 MMDAgent 的系統並不會作出任何回應。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[   3   31   RECOG_EVENT_STOP|こんにちは     SYNTH_START|mei|mei_voice_normal|こんにちは。]
[   3   31   RECOG_EVENT_STOP|こんにちわ     SYNTH_START|mei|mei_voice_normal|こんにちは。]
[ 31   32   <eps>                                                     MOTION_ADD|mei|action|Motion\mei_greeting\mei_greeting.vmd|PART|ONCE]
[ 32     2   SYNTH_EVENT_STOP|メイ                 <eps>]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

解釋: 如果指令讀取成功的話, 系統便會要你先叫"メイ"(HotWord)後, 才能激活並使用其他功能。
不過這樣做會有可能導致其他雜音影響, 而識別錯誤系統亂開功能。(前題是在".Dic"檔案中把"メイ"的識別率調得太高)

有關指令 EXECUTE 的作用
如果運用得當的話, 是可以靠它去聲控電腦。(Etc.. Siri, Amazon Echo, Google home..)

以上就是有關".Fst"檔案的說明, 日後如有需要會再更新。
接下來就是有關".Mdf"檔案的說明。

".MDF"檔的格式

正如我在上一篇中所說的, ".Mdf"檔案為 MMDAgent 程式的場景/模型輔助檔, 因為在".Mdf"檔案中主要都是靠輸入特定函數以改變 MMDAgent 系統的一些場景/模型的顯示模式/樣貌。(比如: 改變場景大小, 燈光方向等..)

與 Cartoon rendering 相關的:
  • use_cartoon_rendering
  • use_mmd_like_cartoon
  • cartoon_edge_width
  • cartoon_edge_step
  • cartoon_edge_selected_color

與 Camera 相關的:
  • camera_rotation
  • camera_transition
  • camera_distance
  • camera_fovy

與 Stage 相關的:
  • stage_size

與 FPS 相關的:
  • show_fps
  • fps_position

與 Window 相關的:
  • window_size
  • full_screen

與 Log 相關的:
  • log_size
  • log_position
  • log_scale

與 Light 相關的:
  • light_direction
  • light_intensity
  • light_color

與 Campus 相關的:
  • campus_color

與 OpenGL 相關的:
  • max_multi_sampling

與 Motion 相關的:
  • motion_adjust_time
  • lypsync_priority

與 Bullet Physics 相關的:
  • bullet_fps
  • gravity_factor

與 User Interface 相關的:
  • rotate_step
  • translate_step
  • distance_step
  • fovy_step

與 Shadow Mapping 相關的:
  • use_shadow_mapping
  • shadow_mapping_texture_size
  • shadow_mapping_self_density
  • shadow_mapping_floor_density
  • shadow_mapping_light_first

這是有關 Shadow Map 的原理, 如果各位有需要請自行參考

與 Comment 相關的:
  • display_comment_time

與 Model 相關的:
  • max_num_model

在".Mdf"檔案中並沒有什麼格式可言, 只要你明白到每個指令的意思, 在".Mdf"方面就沒有什麼好擔心的了。

接下來就是有關".Dic"檔案的說明。

".DIC"檔的格式

".Dic"檔案為 MMDAgent 系統的字典檔, 也就是所有語音識別的文字都需要輸入到此檔案去讓 MMDAgent 系統學習。

以下將會說明如何使用".Dic"檔案去新增一個可被 MMDAgent 系統識別的字。

例子:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ 画面:ガメン:画面:507     @1.0 フルスクリーン:フルスクリーン:フルスクリーン     [フルスクリーン]   f u r u s u k u r i: N]
[ (區域 1)                           (區域 2)                                                                               (區域 3)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

從上面的例子可見得, 在".Dic"中指令大概可以分成三個部分(也就是以上的區域 1, 2, 3), 三個區域都有其不同的用處。

  • 區域 1: 此區域是最為次要的區域(可有可無), 而它的作用是把你要輸入的文字進行歸類。比如在上面例子的區域 1 作用就是為了把"フルスクリーン"(Fullscreen)歸類成"画面"("ガメン"是畫面的片假名)。如果實在是想不到要填寫什麼, 可以輸入"<unk>"作為代替。(有關於以上例子中的"507"部分, 由於本人也不是很清楚, 所以會在之後再作說明)

<*Example*>   <unk>     @0.0 <unk>     [ヘロー] h e r o:

  • 區域 2: 此區域是第二重要的區域, 而且這個區域是比較別的, 因為它可以分成兩個部分。一個是以上例子"@0.0"的部分, 而另一個則是"フルスクリーン:フルスクリーン:フルスクリーン"的部分。先說"@"的部分, 這個部分主要是用於控制一隻字的識別率。比如以以上例子為例, 這部分就是為了調控"フルスクリーン"(Fullscreen)的識別難度(在"@"後面的數字數目越小則越難被識別, 相反數字數目越大則越易被識別)。第二部分, 通常這個部分是用於調整一隻字的語法表達, 但由於這部分其實並沒有經 MMDAgent 系統的實質採用過(也是可有可無的部分) 所以也可以直接輸入"<unk>"作為代替(雖然本人建議, 為了建立良好習慣, 還是以正常方法繼續去填寫這部分比較好)。

  • 區域 3: 此區域是最為重要的區域, 因為這區域是 MMDAgent 系統學習語音識別文字的區域。嚴格去看的話, 這個區域也可以分拆成兩個部分分, 括號"[   ]"的部分和拼音的部分。先說括號"[   ]"的部分, 這個部分的括號內所輸入的內容將會是 MMDAgent 系統所學習的字(如果比如一隻字可以分拆為樣子和讀音的話, 那麼這個部分就是樣子的部分(換言之, MMDAgent 系統會學習並記下括號內的文字)), 而且在括號內的部分本人是推薦用平假名多於片假名, 因 MMDAgent 系統對平假名的識別是強於片假名的。第二部分就是拼音的部分(也就是我在先前所說讀音的部分), MMDAgent 系統是靠這部分才能知道括號內文字的發音。言而這部分也是需要特別格式, 所以接下來就會解釋這些格式是什麼。

第三區域的格式:
有關於在第三區域的拼音部分, 不同的日語拼音是要轉換成羅馬拼音才能夠進行輸入。
如有需要可以參考一下日語教學篇

MMDAgent 本身是附有一個公式說明書的。位置是在"AppData\Julius\lang_m\web.60k.htkdic"。
".Dic"檔案部分參考自: https://mmdagent.wordpress.com/

".OJT"檔的格式

".FPH"檔的格式

標籤: