LoginSignup
4
2

More than 5 years have passed since last update.

node.js+botkit+yukkuroidでslackのメッセージをゆっくり読み上げさせてみた

Last updated at Posted at 2017-06-12

最近ゆっくり動画にハマっているので、自分でも何かをしゃべらせてみたいと思ったのでやってみました。
よく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を使うと既読になってしまうのを未読のままにする
・マイ辞書的な変換ができるようにさせたい

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2