# Google TTS API 使用 google目前把TTS納入收費模式 這個api還可以使用,但是不確定google哪時候會把這個api關閉 http://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&textlen=32&client=tw-ob&q=%E5%B7%B2%E7%B6%93%E5%B9%AB%E4%BD%A0%E6%89%93%E9%96%8B%E9%9B%BB%E7%87%88&tl=zh-cn ## 串接google cloud api 服務憑證一直失敗,找不到解決原因,最後用api金鑰的方式串接 ## POST 的方式送出http api google tts api ``` https://texttospeech.googleapis.com/v1/text:synthesize?key={your_api_key} ``` json格式送出內容 ``` { "voice":{ "languageCode":"en-US" }, "input":{ "text":"Hello world" }, "audioConfig":{ "audioEncoding":"mp3" } } ``` 會回傳base64編碼後的String ``` { "audioContent": string } ``` 最後解碼後回傳byte[]的形態 ``` response.setContentType("audio/mpeg"); ``` ## 網頁上可以用html audio 的方式播放出聲音 先將base64編碼後的String 轉換成 blob 格式 再放到audio 的 src 範例: ``` let audioBlob = base64ToBlob(response.data.audioContent, "mp3"); audio_success.src = window.URL.createObjectURL(audioBlob); audio_success.playbackRate = 1; audio_success.play(); function base64ToBlob(base64, fileType) { let typeHeader = "data:application/" + fileType + ";base64,"; // 定义base64 头部文件类型 let audioSrc = typeHeader + base64; // 拼接最终的base64 let arr = audioSrc.split(","); let array = arr[0].match(/:(.*?);/); let mime = (array && array.length > 1 ? array[1] : type) || type; // 去掉url的头,并转化为byte let bytes = window.atob(arr[1]); // 处理异常,将ascii码小于0的转换为大于0 let ab = new ArrayBuffer(bytes.length); // 生成视图(直接针对内存):8位无符号整数,长度1个字节 let ia = new Uint8Array(ab); for (let i = 0; i < bytes.length; i++) { ia[i] = bytes.charCodeAt(i); } return new Blob([ab], { type: mime }); } ```