SAPI並沒有爲音量,音高和速率之外的語音合成做很多音頻處理。即使這樣說,我也遇到了SAPI的聲音,甚至沒有實現這三件事情。
您可能希望將合成的語音輸出爲.wav文件,並使用另一個庫操作該輸出以進行平移。
這裏有一些代碼將告訴你如何使用C++中的SAPI輸出到.wav文件。
#include <sapi.h>
#include <sphelper.h>
#include <iostream>
int main(int argc, char* argv[])
{
HRESULT hr = S_OK;
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<ISpVoice> cpVoice;
CSpStreamFormat cAudioFmt;
CComPtr<ISpStream> cpStream;
::CoInitialize(NULL);
if(SUCCEEDED(hr))
hr = cAudioFmt.AssignFormat(SPSF_22kHz16BitMono);
if(SUCCEEDED(hr))
hr = SPBindToFile(L"E:\\fileName.wav", SPFM_CREATE_ALWAYS, &cpStream, &cAudioFmt.FormatId(), cAudioFmt.WaveFormatExPtr());
if(SUCCEEDED(hr))
hr = cpVoice.CoCreateInstance(CLSID_SpVoice);
if(SUCCEEDED(hr))
cpVoice->SetOutput(cpStream, TRUE);
if(SUCCEEDED(hr))
hr = cpVoice->Speak(L"My spoken text goes here", SPF_DEFAULT, NULL);
cpStream->Close();
cpStream.Release();
cpVoice.Release();
::CoUninitialize();
std::printf("%s", "Press any key to continue...");
std::getchar();
}
謝謝 - 這是我沒有考慮的方法,但也許是唯一的出路。 – David