PDA

Просмотр полной версии : использование SAPI через C++


fire64
16.03.2009, 11:40
Написал код преобразующий текст в голос и сохраняющий его в wav файл, но файл получается битым

и открывается только VLC плеером


//========= Copyright © 2009, Fire64, All rights reserved. ============
//
// Purpose:
//
// $NoKeywords: $
//================================================== ===========================

#include <stdio.h>
#include <string.h>
#include <sapi.h>
#include <tchar.h>

int main( int argc, char **argv )
{
wchar_t *m_sText = L"This sounds normal but the pitch drops half way through";

ISpStream *spStream = NULL;

ISpVoice * pVoice = NULL;

WAVEFORMATEX _fmt;

if (FAILED(CoInitialize(NULL)))
{
return 0;
}

CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);


CoCreateInstance(CLSID_SpStream, NULL, CLSCTX_ALL, IID_ISpStream, (void **)&spStream);


_fmt.wFormatTag=WAVE_FORMAT_PCM;
_fmt.nChannels=1;
_fmt.wBitsPerSample=16; // 16 bit
_fmt.nSamplesPerSec=44100; // 44 khc
_fmt.nBlockAlign=2;
_fmt.nAvgBytesPerSec=88200;
_fmt.cbSize=0;


spStream->BindToFile(L"out.wav", SPFM_CREATE_ALWAYS, &SPDFID_WaveFormatEx, &_fmt,SPFEI_ALL_EVENTS);


pVoice->SetOutput( spStream, TRUE );

pVoice->Speak(m_sText, 0, NULL);

pVoice->Release();

pVoice = NULL;


CoUninitialize();


return 0;
}