[Node.js]node.jsからゆっくりボイスをしゃべらせる[ネタ]
node.jsからゆっくりボイスをしゃべらせる
ゆっくりボイスといえば、ニコニコとかでよく聞くあれです。
Windowsの場合、softalkを使えば再生したりファイルに保存したりできます。
Macでゆっくりボイスを使いたい場合、Yukkuroidというアプリがあります。
これはMacでゆっくりボイスをしゃべらせるためのアプリなのですが、外部からアクセスするためのAPIも公開しています。
今回はこのアプリのAPIに、以前紹介したNodObjCを使用して、
アクセスしてみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。 ●OS : MacOS X 10.7.4 ●Node.js : v0.8.1 ●Yukkuroid : v0.4.1 適当なディレクトリを作成し、そこでnpmを使用してNodObjCをインストールします。% mkdir yukkuri % cd yukkuri % npm install NodObjCまた、Node.jsからアクセスする際、Yukkuroidが起動している必要があるので、ここからダウンロード、 インストールし、起動しておいてください。
ゆっくりAPIにアクセスするモジュールを作成
yukkuri.jsという名前で、ゆっくりAPIにアクセスするためのモジュールを作成します。 やっていることは単純で、Objective-Cのプロセス間通信を使用して、公開されているAPIにアクセスしているだけです。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); };今回は初期化とか再生とか、いくつかのAPIしか使ってません。実際は、しゃべる速度とか音量とか、いろいろできます。
ゆっくりモジュールを使う
ではyukkuri.jsを使ってみましょう。app.jsという名前でファイルを作成します。 yukkuri.jsをrequireし、コマンドライン引数からしゃべらせたい文字を取得、再生しましょう。 //app.js var yukkuri = require('./yukkuri'); var word; if (process.argv.length <‖ 2) { console.log("引数にしゃべらせたい文字を指定してください"); process.exit(0); } //初期化 yukkuri.init(); //引数から文字を取得してセット yukkuri.setKanjiText(process.argv[2]); var text = yukkuri.getKanjiText(); console.log("しゃべる文字:",text); //再生 yukkuri.play(); //後処理 yukkuri.release(); [/javascript]実行!
コンソールから実行してみましょう。 ゆっくりボイスでしゃべります。 ※Yukkuroidは起動しておいてください% node app.js ゆっくりしていってね