Google Apps Script调用GCP文本转语音返回text格式如何保存为MP3
问题根因
GCP Text-to-Speech的synthesize接口返回的是JSON结构,音频内容存放在audioContent字段中,为base64编码的字符串,而非直接返回二进制MP3流,所以你之前直接对响应对象调用getBlob、getAs等方法都无法得到正确的音频文件。
正确实现代码
function gcp_text_to_speech(){ var payload = { 'input':{ 'text':'I\'ve added the event to your calendar.' }, 'voice':{ 'languageCode':'en-gb', 'name':'en-GB-Standard-A', 'ssmlGender':'FEMALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }; var response = UrlFetchApp.fetch( "https://texttospeech.googleapis.com/v1/text:synthesize", { method: "POST", headers: { "Authorization" : "Bearer " + getService().getAccessToken() }, contentType: "application/json", payload: JSON.stringify(payload), muteHttpExceptions: true }); // 解析响应JSON获取base64格式的音频内容 const responseJson = JSON.parse(response.getContentText()); const base64AudioContent = responseJson.audioContent; // 解码base64为二进制字节 const audioBinary = Utilities.base64Decode(base64AudioContent); // 生成指定MIME类型的MP3 Blob const mp3Blob = Utilities.newBlob(audioBinary, 'audio/mpeg', '语音合成结果.mp3'); // 保存到Google Drive,也可替换为DriveApp.createFile(mp3Blob)无需启用高级API const saveResult = Drive.Files.insert({title: "语音合成结果.mp3"}, mp3Blob); }
补充说明
- 不需要调用
getAs方法做格式转换,直接通过Utilities.newBlob指定MIME类型audio/mpeg即可生成可正常播放的MP3文件,该格式为Google Apps Script官方支持的Blob类型。 - 如果你没有启用Drive高级API,将最后一行保存代码替换为
DriveApp.createFile(mp3Blob)即可完成存储。
内容的提问来源于stack exchange,提问作者jason
相关产品推荐
相关产品推荐

