我有以下非常简单的代码(delphi/Object Pascal),它使用Microsoft SAPI 5.4进行一些文本到语音的转换
// init
var engine : tspvoice;
var voice : ispeechobjecttoken;
engine:=tspvoice.Create(nil);
// pick the first voice and assign it to the engine
voice := ISpeechObjectToken(0);
engine.Voice := Voice;
// speak
engine.Speak(text, SVSFlagsAsync);但是,我在输出格式(每采样位数/频率)上看不到任何控制。我有一个来自旧的SAPI SDKdownload的示例应用程序(TTSapp),它允许控制这些参数。不幸的是,我在任何地方都找不到它的源代码,我也找不到任何最新的sapi SDK的下载。
有什么提示吗?
发布于 2015-12-21 23:22:50
我通常不使用delphi,但如果有帮助的话,我在C++中有一个例子。在本例中,您可以看到我正在处理CSpStreamFormat,然后调用SPBindToFile来设置它。sapi.h包含您可以使用的所有SPSTREAMFORMAT类型。
HRESULT hr = S_OK;
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<ISpVoice> cpVoice;
CSpStreamFormat cAudioFmt;
CComPtr<ISpStream> cpStream;
::CoInitialize(NULL);
hr = cAudioFmt.AssignFormat(SPSF_22kHz16BitMono);
hr = SPBindToFile(L"E:\\fileName.wav", SPFM_CREATE_ALWAYS, &cpStream, &cAudioFmt.FormatId(), cAudioFmt.WaveFormatExPtr());
hr = cpVoice.CoCreateInstance(CLSID_SpVoice);
cpVoice->SetOutput(cpStream, TRUE);
hr = cpVoice->Speak(L"My spoken text goes here", SPF_DEFAULT, NULL);
cpStream->Close();
cpStream.Release();
cpVoice.Release();
::CoUninitialize();https://stackoverflow.com/questions/34303360
复制相似问题