TTS将文本转换成WAV文件,如何设置采样率等?
RT。
目前已经实现了将文本朗读结果保存到WAV文件中,但是不知道采样率是否是8位的,看起来像是8位的,但是文件比较大,所以想确认下。问下:
1. 如何设置生成的Wav文件的采样率?
2. 如果是想将生成的WAV文件直接保存到内存的char[]中,如何实现?
PS:
1. 通过Foobar查看WAV文件的属性,如下:
File Name : output.wav
Folder Name : C:
File Path : C:\output.wav
Subsong Index : 0
File Size : 79.3KB (81 280 bytes)
Last Modified : 2009-11-05 09:40:03
Duration : 0:10.027 (80218 samples)
Sample Rate : 8000 Hz
Channels : 1
Bits Per Sample : 8
Bitrate : 64 kbps
Codec : PCM
Encoding : lossless
2. 下面的函数编译可能需要安装Visual Studio 2008+Windows SDK 6.0
int TTSToWav() {
ISpVoice * pVoice = NULL;
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
CComPtr<ISpStream> cpWavStream;
CComPtr<ISpStreamFormat> cpOldStream;
CSpStreamFormat OriginalFmt;
WCHAR CONTENT[1024];
pVoice->GetOutputStream( &cpOldStream );
OriginalFmt.AssignFormat(cpOldStream);
/*
hr = SPBindToFile( CONTENT, SPFM_CREATE_ALWAYS,
&cpWavStream, &OriginalFmt.FormatId(),
OriginalFmt.WaveFormatExPtr());
//*/
//**
hr = SPBindToFile( L"C:\\output.wav", SPFM_CREATE_ALWAYS,
&cpWavStream, &OriginalFmt.FormatId(),
OriginalFmt.WaveFormatExPtr());
//*/
if(SUCCEEDED(hr))
{
pVoice->SetOutput(cpWavStream, TRUE);
WCHAR WTX[] = L"中华人民共和国中华人中华人民共和国中华人中华人民共和国中华人";
pVoice->Speak(WTX, 0, NULL);
pVoice->Release();
pVoice = NULL;
}
}
::CoUninitialize();
return TRUE;
}