TTS将文本转换成WAV文件,如何设置采样率等?

e_ville 2009-11-05 10:05:10
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;
}
...全文
605 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whg01 2009-11-05
  • 打赏
  • 举报
回复
转自: http://www.ramonyuan.com/?p=41

通过如下代码设置当前朗读频率:
CComPtr m_cpOutAudio; //声音输出接口
SpCreateDefaultObjectFromCategoryId( SPCAT_AUDIOOUT, &m_cpOutAudio ); //创建接口
SPSTREAMFORMAT eFmt = 21; //SPSF_22kHz 8Bit Stereo
CSpStreamFormat Fmt;
Fmt.AssignFormat(eFmt);
if ( m_cpOutAudio )
{
hr = m_cpOutAudio->SetFormat( Fmt.FormatId(), Fmt.WaveFormatExPtr() );
}
else hr = E_FAIL;

if( SUCCEEDED( hr ) )
{
m_cpVoice->SetOutput( m_cpOutAudio, FALSE );
}

MSDN:
http://msdn.microsoft.com/en-us/library/ms717276(VS.85).aspx

e_ville 2009-11-05
  • 打赏
  • 举报
回复
谢谢楼上的回复。
原来默认生成的就是8KHz,8Bit的A-law PCM编码的WAV文件,东进的语音卡可以直接播放。所以就不需要转换了。
目前采用临时文件的方式进行播放。用之前生成,用完就删除。

结贴,散分……

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧