2015-12-16 39 views
0

我有以下的,非常简单的代码(DELPHI/Object Pascal中),它采用微软SAPI 5.4做了一些文本到语音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。

任何提示?

回答

0

我通常不使用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(); 
+0

谢谢。但是,我意识到这一点,在将TTS录制到Wav文件时,我已经使用了上述内容。我的问题是我没有看到实时输出的控制级别(音频格式参数)。然而,一些SAPI测试应用程序允许用户调整音频输出格式以便进行波形输出。 – resle