2015-12-16 60 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