テストが通ったらニャーと鳴く
そんなmochaのレポーターを作ってみた。要するに保存するたびにテストしてニャーニャー言う。
node.jsから音声ファイルを再生する。
play.jsを使えればよかったのだけど、手元の環境では動かなかった。 仕方ないのでコマンドラインからなんとか再生できないか調べてたら、powershellからならいける様子。
というわけで書いてみた。
var exec = require('child_process').exec, script; // Use COM objects to get filesystem information script = '$c = New-Object Media.SoundPlayer(\'ファイル名\');$c.PlaySync()'; exec('powershell.exe -Command "' + script + '"', function(err, stdout, stderr) { console.log(stdout); }).stdin.end();
でいけた。windows vista以降であれば、たぶんこれでできる。
参考
- play.js
https://github.com/Marak/play.js/ - コマンドラインで .wav ファイルを再生する
http://kayuitoko.blog129.fc2.com/blog-entry-37.html - Windows and Node: PowerShell
http://dailyjs.com/2012/06/21/windows-and-node-6/
reporter書く
nyancatのreporterを参考にしながら、jsで書いていく。 成功時にnyaaa.waveを再生し、失敗したらnyeee.waveを再生する。
nyaaa.js
var exec = require('child_process').exec; exports = module.exports = Nyaaa; function Nyaaa(runner) { runner.on('pass', function(test){ console.log('pass'); play('nyaaa.wav'); }); runner.on('fail', function(test, err){ console.log('fail'); play('nyeee.wav'); }); runner.on('end', function(){ console.log('end'); }); } function play( filename ){ var script = '$c = New-Object Media.SoundPlayer(\''+__dirname +'/sounds/'+filename+'\');$c.PlaySync()'; var command = 'powershell.exe -Command "' + script + '"\n'; exec(command, function(err, stdout, stderr) { console.log(err); }) .stdin.end(); }
参考
- mocha
https://github.com/visionmedia/mocha - Third party reporters
https://github.com/visionmedia/mocha/wiki/Third-party-reporters
にゃーをつくる
猫の鳴き声の音声ファイルを作る。 手元に猫がおらず、また野良猫は目を合わせると大体逃げられるのでCeVIOさんに代わってもらった。 CeVIO(チェビオ)は文章を読み上げてくれてwavファイルで出力できる。元気いっぱいや悲しいといった感情を指定できる。
こんな感じのGUI
にゃーとそのまま入力すると求めてるものと、なんか違うなーという気分になる。読み上げ用のソフトだから、あまり猫っぽくはない。 にゃあああもにゃゃぁもなど試してみたが、結局「にゃあー」にして話すスピードを下げるのに落ち着いた。 成功時は元気いっぱいにし、失敗したときは悲しげにしてみた。
参考
- cevio
http://cevio.jp/
ファイル配置
node.jsのモジュールがインストールされている場所を調べる。
>npm -g bin C:\Users\ユーザ名\AppData\Roaming\npm (not in PATH env variable)
/npm/node_modules/mocha/libs/reporters/ ... nyaa.js ... /sounds nyaaa.wav nyeee.wav
ファイルをこんな構成で配置。reportersの中に作ったファイルを入れてやれば動く。 だけれどwavパス指定などにつまづいて、ここら辺調べるのに結構手間取った。
実行
mohca --reporter nyaa --watch ファイル名
これでファイルを更新するたびにニャーニャー鳴いてくれる。
やってみると、起動時からにゃーとなくまで2,3秒あるがちゃんと再生される。 テストが2,3個の時は、ほぼ同時に再生されるので合唱したように聞こえて、失敗が混じっていると不協和音になるので気づく。 10~ぐらいになってくると、再生されるタイミングがずれてくるのでにゃーにゃーいうようになる。
nyancatのレポーターってどうかかれてるんだろうという好奇心と、cevioいじって楽しかったのが混ざった結果こうなった。 mochaに自作のreporter追加してnpmに登録なんてこともできるようなので、もうちょっとちゃんと書き直したらやってみるかもしれない。