#define TTS_BUFFER_LEN 1*1024
typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short int uint16;
typedef signed short int int16;
typedef unsigned int uint32;
typedef signed int int32;
struct VParam
{
uint8 *buf_p;
uint32 buf_len;
uint32 offset;
FS_HANDLE filehandle;
MHdl *mhdl_handle;
}TTSParam;
kal_uint16 tts_ring_buf[TTS_BUFFER_LEN];
void tts_init(void)
{
TTSParam.buf_p = (uint8 *)tts_ring_buf;
TTSParam.buf_len = 0;
}
static void Pcm_play_callback( MHdl *mhdl, Media_Event event )
{
switch( event )
{
case MEDIA_END:
case MEDIA_ERROR:
case MEDIA_TERMINATED:
{
TTSParam.mhdl_handle->Stop(TTSParam.mhdl_handle);
TTSParam.mhdl_handle->Close(TTSParam.mhdl_handle);
/* close the file */
FS_Close(TTSParam.filehandle);
break;
}
case MEDIA_DATA_REQUEST :
{
kal_uint32 read_size=0;
TTSParam.mhdl_handle->GetWriteBuffer(
TTSParam.mhdl_handle,
&TTSParam.buf_p,
&TTSParam.buf_len);
FS_Read(TTSParam.filehandle, TTSParam.buf_p, TTSParam.buf_len,
&read_size);
if (read_size > 0)
{
TTSParam.mhdl_handle->WriteDataDone(
TTSParam.mhdl_handle,
read_size);
TTSParam.mhdl_handle->FinishWriteData(TTSParam.mhdl_handle);
}
else
{
/* close the file */
FS_Close(TTSParam.filehandle);
}
}
}
}
kal_int32 tts_media_play(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 read_size=0;
kal_int32 audio_format;
kal_int32 result;
Media_Status aud_ret;
Media_PCM_Stream_Param vpFormat;
void *param = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
{
vpFormat.isStereo = 0;
vpFormat.bitPerSample = 16;
vpFormat.sampleFreq = 8000;
param = &vpFormat;
aud_keytone_stop();
aud_tone_stop();
Media_Stop();
aud_mma_close_all();
TTSParam.filehandle=FS_Open(L"E:\\OutPcm.pcm",FS_READ_ONLY);
if ((TTSParam.mhdl_handle = PCM_Strm_Open(Pcm_play_callback, param)) ==
NULL)
{
return;
}
TTSParam.mhdl_handle->SetBuffer(
TTSParam.mhdl_handle,
(kal_uint8*)tts_ring_buf,
TTS_BUFFER_LEN * 2);
TTSParam.mhdl_handle->GetWriteBuffer(
TTSParam.mhdl_handle,
&TTSParam.buf_p,
&TTSParam.buf_len);
FS_Read(TTSParam.filehandle, TTSParam.buf_p, TTSParam.buf_len ,
&read_size);
//here should be error handling for FS_Read
if (read_size > 0)
{
TTSParam.mhdl_handle->WriteDataDone(
TTSParam.mhdl_handle,
read_size);
aud_ret = TTSParam.mhdl_handle->Play(TTSParam.mhdl_handle);
}
else
{
/* close the file */
FS_Close(TTSParam.filehandle);
}
}
}
void tts_test1(void)
{
tts_init();
tts_media_play();
}