WIN7之後,Windows係統自帶微軟語音庫,使用語音庫變得非常的簡單,精簡版就不一定了


對於win7及以上版本直接包含頭文件和鏈接庫
#include "sapi.h" #include "sphelper.h" #pragma comment(lib, "sapi.lib")
//定義三個變量
ISpVoice *m_pISpVoice = NULL;//初始化COM
IEnumSpObjectTokens *m_pIEnumSpObjectTokens=NULL;
ISpObjectToken *m_pISpObjectToken=NULL;
/*
* 函數功能 : 初始化語言包選擇組合框控件
*/
void CVoiceTDlg::InitVoicePackageSelComboxCtrl(void)
{
//初始化COM組件
if(FAILED(::CoInitialize(NULL)))
{
MessageBox("初始化COM組件失敗!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//枚舉所有語音Token
if(SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &m_pIEnumSpObjectTokens)))
{
//得到所有語音Token的個數
ULONG ulTokensNumber = 0;
m_pIEnumSpObjectTokens->GetCount(&ulTokensNumber);
//檢測該機器是否安裝有語音包
if(ulTokensNumber == 0)
{
MessageBox("該機器沒有安裝語音包!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//將語音包的名字加入組合框控件
CString strVoicePackageName = _T("");
CString strTokenPrefixText = _T("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\");
for(ULONG i=0; i<ulTokensNumber; i++)
{
m_pIEnumSpObjectTokens->Item(i, &m_pISpObjectToken);
WCHAR* pChar;
m_pISpObjectToken->GetId(&pChar);
strVoicePackageName = pChar;
strVoicePackageName.Delete(0, strTokenPrefixText.GetLength());
m_ComboxVoiceSel.InsertString(i, strVoicePackageName);
}
//設置默認的語音包選擇
m_ComboxVoiceSel.SetCurSel(0);
}
}
void CVoiceTDlg::OnBnClickedButton2()
{
InitVoicePackageSelComboxCtrl();
UpdateData(true);
//獲取ISpVoice接口
if(FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&m_pISpVoice)))
{
MessageBox("獲取ISpVoice接口失敗!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//設置語言
m_pIEnumSpObjectTokens->Item(m_ComboxVoiceSel.GetCurSel(), &m_pISpObjectToken);
m_pISpVoice->SetVoice(m_pISpObjectToken);
//設置播放速度
m_pISpVoice->SetRate(/*m_SliderVoiceSpeed.GetPos()*/ 5);
//設置音量大小
m_pISpVoice->SetVolume(100 /*- m_SliderVoiceSize.GetPos()*/);
//檢測朗讀內容是否為空
if(m_EditContent.IsEmpty())
{
MessageBox("朗讀內容不能為空!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//開始進行朗讀
m_pISpVoice->Speak(m_EditContent.AllocSysString(), SPF_ASYNC, NULL);
}
/*
* 函數功能 : 播放語音
*/
void CVoiceTDlg::OnBnClickedButton3()
{
//生成WAV文件
CComPtr<ISpStream> cpISpStream;
CComPtr<ISpStreamFormat> cpISpStreamFormat;
CSpStreamFormat spStreamFormat;
m_pISpVoice->GetOutputStream(&cpISpStreamFormat);
spStreamFormat.AssignFormat(cpISpStreamFormat);
HRESULT hResult = SPBindToFile("C:\Users\Administrator\Desktop\Test\test.wav",
SPFM_CREATE_ALWAYS,
&cpISpStream,
&spStreamFormat.FormatId(),
spStreamFormat.WaveFormatExPtr());
if(SUCCEEDED(hResult))
{
m_pISpVoice->SetOutput(cpISpStream, TRUE);
m_pISpVoice->Speak(m_EditContent.AllocSysString(), SPF_DEFAULT, NULL);
MessageBox("生成WAV文件成功!", "提示", MB_OK);
}
else
{
MessageBox("生成WAV文件失敗!", "提示", MB_OK|MB_ICONWARNING);
}
}
/*
* 函數功能 : 暫停/繼續播放語音
*/
int i=0;
void CVoiceTDlg::OnBnClickedButton4()//暫停和繼續
{
if (i==0)
{
m_pISpVoice->Pause();
i=1;
}
else
{
m_pISpVoice->Resume();
i=0;
}
}

/*
ISpVoice//成員函數
ISpEventSource繼承方法 :ISpEventSource的所有方法都可以從該接口訪問
SetOutput :設置當前的輸出對象。可以使用NULL值來選擇默認音頻設備。
GetOutputObjectToken :檢索當前音頻輸出對象的對象標記。
GetOutputStream :檢索當前輸出流的指針。
Pause :將聲音暫停在最近的警報邊界並關閉輸出設備。
Resume : 將輸出設備設置為RUN狀態並恢複渲染。
SetVoice :設置用於文本合成的聲音的身份。默認情況下,ISPVoice將使用“控製麵板”中“語音”屬性中設置的語音信息。
GetVoice :檢索標識文本合成中使用的聲音的對象標記。
Speak :說出文本字符串或文件的內容。
SpeakStream :說出流的內容。
GetStatus :檢索與此ISpVoice實例關聯的當前呈現和事件狀態。
Skip :導致語音向前或向後跳過當前通話文本內的指定數量的項目。
SetPriority :設置語音的優先級。正常,警報,結束。
GetPriority :檢索當前語音優先級。
SetAlertBoundary :指定哪個事件應該用作警報的插入點。
GetAlertBoundary :檢索當前正用作警報插入點的事件。
SetRate :實時設置文本渲染速率調整。
GetRate :檢索當前文本渲染速率調整。
SetVolume :實時設定合成器的輸出音量。
GetVolume :檢索合成器的當前輸出音量。
WaitUntilDone :阻止呼叫者,直到語音完成說話或指定的時間間隔過去了。
SetSyncSpeakTimeout :設置以毫秒為單位的超時時間間隔,此語音同步Speak和SpeakStream調用此超時。
GetSyncSpeakTimeout :檢索此ISpVoice實例的同步語音操作的超時間隔。
SpeakCompleteEvent :返回一個事件句柄,當語音完成後,將發出所有待處理的請求信號。
IsUISupported :確定是否支持指定類型的UI。
DisplayUI :顯示所請求的UI。
*/

熱文文,分享你的熱文
轉發文章就能賺錢的app
點擊閱讀原文下載
相關資訊
最新熱門應用
虛擬幣交易app
其它軟件179MB
下載
抹茶交易所官網蘋果
其它軟件30.58MB
下載
歐交易所官網版
其它軟件397.1MB
下載
uniswap交易所蘋果版
其它軟件292.97MB
下載
中安交易所2024官網
其它軟件58.84MB
下載
熱幣全球交易所app邀請碼
其它軟件175.43 MB
下載
比特幣交易網
其它軟件179MB
下載
雷盾交易所app最新版
其它軟件28.18M
下載
火比特交易平台安卓版官網
其它軟件223.89MB
下載
中安交易所官網
其它軟件58.84MB
下載