C++ Microsoft SAPI: Как установить вывод синтеза речи по тексту Windows на буфер памяти?

Я пытался выяснить, как "говорить" текст в буфер памяти с помощью Windows SAPI 5.1, но до сих пор никакой успех, даже при том, что это кажется им, не должен быть довольно простым.

Существует пример потоковой передачи синтезированной речи в .wav файл, но никакие примеры того, как передать его потоком к буферу памяти.

В конце у меня должна быть синтезированная речь в символе* массив в 16-разрядном формате PCM с прямым порядком байтов на 16 кГц. В настоящее время я создаю временный файл .wav файл, перенаправляю речевой вывод там, затем читаю его, но это, кажется, довольно глупое решение.

Кто-либо знает, как сделать это?

Спасибо!

6
задан Vladimir 7 May 2010 в 03:47
поделиться

2 ответа

Вы знаете, как создать файл с отображением в память? Вы можете увидеть, будет ли к нему привязан ISpStream .

0
ответ дан 10 December 2019 в 02:43
поделиться

Посмотрите в ISpStream :: SetBaseStream. Вот маленький помощник:

inline HRESULT SPCreateStreamOnHGlobal(
                    HGLOBAL hGlobal,            //Memory handle for the stream object
                    BOOL fDeleteOnRelease,      //Whether to free memory when the object is released
                    const WAVEFORMATEX * pwfex, //WaveFormatEx for stream
                    ISpStream ** ppStream)      //Address of variable to receive ISpStream pointer
{
    HRESULT hr;
    IStream * pMemStream;
    *ppStream = NULL;
    hr = ::CreateStreamOnHGlobal(hGlobal, fDeleteOnRelease, &pMemStream);
    if (SUCCEEDED(hr))
    {
        hr = ::CoCreateInstance(CLSID_SpStream, NULL, CLSCTX_ALL, __uuidof(*ppStream), (void **)ppStream);
        if (SUCCEEDED(hr))
        {
            hr = (*ppStream)->SetBaseStream(pMemStream, SPDFID_WaveFormatEx, pwfex);
            if (FAILED(hr))
            {
                (*ppStream)->Release();
                *ppStream = NULL;
            }
        }
        pMemStream->Release();
    }
    return hr;
}
7
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: