微軟AGENT簡介
微軟Agent API能夠提供卡通角色的顯示,另外,它還可以支援語音識別,因此應用軟體可以對語音命令作出反應,而卡通角色可以通過合成的語音、錄製好的音訊訊號或文字對命令作出反應。
使用微軟AGENT的要求
要使用該技術,我們必須有下面的元件:
·微軟Agent核心元件
·微軟Agent中的卡通角色━━Genie、Merlin、Robby和Peedy
·微軟Speech API 4.0a執行時間庫
·微軟語音識別引擎
·Lernout和Hauspie文字-語音引擎
語音技術簡介
文字-語音轉換指的是計算機將文字資訊轉換為合成語音進行輸出,語音識別是指計算機能夠識別出說話者所說的話,接受說話者的命令和輸入的資料。
語音識別和文字-語音轉換都需要用到相關的引擎,幾乎所有的語音識別引擎都是將輸入的語音資料轉換為與特定引擎相關的音素,然後這些音素被轉換為應用程式能夠使用的文字。
文字-語音轉換的二種方式:
1、合成文字-語音轉換
2、連續文字-語音轉換
合成文字-語音轉換方式:
在合成的發音方式中,引擎處理每個單詞,併產生該單詞的發音音素,然後這些音素被轉入一個複雜的演算法中,模仿人類的發聲方式,生成語音。
連續文字-語音轉換方式:
在連續文字-語音轉換方式中,引擎對文字資訊進行處理,從一個預先錄製好的語音庫中找出句子、單詞和短語,在這種方式中,生成的語音是連續的。
語音應用程式的程式設計介面
微軟語音應用程式程式設計介面在Win32(Windows 95、Windows NT)下使用了OLE元件物件模式(COM)架構,微軟的Agent架構在合成語音輸出中使用了微軟語音應用程式程式設計介面(SAPI),還使用SAPI支援語音輸入(語音識別SR或文字-語音轉換TTS)。微軟的Agent定義了讓應用程式訪問其服務的介面,使得應用程式能夠控制角色動畫、支援使用者輸入事件,指定輸出方式。
角色視窗
在微軟Agent應用程式中,卡通角色是在它們各自的視窗中被顯示的,這些視窗總是出現在Z軸順序的最頂端。使用者可以通過滑鼠左鍵拖動角色移動角色所在的視窗,角色的影像隨著指標而移動。
說話汽球圈
除了語音輸出外,動畫角色還支援以卡通型別說話汽球圈形式的文字字幕,角色說話時,所說的文字就出現在汽球圈兒中,當說完時,汽球圈也就不見了。
在.NET架構中使用微軟AGENT
微軟Agent不是以ActiveX控制DLL的形式提供的。要在.NET中使用它,可以使用由.NET框架SDK提供的AxImp.exe工具:
AxImp -->> ActiveX控制-Win窗體組合體生成器
Syntax: AxImp [/? | [[/source] OCXName]]
Aximp agentctl.dll
上面的命令生成二個檔案:AxAgentObjects.dll和AgentObjects.dll。通過使用這二個檔案,我們就可以在.NET中使用Agent了。
新增axagent控制元件,可以“工具箱”-“選擇項”-“COM元件”-“Microsoft Agent Control 2.0”
如下附程式碼:(不新增axagent控制元件的版本)
public AgentObjects.Agent MyController ;
public AgentObjects.IAgentCtlCharacter MyCharacter ;
//初始化精靈物件
private void Form1_Load(object sender, EventArgs e)
{
MyController=new AgentObjects.AgentClass();
MyController.Connected=true;
MyController.Characters.Load("Merlin",(object)"Merlin.acs");
MyCharacter = MyController.Characters.Character("merlin");
//MyCharacter = axAgent1.Characters["Merlin"];
MyCharacter.MoveTo(System.Convert.ToInt16(Location.X + 300), System.Convert.ToInt16(Location.Y + 80), null);
}
//演示說話效果
private void btnSpeak_Click(object sender, EventArgs e)
{
if (this.txtSpeak.Text == string.Empty)
{
MessageBox.Show("請輸入說話內容!", "資訊提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
MyCharacter.Speak(this.txtSpeak.Text, null);
}
//演示一個例項:祝賀
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (this.radioButton1.Checked)
{
this.MyCharacter.StopAll(null);
this.MyCharacter.Play("Congratulate");
}
}
新增一些merlin的動作:
action[0]=" Acknowledge "; //承認
action[1]=" LookDown "; //向下看
action[2]=" Sad "; //悲傷
action[3]=" Alert "; //警告
action[4]=" LookDownBlink "; //向下看眨眼
action[5]=" Search "; //尋找
action[6]=" Announce "; //宣告
action[7]=" LookUp "; //向上看
action[8]=" StartListening "; //開始聆聽
action[9]=" Blink "; //眨眼
action[10]=" LookUpBlink "; //向下看眨眼
action[11]=" StopListening "; //停止聆聽
action[12]=" Confused "; //迷惑
action[13]=" LookLeft "; //向左看
action[14]=" Suggest "; //建議
action[15]=" Congratulate "; //祝賀
action[16]=" LookLeftBlink "; //向左看眨眼
action[17]=" Surprised "; //吃驚
action[18]=" Declines "; //拒絕
action[19]=" LookRight "; //向右看
action[20]=" Think "; //思考
action[21]=" DontRecognize "; //不承認
action[22]=" LookRightBlink "; //向右看眨眼
action[23]=" Wave "; //揮動
action[24]=" Explain "; //解釋
action[25]=" MoveDown "; //向下移動
action[26]=" Write "; //書寫
action[27]=" GestureDown "; //向下姿勢
action[28]=" MoveUp "; //向上移動
action[29]=" Processing "; //計算
action[30]=" GestureUp "; //向上姿勢
action[31]=" MoveRight "; //向右移動
action[32]=" Reading "; //閱讀
action[33]=" GestureLeft "; //向左姿勢
action[34]=" MoveLeft "; //向左移動
action[35]=" Searching "; //尋找
action[36]=" GestureRight "; //向右姿勢
action[37]=" Pleased "; //高興
action[38]=" Writing "; //書寫
action[39]=" GetAttention "; //獲得注意
action[40]=" Read "; //閱讀
action[41]=" Greet "; //問候