Node.js開發入門—語音合成樣本

來源:互聯網
上載者:User

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', 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 - %s', url);var encodedUri = encodeURI(url);console.log('encodedUri - %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 -%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訪問外部世界則沒考慮這一點。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.