出于项目需要,搞了一个语音合成(TTS)的小示例,使用的是OKVoice

我想在PC上测试,OKVoice的快速接入API可以实现我的目的,文档在这里:http://dev.okvoice.com/file.php。

直接上代码吧,okVoiceTts.js,内容如下:

var http = require('http');
var fs  =require('fs');
var crypto = require('crypto');
var util = require('util');var apiSecretKey = '1a3c1500ab253b636100c053e1ebea87';var options = {apiKey: '2594280bed1522810d28a717f57c64db',expires: 0,format: 'MP3',speed: 1,text: '张三丰是武当派的开山祖师,知名的弟子有宋远桥等。',voice: 'cnfemale'
};var curDate = new Date();
options.expires = Date.UTC(curDate.getFullYear(), curDate.getMonth(), curDate.getDate(), curDate.getHours(), curDate.getMinutes(), curDate.getSeconds())/1000 + 100;var query = util.format('apiKey=%s&expires=%d&format=%s&speed=%d&text=%s&voice=%s', options.apiKey, options.expires, options.format, options.speed, options.text, options.voice);console.log('query - %s\n', query);var hmac = crypto.createHmac('sha1', apiSecretKey);
var data = new Buffer(query, 'utf8');
hmac.update(data);
var signatureResult = hmac.digest('hex');console.log('signatureResult - %s', signatureResult);var url = "http://api.okvoice.com/tts?" + query + "&signature=" + signatureResult;
console.log('url - \n%s', url);
var encodedUri = encodeURI(url);
console.log('encodedUri - \n%s', encodedUri);
var req = http.get(encodedUri);function handleError(e){console.log(e);
}function handleResponse(res){console.log('statusCode - ', res.statusCode);console.log('contentLength - ', res.headers['content-length']);if(res.statusCode == 200){var savedAudio = fs.createWriteStream('okVoice_en_cn.mp3');savedAudio.on('finish', function(){console.log('savedAudio finished.');process.exit(0);})res.pipe(savedAudio);}else if(res.statusCode == 301 || res.statusCode == 302){console.log('redirect to -\n%s', res.headers['location']);req = http.get(res.headers['location']);req.on('error', handleError);req.on('response', handleResponse);}else{console.log('statusCode - %d', res.statusCode);process.exit(1);}
}req.on('error', handleError);
req.on('response', handleResponse);

用Node.js做一些小实验、小工具还是比较方便,它内置了很多模块,比如httpcrypto(加密),简单好用。

需要注意的一点是OKVoice的API,在使用hmac生成signature时传入的数据,是UTF8数据。文本长度(这里是调用encodeURI之后query string里text的长度)不能大于256。

另外我在测试时,输入中文文本,选择英文声音,会失败,也就是说,英文声音只能读取纯英文……中英文混合的,就得选择中文声音。

Node.js开发入门——使用http访问外部世界不同,我们这次的处理,使用Readable流的pipe方法,把Readable留直接连到了Writable流上,简单多了。

这个小示例使用http模块时,我还处理了301、302等重定向消息,以便能下载到实际的内容。Node.js开发入门——使用http访问外部世界则没考虑这一点。


其它文章:

  • Node.js开发入门——UDP编程
  • Node.js开发入门——使用http访问外部世界
  • Node.js开发入门——套接字(socket)编程
  • Node.js开发入门——notepad++ for Node.js
  • Node.js开发入门——使用对话框ngDialog
  • Node.js开发入门——引入UIBootstrap
  • Node.js开发入门——用MongoDB改造LoginDemo
  • Node.js开发入门——MongoDB与Mongoose
  • Node.js开发入门——使用cookie保持登录
  • Node.js开发入门——使用AngularJS内置服务
  • Node.js开发入门——Angular简单示例
  • Node.js开发入门——使用AngularJS
  • Node.js开发入门——使用jade模板引擎
  • Node.js开发入门——Express里的路由和中间件
  • Node.js开发入门——Express安装与使用
  • Node.js开发入门——HTTP文件服务器
  • Node.js开发入门——HelloWorld再分析
  • Node.js开发入门——环境搭建与HelloWorld

Node.js开发入门—语音合成示例相关推荐

  1. Node.js开发入门—使用jade模板引擎

    在"Node.js开发入门--Express安装与使用"里,我们曾经使用express generator创建了一个HelloExpress网站,express工具为我们生成了基本 ...

  2. Node.js开发入门—Express安装与使用

    之前我们在安装完Node.js后直接写了个HelloWorld网站,这次呢,我们使用Node.js的Web框架Express来重写一下HelloWorld,看看有什么不同.同时我们还会重写之前的文件服 ...

  3. Node.js开发入门(一)——安装Node.js及编辑器配置

    Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScript运行.Node.js使用事件驱动,非阻塞I/O模型,使得它重量轻,高效,完美的数据密集型实时应用程序运行在 ...

  4. Windows下Node.js开发入门(1)

    没事儿捣腾了一下Node.js,跑了个Hello World,特此记录一下. Windows 下安装 Node.js 环境 到Node官网http://nodejs.org就可以下载到安装包,我是Wi ...

  5. Vue.js+Node.js开发实战:从入门到项目上线

    <Vue.js+Node.js开发实战:从入门到项目上线>以JavaScript语言为基础,以一个完整的网站开发过程为主线,介绍了一整套面向Web项目的开发技术,如使用Node.js搭建服 ...

  6. 54 Node.js快速入门

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node开发概述 1.1 为什么要学习服务器端开发基础 能够与后端程序员更加紧密的配合 ...

  7. 《Node.js开发指南》书评汇总

    刚查了下库存,发现订阅<Node.js开发指南>的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ------------------------- ...

  8. Koa与Node.js开发实战(1)——Koa安装搭建(视频演示)

    2019独角兽企业重金招聘Python工程师标准>>> 学习架构: 由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者保证Node.js版本在7.6.0以上.如 ...

  9. 教你如何用node.js开发微信公众号(一)

    内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...

最新文章

  1. redux源码分析之一:createStore.js
  2. mkfontscale没有这个命令_那些实用的小命令
  3. SAP标准导出功能 - 删除默认选定格式
  4. python获取当前网页元素_Python+Selenium练习(三十)- 获取页面元素的href属性
  5. react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)
  6. httpd 分页_更改 Apache httpd.conf 配置文件
  7. Linux管理员手册
  8. 洛谷——P2006 赵神牛的游戏
  9. Leetcode - Reverse Words
  10. 互联网金融业务中的风控
  11. 硬盘分区整数计算方法
  12. IPv6笔记-地址结构与分类
  13. Python数据分析案例篇(一)泰坦尼克号数据分析
  14. 55寸电视尺寸长宽高多少
  15. [当人工智能遇上安全] 3.安全领域中的机器学习及机器学习恶意请求识别案例分享
  16. 线性规划求极值问题-系统架构设计师-最“稳准狠”解题方法
  17. 计算机名称缩写大全集,求《魔兽世界》副本名称常用缩写大全?
  18. 新媒体时代的公关怎么做
  19. UG编程-适合新手的详细讲解
  20. UCK Network 为开发者提供全方位孵化,打造区块链爆款应用

热门文章

  1. 同时坐拥谷歌和苹果!陆家嘴,第五大科技园?
  2. IDEA导入NetBeans项目
  3. android socket gprs 与 wifi 网络切换,Android应用开发Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址...
  4. 网络安全人员需要考的几本证书(含金量高),建议收藏
  5. js开发的麻将对对碰游戏
  6. Responder使用方法
  7. java 打开记事本
  8. Blake2b算法 php,BLAKE及BLAKE2算法详解
  9. PCB布局布线(4)——PCB过孔设计
  10. 磁存储芯片STT-MRAM的特点