2015-10-28 45 views
2

我正在探索在Windows 7 Embedded平臺上的兩個獨立併發運行的Win32應用程序的選項,以將其音頻輸出到音頻輸出設備的相應通道(即應用程序'A'使用左聲道,和應用程序'B'使用權利)。SAPI音頻平衡/平移選項

在這種情況下,應用程序A是一個預先存在的使用SAPI TTS引擎的C++應用程序。 (應用程序B是一個尚未編寫的應用程序)。

雖然SAPI界面提供了一個卷屬性,但似乎沒有規定提名平移/平衡設置。

我已經給了虛擬音頻線一個嘗試,認爲可能啓用連接到左或右聲道,但它不。

任何建議,編程或其他?

回答

1

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(); 
} 
+0

謝謝 - 這是我沒有考慮的方法,但也許是唯一的出路。 – David