> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XSpeechSynthesizerCreate

> XSpeechSynthesizerCreate

# XSpeechSynthesizerCreate

음성 합성기를 만듭니다.

## 구문

```cpp theme={null}
HRESULT XSpeechSynthesizerCreate(  
         XSpeechSynthesizerHandle* speechSynthesizer  
)  
```

### 매개 변수

*speechSynthesizer*   \_Out\_\
형식: XSpeechSynthesizerHandle\*

만들어진 음성 합성기에 대한 핸들입니다.

### 반환 값

형식: [HRESULT](https://learn.microsoft.com/openspecs/windows_protocols/ms-erref/0642cb2f-2075-4469-918c-4441e69c548a)

성공하면 **S\_OK**를 반환하고, 그렇지 않으면 오류 코드를 반환합니다. 오류 코드 목록은 [오류 코드](/reference/errorcodes)를 참조하세요.

## 설명

<Note>이 함수는 시간에 민감한 스레드에서 호출해서는 안전하지 않습니다. 자세한 내용은 [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)를 참조하세요.</Note>

이 함수를 사용하여 새 음성 합성기 인스턴스를 만들고 그에 대한 핸들을 받을 수 있으며, 이는 설치된 음성 합성 엔진 또는 *음성*의 기능에 액세스할 수 있게 합니다.

기본적으로 새 음성 합성기 인스턴스는 현재 시스템 음성을 사용합니다. 현재 디바이스에 설치된 음성을 열거하고 정보를 가져오려면 [XSpeechSynthesizerEnumerateInstalledVoices](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerenumerateinstalledvoices) 함수를 [XSpeechSynthesizerInstalledVoicesCallback](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerinstalledvoicescallback) 콜백 함수와 함께 사용합니다. 설치된 각 음성에 대해 [XSpeechSynthesizerVoiceInformation](/reference/system/xspeechsynthesizer/structs/xspeechsynthesizervoiceinformation) 구조체는 음성 ID, 설명, 표시 텍스트, 성별, 언어 및 기타 정보를 제공합니다. 다른 설치된 음성을 사용하려면 [XSpeechSynthesizerSetCustomVoice](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizersetcustomvoice)를 호출하고, 현재 시스템 음성을 다시 사용하려면 [XSpeechSynthesizerSetDefaultVoice](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizersetdefaultvoice)를 호출합니다.

음성 합성기 핸들을 만들고 음성을 지정한 후에는 [XSpeechSynthesizerCreateStreamFromText](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizercreatestreamfromtext) 함수를 사용하여 음성 합성기 스트림을 만들고 일반 텍스트에서 음성을 합성합니다. [XSpeechSynthesizerGetStreamDataSize](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizergetstreamdatasize) 및 [XSpeechSynthesizerGetStreamData](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizergetstreamdata) 함수를 사용하여 음성 합성기 스트림에서 합성된 음성에 대한 오디오 데이터를 가져온 다음, 진행 중인 모든 비동기 작업이 완료된 후 [XSpeechSynthesizerCloseStreamHandle](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerclosestreamhandle) 함수를 사용하여 음성 합성기 스트림을 닫습니다.

음성 합성기를 다 사용한 후에는 [XSpeechSynthesizerCloseHandle](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerclosehandle) 함수를 사용하여 음성 합성기를 닫고 시스템 리소스를 해제합니다.

메모리 누수를 방지하려면 핸들을 사용하는 모든 작업을 완료한 후 [XSpeechSynthesizerCloseHandle](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerclosehandle) 함수를 호출하여 음성 합성기 핸들을 닫습니다.

다음 예제는 음성 합성기와 설치된 음성을 사용하여 일반 텍스트에서 음성을 합성하는 방법과 음성 합성기 스트림으로 오디오 데이터를 합성하는 방법을 보여 줍니다. **XSpeechSynthesizerCreate** 및 **XSpeechSynthesizerSetCustomVoice** 함수는 음성 합성기 인스턴스를 만들고, *voiceId*에 음성 ID가 지정된 경우 사용자 지정 음성을 옵션으로 할당합니다. 그런 다음 **XSpeechSynthesizerCreateStreamFromText** 함수가 음성 합성기 스트림을 만들고 *textToSpeak*에 지정된 일반 텍스트에서 음성을 합성합니다. 스트림이 만들어진 후 **XSpeechSynthesizerGetStreamDataSize** 및 **XSpeechSynthesizerGetStreamData** 함수는 스트림에서 재생할 합성된 음성에 대한 오디오 데이터를 검색합니다. 마지막으로 오디오 데이터 재생이 완료된 후 **XSpeechSynthesizerCloseStreamHandle** 및 **XSpeechSynthesizerCloseHandle** 함수가 음성 합성기 스트림과 음성 합성기를 닫습니다.

```cpp theme={null}
HRESULT Game::SynthesizeSpeech(
    const char* textToSpeak,
    const char* voiceId)
{
    // 새 음성 합성기를 만듭니다.
    XSpeechSynthesizerHandle ssHandle = nullptr;
    if (FAILED(XSpeechSynthesizerCreate(&ssHandle))) { return E_FAIL; }

    // 음성 ID가 지정된 경우 음성 합성기가 지정된 음성을 사용하도록 설정을 시도합니다.
    // voiceId는 함수 선언에 지정된 대로 기본값이 nullptr입니다.
    if (voiceId != nullptr) 
    {
        if (FAILED(XSpeechSynthesizerSetCustomVoice(ssHandle, voiceId))) { return E_FAIL; }
    }

    // 지정된 텍스트에서 새 음성 합성기 스트림을 만듭니다.
    XSpeechSynthesizerStreamHandle ssStreamHandle = nullptr;
    if (FAILED(XSpeechSynthesizerCreateStreamFromText(ssHandle, textToSpeak, &ssStreamHandle))) { return E_FAIL; }

    // 스트림에서 오디오 데이터에 필요한 버퍼 크기를 가져옵니다.
    size_t bufferSize;
    if (FAILED(XSpeechSynthesizerGetStreamDataSize(ssStreamHandle, &bufferSize))) { return E_FAIL; }

    // 버퍼를 정의한 다음 스트림에서 오디오 데이터를 검색합니다.
    std::vector<char> streamData;
    streamData.resize(bufferSize);
    if (FAILED(XSpeechSynthesizerGetStreamData(ssStreamHandle, bufferSize, streamData.data(), &bufferSize))) { return E_FAIL; }

    // 이제 음성 합성기 스트림에서 오디오 데이터가 있으므로 재생해 봅시다. 
    // 이 예제의 목적상 소리는 동기적으로 재생되므로 스트림을 닫을 때 진행 중인 비동기 작업이 발생할 위험이 없습니다.
    PlaySoundW(reinterpret_cast<LPCWSTR>(streamData.data()), nullptr, SND_MEMORY);

    // 음성 합성기 스트림이 끝났으므로 닫습니다.
    if (FAILED(XSpeechSynthesizerCloseStreamHandle(ssStreamHandle))) { return E_FAIL; }

    // 음성 합성기도 끝났으므로 닫습니다.
    if (FAILED(XSpeechSynthesizerCloseHandle(ssHandle))) { return E_FAIL; }

    return S_OK;
}
```

## 요구 사항

**헤더:** XSpeechSynthesizer.h

**라이브러리:** xgameruntime.lib

**지원 플랫폼:** Windows, XBOX One 제품군 콘솔 및 XBOX Series 콘솔

## 개념 문서

* [텍스트 음성 변환](/build/console-features/text-to-speech/text-to-speech)
* [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## 함께 보기

[XAccessibility](/reference/system/xaccessibility/xaccessibility_members)\
[XSpeechSynthesizerCloseHandle](/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerclosehandle)\
[XSpeechSynthesizer](/reference/system/xspeechsynthesizer/xspeechsynthesizer_members)


## Related topics

- [XSpeechSynthesizerCreateStreamFromSsml](/ko/reference/system/xspeechsynthesizer/functions/xspeechsynthesizercreatestreamfromssml.md)
- [XSpeechSynthesizerCreateStreamFromText](/ko/reference/system/xspeechsynthesizer/functions/xspeechsynthesizercreatestreamfromtext.md)
- [XSpeechSynthesizerCloseHandle](/ko/reference/system/xspeechsynthesizer/functions/xspeechsynthesizerclosehandle.md)
- [XSpeechSynthesizer](/ko/reference/system/xspeechsynthesizer/xspeechsynthesizer_members.md)
- [XSpeechSynthesizerGetStreamData](/ko/reference/system/xspeechsynthesizer/functions/xspeechsynthesizergetstreamdata.md)
