语音输入法设计

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

本控件是本人基于微软公司的 Speech SDK 5.1开发包,独立开发的。

使用必备条件:开发平台必须安装微软的 Speech SDK 5.1。

 

语音输入法:即嘴巴打字、麦克风输入法。它可以认为是目前世界上最简便、最易用的输入法,只要你会说话,它就能打字。它是一款功能齐全、界面友好、易学易用、可以快速方便的进行语音输入的软件。我们在分析了市场上众多语音输入系列软件基础上进行设计的,因此它吸取了市场上众多语音输入软件的优点,同时去除和改进了它们的一些缺点,增加了软件的可用性、舒适性。语音输入法核心模块采用 Microsoft Speech SDK5.1 GetAlternates 函数和 GetText 函数实现,实现简单方便,它是建立在语音识别的基础上采用 ISpPhraseAlt *pcpPhraseAlt[] 语音数组进行轮询获取相似语法后,再进行文字的提取。代码简单但功能却很强大!

本文的语音输入法模块是采用vc6.0开发的dll,界面采用Borland C++Builder2006开发的

核心代码详述如下,其它外围代码请看CSDN/MSDN其它详细介绍!

       ... ...

// 语法数组

ISpPhraseAlt *pcpPhraseAlt[MY_MAX_ALTERNATES];

// 获取输入的语法

hr = pPhrase->GetPhrase(&m_SpPhrase);

if (FAILED(hr))

{

m_sError=_T(" 语音输入法获取语法出错 ! ");

return 0;

}

// 获取首个识别字

hr = pPhrase->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &pwszFirstWord, NULL);

// 获取其他发音相似字 , 进行语法轮询 , 提取发音相似的文法

hr = pPhrase->GetAlternates(m_SpPhrase->Rule.ulFirstElement,

m_SpPhrase->Rule.ulCountOfElements,

MY_MAX_ALTERNATES,

pcpPhraseAlt,

&ulCount);

if (SUCCEEDED(hr))

{

for (ULONG i = 0; i < ulCount; i++)

{

// 获取每个语法的文字

hr =pcpPhraseAlt[i]->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &pwszAlternate, NULL);

if (SUCCEEDED(hr))

{

if (wcscmp(pwszAlternate,L"")!=0) // 不为空

{

strTemp+=W2A(pwszAlternate);

// '#' 隔开每个音形字 , 组成一串文字用于进程间文字参数的传递(即将获取的文字从VC开发的dll传递到C++Builder2006开发的主界面上)

strTemp+="#";

ulIndex++;

}

}

}

}

m_strWords=strTemp;

... ...

 

 

详细核心源代码如下:


//函数  名:bool CSpeechRecognition::GetAlternatesEx(WCHAR **ppszFirstWord,WCHAR **ppszCoMemText)
//编写  者:南才北往,Frank_Huang
//参考资料: Speech SDK5.1 帮助文档
//函数功能:获取发音相似的多个识别字.
//输入参数:ppszFirstWord - 获取首个识别字 ; pstrOtherWords - 其他音形字
//返回  值:ULONG -语音相似字的个数
//备    注:用于语音输入法
///

ULONG CSpeechRecognition::GetAlternatesEx(ISpRecoResult *pPhrase)
{
    USES_CONVERSION;
     
    HRESULT            hr = S_OK;
    SPPHRASE        *m_SpPhrase;
    CString            strTemp="";
    ULONG            ulIndex=0;//语音识别文字的实际个数
    ULONG            ulCount=0;//语音识别文字的总个数
    WCHAR            *pwszAlternate=L"";
    WCHAR            *pwszFirstWord=L"";
    ISpPhraseAlt    *pcpPhraseAlt[MY_MAX_ALTERNATES];
     
    hr = pPhrase->GetPhrase(&m_SpPhrase);
    if (FAILED(hr))
    {
        m_sError=_T("语音输入法获取语法出错! ");
        return 0;
    }


    hr = pPhrase->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &pwszFirstWord, NULL); 
    if (SUCCEEDED(hr))
    {
        if (wcscmp(pwszFirstWord,L"")!=0)
            wcscpy ( m_wchFirstWord, pwszFirstWord );//语音词组首个识别字
        else
            wcscpy ( m_wchFirstWord, L"Can`t get the first word! " );//语音词组首个识别字
    }
 
    hr = pPhrase->GetAlternates(m_SpPhrase->Rule.ulFirstElement,
                                     m_SpPhrase->Rule.ulCountOfElements, 
                                     MY_MAX_ALTERNATES,
                                     pcpPhraseAlt,
                                     &ulCount);
    if (SUCCEEDED(hr))
    {
        for (ULONG i = 0; i < ulCount; i++) 
        {     
            hr = pcpPhraseAlt[i]->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE, &pwszAlternate, NULL);
            if (SUCCEEDED(hr))
            {
                if (wcscmp(pwszAlternate,L"")!=0)//不为空
                {
                    strTemp+=W2A(pwszAlternate);
                    strTemp+="#";//用'#'隔开每个音形字
                    ulIndex++;
                }
            }
        }
    }
    m_strWords=strTemp;
     

    // 释放资源
    if (pwszAlternate) ::CoTaskMemFree(pwszAlternate);
    if (pwszFirstWord) ::CoTaskMemFree(pwszFirstWord); 
    if (m_SpPhrase) ::CoTaskMemFree(m_SpPhrase);
 
    for (ULONG i=0;i<ulCount;i++)
    {
        pcpPhraseAlt[i]->Release();
        pcpPhraseAlt[i]=NULL;
    }
    return ulIndex;
}

 

语音记事本,不同于网上的“语音输入法”和“语音输入王”,也不是IBM的ViaVoice,它是本人独立开发的,包括记事本功能和语音输入功能,记事本新增了“数统计”和“自动保存”功能,语音输入包括“语音识别”和“模糊音识别”功能,如果您的普通话不够标准,比如说“为”时,在模糊音识别区就可以选择“为、未、位......”等,然后双击这个就输入到了记事本中。“语音识别”可以识别大多数的词,不能识别的词就到“模糊音识别”区选择,非常方便。语音记事本的用户对象是从事文工作而又不会打的人的人,对网络写手或码的人非常有用。经实际使用,一小时可以输入约3000,您说得有多快,它的输入就有多快。建议在Windows7系统中使用本软件。Windows7自带语音输入法,但它对复杂文章的识别率不高,结合本软件,可以实现复杂文章的识别。在使用本软件之前,必须首先配置Windows7的语音输入系统,具体的操作,请看Windows7的帮助。试用版本有免费试用3次的限制,您购买本软件后,作者会通过E-mail发送注册文件。本语音输入系统可以说是近年来网上可以找到的唯一具备实用功能的语音输入系统。 软件的价格为138元/套/年,您每天只需花0.37元即可拥有本软件,低廉的价格,优质的服务,您还有什么可犹豫的呢?心动不如行动,现在就下订单吧。 http://www.sharebank.com.cn/soft/soft_view.php?id=36620
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值