Imports Google.Cloud.TextToSpeech.V1
Imports System.IO

Public Class Form1
    '【Synthesisinput】
    '.Ssml                          音声合成マークアップ言語
    '.Text                          テキスト

    '【VoiceSelectionParams】
    'LanguageCode as String         言語タグ BCP-47 例:ja-JP,en-US
    'Name as String                 声の名前
    '                               ja-JP-Standard-A  女性
    '                               ja-JP-Standard-B  女性
    '                               ja-JP-Standard-C  男性
    '                               ja-JP-Standard-D  男性
    '                               ja-JP-Wavenet-A   女性
    '                               ja-JP-Wavenet-B   女性
    '                               ja-JP-Wavenet-C   男性
    '                               ja-JP-Wavenet-D   男性
    'SsmlGender as SsmVoiceGender   声の性別 Female,Male

    '【AudioConfig】
    'AudioEncoding as AudioEncoding 出力オーディオ形式 Alaw,Linear16,Mp3,Mulaw,OggOpus
    'Pitch as double                音高 -20.0~20.0
    'SampleRateHertz as integer     サンプル周波数(ヘルツ単位)
    'SpeakingRate as double         発話速度 0.25~4.0
    'VolumeGainDb as double         音量 -96~16.0 推奨10.0まで

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "./credential.json", EnvironmentVariableTarget.Process)
        Dim client As TextToSpeechClient = TextToSpeechClient.Create
        Dim body As String = "<speak>音声合成のテストをします。</speak>"
        Dim input As New SynthesisInput With {.Ssml = body}
        Dim voice As New VoiceSelectionParams With {
            .LanguageCode = "ja-JP",
            .Name = "ja-JP-Wavenet-A",
            .SsmlGender = SsmlVoiceGender.Female}
        Dim audioConfig As New AudioConfig With {
            .AudioEncoding = AudioEncoding.Linear16,
            .Pitch = 0,
            .SampleRateHertz = 441000,
            .SpeakingRate = 1.0,
            .VolumeGainDb = 10.0}
        Dim response = client.SynthesizeSpeech(New SynthesizeSpeechRequest With {
                                              .Input = input,
                                              .Voice = voice,
                                              .AudioConfig = audioConfig})
        Using output As Stream = File.Create("./result.wav")
            response.AudioContent.WriteTo(output)
        End Using
        My.Computer.Audio.Play("./result.wav")
    End Sub

End Class