当前位置: 首页 > article >正文

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.kler.cn/a/395790.html

相关文章:

  • 31-Shard Allocation Awareness(机架感知)
  • 机器学习-35-提取时间序列信号的特征
  • 一文说清libc、glibc、glib的发展和关系
  • 华为机试HJ41 称砝码
  • 创建型设计模式与面向接口编程
  • 低代码牵手 AI 接口:开启智能化开发新征程
  • 如何构建高效的知识库系统?实现智能信息管理
  • i春秋-登陆(sql盲注爆字段,.git缓存利用)
  • 【Rust 编程语言工具】rustup-init.exe 安装与使用指南
  • 如何在 Ubuntu 上安装 Jupyter Notebook
  • 部署Apache Doris
  • C++11新特性:lambda表达式,包装器,新的类功能
  • 富格林:正确应付阻挠虚假交易
  • 如何用Java爬虫“采集”商品订单详情的编程旅程
  • C++中 ,new int(10),new int(),new int[10],new int[10]()
  • 除了网页标题,还能用爬虫抓取哪些信息?
  • 实时数据流的革命:分布式数据库的挑战与实践
  • 图像处理之cornerdetection(角点检测)综述
  • 从cityengine到unreal,游戏引擎助力城市设计
  • Linux服务器下连接kingbase并执行SQL的脚本
  • 关于指针对象的问题
  • 搜维尔科技:TOUCH力反馈设备睿尔曼机械臂,遥操作机械臂
  • 实现 Toy-React , 实现 JSX 渲染
  • 通过css的哪些方式可以实现隐藏页面上的元素?
  • spark的学习-05
  • Java中的集合类与线程安全的讨论