最近ゆっくり動画にハマっているので、自分でも何かをしゃべらせてみたいと思ったのでやってみました。
よくslackを利用しているので、読み上げさせてみようかな
ゆっくりしていってね
## 環境
MacBook Pro OS X El Capitan 10.11.6
yukkuroid 0.6 ( http://www.yukkuroid.com/ )
参考サイト
ゆっくり作る
yukkuroid.dmgをダウンロードして、インストールし起動しておく。
nvmインストール
brew install nvm
yukkuroidとnode.jsのやりとりにNodObjCを使っているので、nodeのバージョンは0.x系が必要
ここではv0.12.18を使用している
nvm install v0.12.18
nvm use v0.12.18
ゆっくりのディレクトリを作る
mkdir yukkuri
cd yukkuri
npm init
NodObjCインストール
git clone git@github.com:TooTallNate/NodObjC.git
npm install ./NodObjC --save
git clone git@github.com:node-ffi/node-ffi.git
npm install ../src/node-ffi --save
botkitインストール
npm install botkit
yukkuri.jsを置く(参考サイトさんから頂きました)
var $ = require('NodObjC');
$.import('Foundation');
$.import('Cocoa');
var processName,
host,
proxy,
pool;
/**
* 初期化処理.
* ここで自動解放プールの作成と必要なNSStringの作成.
*/
exports.init = function() {
pool = $.NSAutoreleasePool('alloc')('init');
processName = $.NSString('stringWithUTF8String', 'com.yukkuroid.rpc');
host = $.NSString('stringWithUTF8String', '');
proxy = $.NSConnection('rootProxyForConnectionWithRegisteredName',processName,'host',host);
};
/**
* 終了処理.リソースを解放する.
*/
exports.release = function() {
pool('drain');
};
/**
* NSConnectionを取得する.
*/
exports.getProxy = function() {
return proxy;
};
/**
* 通常テキスト欄に値をセット.
*/
exports.setKanjiText = function(jsStr) {
var objCStr = $.NSString('stringWithUTF8String', jsStr);
proxy('setKanjiText',objCStr);
};
exports.getKanjiText = function() {
return proxy('getKanjiText');
};
/**
* 音声を再生する.
*/
exports.play = function() {
proxy('pushPlayButton',0);
};
app.jsを置く
//app.js
var yukkuri = require('./yukkuri');
const Botkit = require('botkit');
var word;
if (!process.env.token) {
console.log('Error: Specify token in environment');
process.exit(1);
}
const controller = Botkit.slackbot({
debug: false
});
controller.spawn({
token: process.env.token
}).startRTM(function(err){
if (err) {
throw new Error(err);
}
});
controller.hears(['(.*)'], 'ambient,message_received', function (bot, message) {
//初期化
yukkuri.init();
yukkuri.setKanjiText(message.match[1]);
var text = yukkuri.getKanjiText();
console.log("log:",text);
//再生
yukkuri.play();
//後処理
yukkuri.release();
});
app.jsを起動する。
token="xoxb-xxxxxxxxxxxxxx-xxxxxxxxxxxxxx" node ./app.js
動作
使っているtokenが参加しているチャネルで発言するとゆっくり読み上げてくれる。
今後やろうとしていたり、うまくできていないもの
・改行してると切れるのをなんとかエスケープさせたい(無理そうならスペースにでも置換しようかな)
・英語関連の読み上げが弱くてアルファベットを読み上げるので、mecab+発音記号変換+カタカナ変換を試そうとしている。
・たまに変な読み方をするので、辞書と連携させてみる
・自分のslack tokenを使うと既読になってしまうのを未読のままにする
・マイ辞書的な変換ができるようにさせたい