There’s something about Node.js
前回はApplication Serverを作ったのだが
気がつくと不定期に落ちているときがある。
そこで、プロセスが落ちてたら起動する方法が
必要だと思って自前でcron+shell scriptで用意したのだが
調べたらforeverというモジュールを使えば
簡単にできるらしかったのだが、まいいか。
shell scriptはまぁここでは趣旨から脱線するので
公開はしない。
Let 2s say something through the VoiceText
さて、Application Serverができたので
Google Homeから任意の声で喋らせてみたい。
先のvoicetextをもっと使いやすい形にする。
var fs = require('fs'); var VoiceText = require('voicetext'); var voice = new VoiceText('XXXXXXXXXXXX'); var OUT_PATH = __dirname+'/_temp.wav' var OUTPUT_URL = 'http://%GOOGLEHOME%:8080/googlehome/get/_temp.wav';
class VoiceTextOut { textToURL(text){ if(!text)return false; return new Promise(function(resolve,reject){ voice .speaker(voice.SPEAKER.HIKARI) .emotion(voice.EMOTION.HAPPINESS) .emotion_level(voice.EMOTION_LEVEL.HIGH) .volume(150) .speak(text, function(e, buf){ if(e){ console.error(e); reject(e); }else{ fs.writeFileSync(OUT_PATH, buf, 'binary'); resolve(OUTPUT_URL); } }); }); } } module.exports = VoiceTextOut;
|
テキストを渡されてwaveファイルに保存して呼び出し元にURLを返すってやつ。
VoiceTextOutなんてクラスにしてみる。
で、このクラスをgoogle-home-notifier.js内のgetSpeechUrl()メソッドで
使ってみる。
実際にはこんな風になっている。
var getSpeechUrl = function(text, host, callback) { googletts(text, language, 1).then(function (url) { onDeviceUp(host, url, function(res){ callback(res) }); }).catch(function (err) { console.error(err.stack); }); };
|
ここをこんな感じに変更。
8 const VoiceTextOut = require('./../../VoiceTextOut'); 9 const vt = new VoiceTextOut(); . . . . 72 var getSpeechUrl = function(text, host, callback) { 73 vt.textToURL(text).then(function(result, reject){ 74 onDeviceUp(host, result, function(res){ 75 callback(res) 76 }); 77 }).catch(function onRejected(error){ 78 console.error(error); 79 }); 80 };
|
これで準備ができたかな。
さっそく喋らせてみる。
前に作ったこいつを使ってみる。
const googleSpeaker=require('./GoogleSpeaker'); gs=new googleSpeaker(); gs.meow('子どもがまだ食ってる途中でしょうが!');
|

よし、大丈夫そうだ。
Next
次は、スケジュールどおりに何かを喋らせてみよう。
何かをトリガーにして喋らせるってところの
基本的なプログラムを作る。
コメント: