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

132 lines
4 KiB
C++

/******************************************************************************
* vapiIo.h *
*----------*
* I/O library functions for extended speech files (vapi format)
*------------------------------------------------------------------------------
* Copyright (C) 2000 Microsoft Corporation Date: 03/02/00
* All Rights Reserved
*
********************************************************************* PACOG ***/
#ifndef __VAPIIO_H_
#define __VAPIIO_H_
#include <windows.h>
#include <mmreg.h>
#define VAPI_MAX_LABEL 80
// File open modes
enum {
VAPI_IO_READ = 1,
VAPI_IO_WRITE,
VAPI_IO_READWRITE
};
// Error codes
enum {
VAPI_IOERR_NOERROR,
VAPI_IOERR_MODE,
VAPI_IOERR_MEMORY,
VAPI_IOERR_CANTOPEN,
VAPI_IOERR_NOWAV,
VAPI_IOERR_NOFORMAT,
VAPI_IOERR_STEREO,
VAPI_IOERR_FORMAT,
VAPI_IOERR_NOCHUNK,
VAPI_IOERR_DATAACCESS,
VAPI_IOERR_F0SFACCESS,
VAPI_IOERR_FEATACCESS,
VAPI_IOERR_EPOCHACCESS,
VAPI_IOERR_LABELACCESS,
VAPI_IOERR_WRITEWAV,
VAPI_IOERR_CREATECHUNK,
VAPI_IOERR_WRITECHUNK
};
// Possible values for sample format
enum {
VAPI_PCM16,
VAPI_PCM8,
VAPI_ALAW,
VAPI_ULAW
};
// TYPES
struct Epoch {
double time;
char voiced;
};
struct Label {
char label[VAPI_MAX_LABEL];
float endTime;
};
struct F0Vector {
float* f0;
int nF0;
int sampFreq;
};
//----------------------------------------------------------------------
// VAPI FILE I/O CLASS
//
class VapiIO
{
public:
virtual ~VapiIO() {};
virtual int OpenFile ( const char* pszFileName, int iMode ) = 0;
virtual int OpenFile ( const WCHAR* wcsFileName, int iMode ) = 0;
virtual void CloseFile ( ) = 0;
virtual int CreateChunk ( const char* pszNname ) = 0;
virtual int CloseChunk ( ) = 0;
virtual int WriteToChunk (const char* pcData, int iSize) = 0;
virtual int GetDataSize (long* lDataSize) = 0;
virtual int Format (int* piSampFreq, int* piFormat, WAVEFORMATEX* pWaveFormatEx = NULL) = 0;
virtual int WriteFormat (int iSampFreq, int iFormat) = 0;
virtual int ReadSamples (double dFrom, double dTo, void** pvSamples, int* iNumSamples, bool bClosedInterval) = 0;
virtual int WriteSamples (void* pvSamples, int iNumSamples) = 0;
virtual int ReadF0SampFreq (int* piSampFreq) = 0;
virtual int WriteF0SampFreq (int iSampFreq) = 0;
virtual int ReadFeature (char* pszName, float** ppfSamples, int* piNumSamples) = 0;
virtual int WriteFeature (char* pszName, float* pfSamples, int iNumSamples) = 0;
virtual int ReadEpochs (Epoch** ppEpochs, int* piNumEpochs) = 0;
virtual int WriteEpochs (Epoch* pEpochs, int iNumEpochs) = 0;
virtual int ReadLabels (char* pszName, Label** ppLabels, int* piNumLabels) = 0;
virtual int WriteLabels (char* pszName, Label* pLabels, int iNumLabels) = 0;
virtual char* ErrMessage (int iErrCode) = 0;
static int TypeOf (WAVEFORMATEX *pWavFormat);
static int SizeOf (int iType);
static int DataFormatConversion (char* pcInput, int iInType,
char* pcOutput, int iOutType, int iNumSamples);
static VapiIO* ClassFactory();
// High Level Functions
static int ReadVapiFile (const char* pszFileName, short** ppnSamples, int* piNumSamples,
int* piSampFreq, int* piSampFormat,int* piF0SampFreq, float** ppfF0, int* piNumF0,
float** ppfRms, int* piNumRms, Epoch** ppEpochs, int* piNumEpochs,
Label** ppPhones, int* piNumPhones, Label** ppWords, int* piNumWords);
static int WriteVapiFile (const char* pszFileName, short* pnSamples, int iNumSamples, int iFormat,
int iSampFreq, int iF0SampFreq, float* pfF0, int iNumF0,
float* pfRms, int iNumRms, Epoch* pEpochs, int iNumEpochs,
Label* pPhones, int iNumPhones, Label* pWords, int iNumWords);
};
#endif