NodeJS 百度智能云文本转语音(实测)

        现在文本转语音的技术已经非常完善了,尽管网络上有许多免费的工具,还是测试了专业的服务,选择了百度的TTS服务。

        于是,在百度智能云注册和开通了文本转语音的服务,尝试使用NodeJS 实现文本转语音服务。但是百度的文档实在有点难以琢磨,网上也鲜有实例。本博文分享自己的代码。

百度智能云提供下面几种语音服务:

语音识别

语音合成

        短文本在线合成

        长文本在线合成

呼叫中心语音

我开通了长文本在线合成

百度语音合成分为三步

  •  建立一个任务
  • 查询任务是否完成
  • 下载MP3 文件

基于nodeJS 程序实现,分为两个程序

  •     提交任务程序
  •    检测任务是否完成,如果完成就下载到本地

代码 (提交任务)

const axios = require('axios');
const AK = "ZEnhIO3z******xX7v67k63"
const SK = "RtwuuVgPP******815aDIicddfnfW0"async function main() {var options = {'method': 'POST','url': 'https://aip.baidubce.com/rpc/2.0/tts/v1/create?access_token=' + await getAccessToken(),'headers': {'Content-Type': 'application/json','Accept': 'application/json'},data: JSON.stringify({"format": "mp3-16k","text":"传统广播电台是由电台的总编和记者为听众安排节目内容,互联网技术推动了按需播放的方式。按需播放的本质是由听众自己决定收听的内容。","voice": 0,"lang": "zh","speed": 5,"pitch": 5,"volume": 5,"enable_subtitle": 0})};axios(options).then(response => {console.log(response.data);}).catch(error => {throw new Error(error);})
}/*** 使用 AK,SK 生成鉴权签名(Access Token)* @return string 鉴权签名信息(Access Token)*/
function getAccessToken() {let options = {'method': 'POST','url': 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + AK + '&client_secret=' + SK,}return new Promise((resolve, reject) => {axios(options).then(res => {resolve(res.data.access_token)}).catch(error => {reject(error)})})
}main();

代码结束后,返回

{log_id: 17316727496409212,task_status: 'Created',task_id: '67373aadfeff4300017cf079'
}

提取 task_id 填写到下面的程序中(task_ids) 。

注:voice 是音库

      精品音库:度逍遥(精品)=5003,度小鹿=5118,度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5。默认为度小美

代码(检查任务是否完成并下载)

const axios = require('axios');
const fs = require('fs');
const AK = "ZEnhIO3z******X7v67k63"
const SK = "RtwuuVgP*******BVg815aDIicddfnfW0"async function main() {var options = {'method': 'POST','url': 'https://aip.baidubce.com/rpc/2.0/tts/v1/query?access_token=' + await getAccessToken(),'headers': {'Content-Type': 'application/json','Accept': 'application/json'},"data": JSON.stringify({"task_ids": ['67371bf01305c600016c8451' ]})};axios(options).then(response => {speech_url=response.data.tasks_info[0].task_result.speech_url;console.log(speech_url)downLoad(speech_url,"./audio.mp3")}).catch(error => {throw new Error(error);})
}
function downLoad(fileUrl,outputLocationPath){const writer = fs.createWriteStream(outputLocationPath);return axios({method: 'get',url: fileUrl,responseType: 'stream',}).then(response => {return new Promise((resolve, reject) => {response.data.pipe(writer);let error = null;writer.on('error', err => {error = err;writer.close();reject(err);});writer.on('close', () => {if (!error) {resolve(true);}});});});
}
/*** 使用 AK,SK 生成鉴权签名(Access Token)* @return string 鉴权签名信息(Access Token)*/
function getAccessToken() {let options = {'method': 'POST','url': 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + AK + '&client_secret=' + SK,}return new Promise((resolve, reject) => {axios(options).then(res => {resolve(res.data.access_token)}).catch(error => {reject(error)})})
}
main();

在文档中看见了 audio.mp3.播放正常,音质还不错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于在Reverse函数中不能使用L=s而是*L=*s的原因分析

完整代码地址: https://blog.csdn.net/2301_76819732/article/details/143807340?spm1001.2014.3001.5502 如果使用Ls; 的话,当输出结果时,会发现内容为空。 我感到很奇怪,按照我的设想,Ls;会把s指向的地址赋给L。 但…

麒麟系统下docker搭建jenkins

首先我们需要创建宿主机挂载路径,我这里放在本地的/data/henkins/home,然后赋予权限,命令如下: mkdir -p /data/jenkins/home chown -R 1000:1000 /data/jenkins/home chmod -R 777 /data/jenkins/homedocker run -d --restart …

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot

1,创建证书和密钥 需要openssl环境,如果是Window下,下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境,此环境是在jdk环境下 本案例所使用的账号密码均为: ka…

CSS基础知识04

文本溢出通常是指在限定的空间内不能容纳所输入的文字,导致文字超出了容器的边界 一、文本溢出 1.1.css属性处理 所用到的属性 属性属性值overflowvisible:默认值,内容不会被修剪,会呈现在元素框之外。hidden:内容会…

【从零开始的LeetCode-算法】3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0 。 请你返回 …

浅层神经网络

浅层神经网络 浅层神经网络通常指包含一个隐藏层的神经网络。这个网络由输入层、隐藏层和输出层构成: 输入层:输入层负责接收网络的输入特征,通常表示为列向量 x T [ x 1 , x 2 , x 3 ] x^T [x_1, x_2, x_3] xT[x1​,x2​,x3​]&#xff…

web与网络编程

使用HTTP协议访问Web 通过发送请求获取服务器资源的Web浏览器等,被成为客户端(client)。 Web使用一种名为HTTP(超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。 可以说,Web时建立在HTTP协议上通信的。 网络基础T…

HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析

机电液一体化与先进机器人控制技术国际会议(HARCT 2025)将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果,邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…

Vue3中一级导航栏的吸顶导航交互以及Pinia优化重复请求

一、前言 在日常的网站中,当鼠标滚轮往页面的底部滑动时,会出现顶部导航栏的隐藏,而出现新的导航栏显示,这就是一级导航栏的吸顶导航交互。本文当实现改模块功能的实现。 二、示例图 参考黑马程序员小兔仙儿PC端项目:…

计算机网络HTTP——针对实习面试

目录 计算机网络HTTP什么是HTTP?HTTP和HTTPS有什么区别?分别说明HTTP/1.0、HTTP/2.0、HTTP/3.0请说明访问网页的全过程请说明HTTP常见的状态码Cookie和Session有什么区别?HTTP请求方式有哪些?请解释GET和POST的区别?HT…

Win11 终端执行 python xxx.py 没反应

在 Win11 上写了一段 Python 代码来分析日志文件, 发现执行没反应。是在 VSCode 里的终端中执行的 python log_stats.py, 是 PowerShell; 也尝试了 cmd, 情况一样。 一开始怀疑代码写错,直到故意在代码里加打印,发现没…

自由学习记录(22)

最后再总结一下吧 虽然过程里很多细节也许我没有去管,毕竟现在就已经存在更好的解决方案了 但大致思想是了解了 A星是一种网格上的遍历方式,为了找到一个目标点和起点之间的要经过的最短节点组 里面更像是动态规划 每一次的遍历,都是当前…

如何保证MySQL与Redis缓存的数据一致性?

文章目录 一、引言二、场景来源三、高并发解决方案1. 先更新缓存,再更新数据库2. 先更新数据库,再更新缓存3. 先删除缓存,再更新数据库4. 先更新数据库,再删除缓存小结 四、拓展方案1. 分布式锁与分布式事务2. 消息队列3. 监听bin…

java-Day06 内部类 Lambda表达式 API

内部类 内部类:就是在一个类中定义一个类 格式例: public class Outer { public class Inner { } } 内部类分类 1.成员内部类(了解) 创建成员内部类 外部类.内部类 对象名new外部类().new内部类() 2.静态内部类(了解) 3.局部内部类(了解) 4.匿名内部类…

【3D Slicer】的小白入门使用指南八

3D Slicer DMRI(Diffusion MRI)-扩散磁共振认识和使用 0、简介 大脑解剖 ● 白质约占大脑的 45% ● 有髓神经纤维(大约10微米轴突直径) 白质探索 朱尔斯约瑟夫德杰林(Jules Joseph Dejerine,《神经中心解剖学》(巴黎,1890-1901):基于髓磷脂染色标本的神经解剖图谱)…

Spring Boot框架:构建可扩展的网上商城

4 系统设计 网上商城系统的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过全…

【Pikachu】任意文件上传实战

将过去和羁绊全部丢弃,不要吝惜那为了梦想流下的泪水。 1.不安全的文件上传漏洞概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的…

vue3:computed

vue3:computed 扫码或者点击文字后台提问 computed 支持选项式写法 和 函数式写法 1.选项式写法 支持一个对象传入get函数以及set函数自定义操作 2.函数式写法 只能支持一个getter函数不允许修改值的 基础示例 <template><div><div>姓&#xff1a;<i…

Python调用API翻译Excel中的英语句子并回填数据

一、问题描述 最近遇到一个把Excel表中两列单元格中的文本读取&#xff0c;然后翻译&#xff0c;再重新回填到单元格中的案例。大约有700多行&#xff0c;1400多个句子&#xff0c;一个个手动复制粘贴要花费不少时间&#xff0c;而且极易出错。这时&#xff0c;我们就可以请出…

NFS-Ganesha 核心架构解读

NFSv4 简要概述 NFS 这个协议( NFSv2 )最初由 Sun Microsystems 在 1984 年设计提出&#xff0c;由于存在一些不足&#xff0c;因此在随后由几家公司联合推出了 NFSv3。到了 NFSv4 时&#xff0c;开发完全由 IETF 主导&#xff0c;设计目标是&#xff1a; 提高互联下的 NFS 访…