【问题标题】:SAPI 5.4 audio output parametersSAPI 5.4 音频输出参数
【发布时间】:2015-12-16 03:15:05
【问题描述】:

我有以下非常简单的代码(delphi/Object Pascal),它使用 Microsoft SAPI 5.4 来做一些 Text To Speech

// 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 的下载。

有什么提示吗?

【问题讨论】:

    标签: windows delphi text-to-speech sapi


    【解决方案1】:

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

    【讨论】:

    • 谢谢。但是,我知道这一点,在将 TTS 录制到 Wav 文件时,我已经使用了上述方法。我的问题是我看不到实时输出的相同级别的控制(音频格式参数)。然而,一些 SAPI 测试应用程序允许用户调整波形输出的音频输出格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多