【问题标题】:SAPI Audio balance/pan optionsSAPI 音频平衡/声像选项
【发布时间】:2015-10-28 15:36:17
【问题描述】:

我正在探索 Windows 7 Embedded 平台上两个独立、同时运行的 Win32 应用程序的选项,以将它们的音频输出到音频输出设备的各个通道(即应用程序“A”使用左声道,应用程序“B”使用右边)。

在这种情况下,应用程序 A 是一个预先存在的 C++ 应用程序,它使用 SAPI TTS 引擎。 (应用程序 B 是一个尚未编写的应用程序)。

虽然 SAPI 接口提供了音量属性,但似乎没有指定平移/平衡设置的规定。

我尝试了虚拟音频线,认为这可能会启用与左声道或右声道的连接,但事实并非如此。

有什么建议,程序化的还是其他的?

【问题讨论】:

    标签: c++ audio 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();
    }
    

    【讨论】:

    • 谢谢-这是我没有考虑过的方法,但也许是唯一的前进方向。
    猜你喜欢
    • 2016-01-03
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多