本文整理汇总了C++中CItemList::GetTail方法的典型用法代码示例。如果您正苦于以下问题:C++ CItemList::GetTail方法的具体用法?C++ CItemList::GetTail怎么用?C++ CItemList::GetTail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CItemList
的用法示例。
在下文中一共展示了CItemList::GetTail方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Speak
/*****************************************************************************
* CTTSEngObj::Speak *
*-------------------*
* Description:
* This is the primary method that SAPI calls to render text.
*-----------------------------------------------------------------------------
* Input Parameters
*
* pUser
* Pointer to the current user profile object. This object contains
* information like what languages are being used and this object
* also gives access to resources like the SAPI master lexicon object.
*
* dwSpeakFlags
* This is a set of flags used to control the behavior of the
* SAPI voice object and the associated engine.
*
* VoiceFmtIndex
* Zero based index specifying the output format that should
* be used during rendering.
*
* pTextFragList
* A linked list of text fragments to be rendered. There is
* one fragement per XML state change. If the input text does
* not contain any XML markup, there will only be a single fragment.
*
* pOutputSite
* The interface back to SAPI where all output audio samples and events are written.
*
* Return Values
* S_OK - This should be returned after successful rendering or if
* rendering was interrupted because *pfContinue changed to FALSE.
* E_INVALIDARG
* E_OUTOFMEMORY
*
*****************************************************************************/
STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags,
REFGUID rguidFormatId,
const WAVEFORMATEX * pWaveFormatEx,
const SPVTEXTFRAG* pTextFragList,
ISpTTSEngineSite* pOutputSite )
{
SPDBG_FUNC( "CTTSEngObj::Speak" );
HRESULT hr = S_OK;
//--- Check args
if( SP_IS_BAD_INTERFACE_PTR( pOutputSite ) ||
SP_IS_BAD_READ_PTR( pTextFragList ) )
{
hr = E_INVALIDARG;
}
else
{
//--- Init some vars
m_pCurrFrag = pTextFragList;
m_pNextChar = m_pCurrFrag->pTextStart;
m_pEndChar = m_pNextChar + m_pCurrFrag->ulTextLen;
m_ullAudioOff = 0;
//--- Parse
// We've supplied a simple word/sentence breaker just to show one
// way of walking the fragment list. It obviously doesn't deal with
// things like abreviations and expansion of numbers and dates.
CItemList ItemList;
while( SUCCEEDED( hr ) && !(pOutputSite->GetActions() & SPVES_ABORT) )
{
//--- Do skip?
if( pOutputSite->GetActions() & SPVES_SKIP )
{
long lSkipCnt;
SPVSKIPTYPE eType;
hr = pOutputSite->GetSkipInfo( &eType, &lSkipCnt );
if( SUCCEEDED( hr ) )
{
//--- Notify SAPI how many items we skipped. We're returning zero
// because this feature isn't implemented.
hr = pOutputSite->CompleteSkip( 0 );
}
}
//--- Build the text item list
if( SUCCEEDED( hr ) && (hr = GetNextSentence( ItemList )) != S_OK )
{
break;
}
//--- We aren't going to do any part of speech determination,
// prosody, or pronunciation determination. If you were, one thing
// you will need is access to the SAPI lexicon. You can get that with
// the following call.
// CComPtr<ISpLexicon> cpLexicon;
// hr = pUser->GetLexicon( &cpLexicon );
if( !(pOutputSite->GetActions() & SPVES_ABORT) )
{
//--- Fire begin sentence event
CSentItem& FirstItem = ItemList.GetHead();
CSentItem& LastItem = ItemList.GetTail();
CSpEvent Event;
//.........这里部分代码省略.........