JS atob btoa方法处理base64数据后转Blob类型实现文字转语音.mp3文件

Posted 星云-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS atob btoa方法处理base64数据后转Blob类型实现文字转语音.mp3文件相关的知识,希望对你有一定的参考价值。

前端js + google Text-to-Speech API 实现文字转mp3文件

使用由 Google 的 AI 技术提供支持的 API 将文字转换为自然而逼真的语音。

地址Google Text-to-Speech官网

Tip:官网可以在线体验文字转语音,切换语言、男女声、语音速度等功能(详情见下图) 访问需要fq

官网API详情截图
在这里插入图片描述
查阅google开发者文档发现 Text-to-Speech API 返回的是base64编码的JSON和txt文本文件
在这里插入图片描述
Text-to-Speech API key的试用申请可以这篇博客
本文主要讲解前端怎么把base64编码的字符串转化为.mp3文件

JS base64转二进制

大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反

js中有两个方法专门用来处理base64编解码

window.btoa() 和 window.atob()

  1. btoa() 方法使用base-64 编码字符串
  2. atob() 方法用于解码使用 base-64 编码的字符串。

注意⚠️:这两个方法都是返回字符串 atob()方法解码后返回的是unicode编码的字符串 不是二进制对象

下面上代码

	 // 将base64转为二进制Unicode编码
  function base64toBlob(base64) {
    bstr = atob(base64), // 获得base64解码后的字符串
      n = bstr.length, 
      u8arr = new Uint8Array(n); // 新建一个8位的整数类型数组,用来存放ASCII编码的字符串
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n) // 转换编码后才使用charCodeAt 找到Unicode编码 
    }
    return u8arr
  }

JS二进制转文件流

以上方法得到了ArrayBufferView类型的二进制数据, 要将它转换为二进制文件流 这里要用到Blob对象
在这里插入图片描述

const fileStream = new Blob([data], { type:'audio/mpeg' })

通过url下载文件流

这里需要用到window.URL.createObjectURL方法

URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。
这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象

最后通过download类型a标签调用浏览器下载文件即可

function dataURLtoFile(data, fileName, fileType) {
  const fileStream = new Blob([data], { type:fileType })
  let url = window.URL.createObjectURL(fileStream)
  let link = document.createElement('a')
  link.style.display = 'none'
  link.href = url
  link.setAttribute('download', fileName)
  document.body.appendChild(link)
  link.click();
  link.remove();
}

最后贴一个.html的demo,需要demo的小伙伴可以留下email,看到后发
在这里插入图片描述

以上是关于JS atob btoa方法处理base64数据后转Blob类型实现文字转语音.mp3文件的主要内容,如果未能解决你的问题,请参考以下文章

JS atob btoa方法处理base64数据后转Blob类型实现文字转语音.mp3文件

js btoa 和 atob

使用window.btoa和window.atob来进行Base64编码和解码

window.btoa 与 window.atob

js base64的转码与解码

为啥 Javascript `atob()` 和 `btoa()` 被这样命名?