google目前把TTS納入收費模式
這個api還可以使用,但是不確定google哪時候會把這個api關閉
服務憑證一直失敗,找不到解決原因,最後用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");
先將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
});
}