次の方法で共有


XSpeechSynthesizerCreate

スピーチ シンセサイザーを作成します。

構文

HRESULT XSpeechSynthesizerCreate(  
         XSpeechSynthesizerHandle* speechSynthesizer  
)  

パラメーター

speechSynthesizer _Out_
型: XSpeechSynthesizerHandle*

作成されたスピーチ シンセサイザーのハンドル。

戻り値

型: HRESULT

正常に実行された場合は S_OK が返され、それ以外の場合はエラー コードが返されます。 エラー コードの一覧については、「エラー コード」を参照してください。

解説

注意

この関数は、時間依存のスレッドで呼び出すのに安全ではありません。 詳細については、「時間依存のスレッド」を参照してください。

この関数を使用して、新しいスピーチ シンセサイザー インスタンスへのハンドルを作成して受け取ります。これにより、インストールされたスピーチ合成エンジン (voice) の機能へのアクセスを提供します。

既定では、新しいスピーチ シンセサイザーのインスタンスは、現在のシステム音声を使用します。 現在のデバイスにインストールされている音声に関する情報を列挙して取得するには、XSpeechSynthesizerEnumerateInstalledVoices 関数および XSpeechSynthesizerInstalledVoicesCallback コールバック関数を使用します。 インストールされている各音声について、XSpeechSynthesizerVoiceInformation 構造体は、音声 ID、説明、表示テキスト、性別、言語、およびその他の情報を提供します。 XSpeechSynthesizerSetCustomVoice を呼び出して、インストールされている別の音声を使用するか、または XSpeechSynthesizerSetDefaultVoice を呼び出して、現在のシステム音声を再度使用します。

スピーチ シンセサイザー ハンドルを作成して音声を指定したら、XSpeechSynthesizerCreateStreamFromText 関数を使用して、スピーチ シンセサイザー ストリームを作成し、プレーン テキストからスピーチを合成します。 XSpeechSynthesizerGetStreamDataSize 関数と XSpeechSynthesizerGetStreamData 関数を使用して、スピーチ シンセサイザー ストリームから合成スピーチのオーディオ データを取得します。すべての未処理の非同期操作が完了したら XSpeechSynthesizerCloseStreamHandle 関数を使用して、スピーチ シンセサイザー ストリームを閉じます。

スピーチ シンセサイザーの使用後には、XSpeechSynthesizerCloseHandle 関数を使用してスピーチ シンセサイザーを閉じ、システム リソースを解放します。

メモリ リークを防ぐため、ハンドルを使用しているすべての操作を完了した後で、XSpeechSynthesizerCloseHandle 関数を呼び出して、スピーチ シンセサイザー ハンドルを閉じます。

次の例は、スピーチ シンセサイザーとインストールされた音声を使用して、プレーン テキストからスピーチを合成する方法、およびスピーチ シンセサイザー ストリームを使ってオーディオ データを合成する方法を示しています。 XSpeechSynthesizerCreate 関数と XSpeechSynthesizerSetCustomVoice 関数は、スピーチ シンセサイザー インスタンスを作成し、オプションとして、voiceId で音声 ID が指定されている場合にカスタム音声を割り当てます。 次に、XSpeechSynthesizerCreateStreamFromText 関数がスピーチ シンセサイザー ストリームを作成し、textToSpeak で指定されたプレーン テキストからスピーチを合成します。 ストリームが作成された後、XSpeechSynthesizerGetStreamDataSize 関数と XSpeechSynthesizerGetStreamData 関数は、ストリームから再生される合成スピーチのオーディオ データを取得します。 最後に、オーディオ データの再生が完了した後、XSpeechSynthesizerCloseStreamHandle 関数と XSpeechSynthesizerCloseHandle 関数は、スピーチ シンセサイザー ストリームとスピーチ シンセサイザーを閉じます。

HRESULT Game::SynthesizeSpeech(
    const char* textToSpeak,
    const char* voiceId)
{
    // Create a new speech synthesizer.
    XSpeechSynthesizerHandle ssHandle = nullptr;
    if (FAILED(XSpeechSynthesizerCreate(&ssHandle))) { return E_FAIL; }

    // If a voice ID was specified, attempt to set the speech synthesizer to
    // use the specified voice. Note that voiceId has a default value of nullptr, 
    // as specified in its function declaration.
    if (voiceId != nullptr) 
    {
        if (FAILED(XSpeechSynthesizerSetCustomVoice(ssHandle, voiceId))) { return E_FAIL; }
    }

    // Create a new speech synthesizer stream from the specified text.
    XSpeechSynthesizerStreamHandle ssStreamHandle = nullptr;
    if (FAILED(XSpeechSynthesizerCreateStreamFromText(ssHandle, textToSpeak, &ssStreamHandle))) { return E_FAIL; }

    // Get the size of the buffer needed for the audio data from our stream.
    size_t bufferSize;
    if (FAILED(XSpeechSynthesizerGetStreamDataSize(ssStreamHandle, &bufferSize))) { return E_FAIL; }

    // Define the buffer, then retrieve the audio data from our stream.
    std::vector<char> streamData;
    streamData.resize(bufferSize);
    if (FAILED(XSpeechSynthesizerGetStreamData(ssStreamHandle, bufferSize, streamData.data(), &bufferSize))) { return E_FAIL; }

    // We now have audio data from the speech synthesizer stream, so let's play it. 
    // For the purposes of this example, the sound is played synchronously, so that we don't
    // risk having an outstanding asynchronous operation when we close the stream.
    PlaySoundW(reinterpret_cast<LPCWSTR>(streamData.data()), nullptr, SND_MEMORY);

    // We're done with the speech synthesizer stream, so let's close it.
    if (FAILED(XSpeechSynthesizerCloseStreamHandle(ssStreamHandle))) { return E_FAIL; }

    // We're done with the speech synthesizer, so let's close that, too.
    if (FAILED(XSpeechSynthesizerCloseHandle(ssHandle))) { return E_FAIL; }

    return S_OK;
}

要件

ヘッダー: XSpeechSynthesizer.h

ライブラリ: xgameruntime.lib

サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体

関連項目

XAccessibility
XSpeechSynthesizerCloseHandle
XSpeechSynthesizer