windows-nt/Source/XPSP1/NT/enduser/speech/tts/prompts/engine/promptdb.h
2020-09-26 16:20:57 +08:00

128 lines
4.1 KiB
C++

//////////////////////////////////////////////////////////////////////
// PromptDb.h : Declaration of the CPromptDb
//
// Created by JOEM 04-2000
// Copyright (C) 2000 Microsoft Corporation
// All Rights Reserved
//
/////////////////////////////////////////////////////// JOEM 4-2000 //
#ifndef __PROMPTDB_H_
#define __PROMPTDB_H_
#include "resource.h" // main symbols
#include "common.h"
#include "PEErr.h"
#include "PromptEntry.h"
#include "Hash.h"
#include "fmtconvert.h"
#include "tsm.h"
#include <spddkhlp.h>
#include <spcollec.h>
// forward references
class VapiIO;
extern const IID IID_IPromptDb;
// DB ACTIONS
enum { DB_ADD = 1, DB_ACTIVATE, DB_UNLOAD };
// DB_LOAD OPTIONS
#define DB_LOAD 0
#define DB_CREATE 1
class CDb
{
public:
CDb();
~CDb();
WCHAR* pszPathName;
WCHAR* pszTempName;
WCHAR* pszLogicalName;
CHash idHash;
CHash textHash;
};
/////////////////////////////////////////////////////////////////////////////
// CPromptDb
class ATL_NO_VTABLE CPromptDb :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CPromptDb, &CLSID_PromptDb>,
public IPromptDb
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_PROMPTDB)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CPromptDb)
COM_INTERFACE_ENTRY(IPromptDb)
END_COM_MAP()
// Constructor/Destructor
HRESULT FinalConstruct();
void FinalRelease();
public:
// IPromptDb
STDMETHOD(NewDb)(const WCHAR *logicalName, const WCHAR *pathName);
STDMETHOD(AddDb)(const WCHAR *logicalName, const WCHAR *pathName, const WCHAR *pszIdSet, const USHORT loadOption);
STDMETHOD(UnloadDb)(const WCHAR* pszLogicalName);
STDMETHOD(ActivateDbName)(const WCHAR *pszLogicalName);
STDMETHOD(ActivateDbNumber)(const USHORT unIndex);
STDMETHOD(UpdateDb)(WCHAR* pszPath);
STDMETHOD(CountDb)(USHORT *unCount);
STDMETHOD(SearchDb)(const WCHAR* pszQuery, USHORT* unIdCount);
STDMETHOD(RetrieveSearchItem)(const USHORT unId, const WCHAR** ppszId);
STDMETHOD(GetLogicalName)(const WCHAR** ppszLogicalName);
STDMETHOD(GetNextEntry)(USHORT* punId1, USHORT* punId2, IPromptEntry** ppIPE);
STDMETHOD(FindEntry)(const WCHAR* id, IPromptEntry** ppIPE);
STDMETHOD(NewEntry)(IPromptEntry** ppIPE);
STDMETHOD(SaveEntry)(IPromptEntry* pIPE);
STDMETHOD(RemoveEntry)(const WCHAR* id);
STDMETHOD(OpenEntryFile)(IPromptEntry* pIPE, WAVEFORMATEX* pWaveFormatEx);
STDMETHOD(CloseEntryFile)();
STDMETHOD(GetPromptFormat)(WAVEFORMATEX** ppwf);
STDMETHOD(SetOutputFormat)(const GUID * pOutputFormatId, const WAVEFORMATEX *pOutputFormat);
STDMETHOD(SetEntryGain)(const double dEntryGain);
STDMETHOD(SetXMLVolume)(const ULONG ulXMLVol);
STDMETHOD(SetXMLRate)(const long lXMLRate);
STDMETHOD(SendEntrySamples)(IPromptEntry* pIPE, ISpTTSEngineSite* pOutputSite, ULONG ulTextOffset, ULONG ulTextLen);
private:
STDMETHOD(SendEvent)(const SPEVENTENUM event, ISpTTSEngineSite* pOutputSite, const ULONG ulAudioOffset, const ULONG ulTextOffset, const ULONG ulTextLen);
void ComputeRateAdj(const long lRate, float* flRate);
STDMETHOD(ApplyGain)(const void* pvInBuff, void** ppvOutBuff, const int iNumSamples, double dGain);
STDMETHOD(LoadDb)(const WCHAR* pszIdSet);
STDMETHOD(LoadIdHash)(FILE* fp, const WCHAR* pszIdSet);
STDMETHOD(IndexTextHash)();
STDMETHOD(ExtractDouble)(WCHAR* line, const WCHAR* tag, double* value);
STDMETHOD(ExtractString)(WCHAR* line, const WCHAR* tag, WCHAR** value);
STDMETHOD(ReadEntry)(FILE* fp, CPromptEntry** ppEntry);
STDMETHOD(WriteEntry)(FILE* fp, IPromptEntry* pIPE);
STDMETHOD(TempName)();
CPromptEntry* DuplicateEntry(const CPromptEntry* oldEntry);
private:
CSPArray<CDb*,CDb*> m_apDbList;
CSPArray<CDynStr,CDynStr> m_aSearchList;
CDb* m_pActiveDb;
USHORT m_unIndex;
volatile LONG m_vcRef;
float m_flEntryGain;
float m_flXMLVolume;
float m_flXMLRateAdj;
const GUID* m_pOutputFormatId;
WAVEFORMATEX* m_pOutputFormat;
CFmtConvert m_converter;
CTsm* m_pTsm;
VapiIO* m_pVapiIO;
};
#endif //__PROMPTDB_H_