Node.js开发入门—语音合成示例
出于项目需要,搞了一个语音合成(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做一些小实验、小工具还是比较方便,它内置了很多模块,比如http、crypto(加密),简单好用。
需要注意的一点是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开发入门—语音合成示例相关推荐
- Node.js开发入门—使用jade模板引擎
在"Node.js开发入门--Express安装与使用"里,我们曾经使用express generator创建了一个HelloExpress网站,express工具为我们生成了基本 ...
- Node.js开发入门—Express安装与使用
之前我们在安装完Node.js后直接写了个HelloWorld网站,这次呢,我们使用Node.js的Web框架Express来重写一下HelloWorld,看看有什么不同.同时我们还会重写之前的文件服 ...
- Node.js开发入门(一)——安装Node.js及编辑器配置
Node.js是一个轻松构建快速,可扩展的网络应用平台建立在Chrome的JavaScript运行.Node.js使用事件驱动,非阻塞I/O模型,使得它重量轻,高效,完美的数据密集型实时应用程序运行在 ...
- Windows下Node.js开发入门(1)
没事儿捣腾了一下Node.js,跑了个Hello World,特此记录一下. Windows 下安装 Node.js 环境 到Node官网http://nodejs.org就可以下载到安装包,我是Wi ...
- Vue.js+Node.js开发实战:从入门到项目上线
<Vue.js+Node.js开发实战:从入门到项目上线>以JavaScript语言为基础,以一个完整的网站开发过程为主线,介绍了一整套面向Web项目的开发技术,如使用Node.js搭建服 ...
- 54 Node.js快速入门
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node开发概述 1.1 为什么要学习服务器端开发基础 能够与后端程序员更加紧密的配合 ...
- 《Node.js开发指南》书评汇总
刚查了下库存,发现订阅<Node.js开发指南>的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ------------------------- ...
- Koa与Node.js开发实战(1)——Koa安装搭建(视频演示)
2019独角兽企业重金招聘Python工程师标准>>> 学习架构: 由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者保证Node.js版本在7.6.0以上.如 ...
- 教你如何用node.js开发微信公众号(一)
内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...
最新文章
- redux源码分析之一:createStore.js
- mkfontscale没有这个命令_那些实用的小命令
- SAP标准导出功能 - 删除默认选定格式
- python获取当前网页元素_Python+Selenium练习(三十)- 获取页面元素的href属性
- react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)
- httpd 分页_更改 Apache httpd.conf 配置文件
- Linux管理员手册
- 洛谷——P2006 赵神牛的游戏
- Leetcode - Reverse Words
- 互联网金融业务中的风控
- 硬盘分区整数计算方法
- IPv6笔记-地址结构与分类
- Python数据分析案例篇(一)泰坦尼克号数据分析
- 55寸电视尺寸长宽高多少
- [当人工智能遇上安全] 3.安全领域中的机器学习及机器学习恶意请求识别案例分享
- 线性规划求极值问题-系统架构设计师-最“稳准狠”解题方法
- 计算机名称缩写大全集,求《魔兽世界》副本名称常用缩写大全?
- 新媒体时代的公关怎么做
- UG编程-适合新手的详细讲解
- UCK Network 为开发者提供全方位孵化,打造区块链爆款应用