さて、今回は超小型コンピューターRaspberry Piをしゃべらせてみます。基本操作が少し分かってきたのでちょっとだけプログラミングもしてみました。

Node.js

Node.js

「サーバーサイドで利用出来るJavaScript」というモノがある。ということは知っていたのですが、通常のレンタルサーバーでは利用出来なかったりして取っ付きにくい印象を持っていました。

公式ページにはこんな風に書かれています。

Node.js®は、 ChromeのV8 JavaScriptエンジン上に構築されたJavaScriptのプラットフォームです。 Node.jsは軽量で効率的にイベントを駆動させるノンブロッキングI / Oモデルを使用しています。 Node.jsのパッケージのエコシステム “NPM” は世界で最大級のオープンソースのライブラリです。

うーん。かえって分からん。ただ、Raspberry PiをこのNode.jsを利用して動作させている記事を見て以前より気になっていました。

習うより慣れろ。まずはこのNode.jsを利用してRaspberry Piをしゃべらせてみることにします。

NPM

npm

公式ページにはこのように書かれています。

NPMはJavaScriptのためのパッケージマネージャです。

現在の総パッケージ数は239,710とあります。どうもこのパッケージを利用することで多くの機能を追加・実行する事が出来るということの様です。

こちらの記事(フロントエンド開発の3ステップ(npmことはじめ) - Qiita)を拝見したところ、

ライブラリ入れ放題、中毒者続出の npm install(中略)
登録されているパッケージをフル活用すれば、できないことはほとんどないでしょう。

こんな風に表現されています。なるほど。様々なパッケージを利用することで高度な機能も実現出来るな気がしてきました。

試してみた

Node.jsのインストールはこんな感じでやってみました。(Raspberry Piに最新版Node.jsをダウンロード - Qiita )その後パッケージを2つ利用してPaspberry Piをしゃべらせてみようという算段です。

voicetext - npm

voicetext - npm

こちらの記事 ( VoiceText Web APIのNode.jsライブラリ作った - ぽっちぽちにしてやんよ)を拝見してから、Raspberry Piを購入したら真っ先に利用してみようと思っていました。

HOYA社の合成音声ライブラリVoice Text Web API をNode.jsから実行可能にしてくれるライブラリです。

実行に関してはこちらの記事( VoiceTextを使ってsayコマンドよりいい感じに文章を読み上げる - Labo Memo )でサンプルを公開してくれていましたので参考にさせていただきました。

1
$ npm install voicetext

でパッケージをインストール。サンプルのJavaScriptファイルvoicetext_test.js をパッケージとと同じ階層に設置します。(上記Labo Memoさんのコードを転記させていただきます)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fs = require('fs');
VoiceText = require('voicetext');
voice = new VoiceText('your api key');
voice
.speaker(voice.SPEAKER.HIKARI)
.emotion(voice.EMOTION.HAPPINESS)
.emotion_level(voice.EMOTION_LEVEL.HIGH)
.volume(200)
.speak('きょうもいちにちがんばるぞい', function(e, buf){
if(e){
console.error(e);
return;
}
fs.writeFile('./test.wav', buf, 'binary', function(e){
if(e){
console.error(e);
return;
}
});
});

JavaScriptファイルを実行。

1
$ node voicetext_test.js

することでHOYAさまの合成ライブラリを通じて作成されたwavファイルをダウンロードすることが出来ます。

node-aplay - npm

node-aplay - npm

ブラウザを利用すればaudio タグを利用して簡単にwavファイルを再生することが出来ますが、Paspberry Piの様なハードから直接再生させようとするとなかなか大変な実装が必要となります。

linuxのパッケージソフト「ALSA」を利用すれば、コマンドラインでaplay というコマンドを利用して音源ファイルを再生することが出来るのですが…。これをJavaScriptで操作する方法はないか一思案。

検索で探してみたら、ありました。LinuxコマンドaplayをJavaScriptで実行可能にしてくれるライブラリがこのnode-aplay です。

1
$ npm install node-aplay

でインストール。(「ALSA」の実行環境は事前に整えておきます)実行用のJavaScript(node-aplay_test.js)を作成します。

1
2
var Sound = require('node-aplay');
new Sound('/path/to/the/file/filename.wav').play();

JavaScriptファイルを実行。

1
$ node node-aplay_test.js

これで指定したwavファイルが再生されます。

やってみた

上記の2つのパッケージをインストールして、実行用のJavaScriptファイルをまとめてvoice.js としました。こんな感じです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//voicetextを呼び出します
fs = require('fs');
VoiceText = require('voicetext');
voice = new VoiceText('your api key');
voice
.speaker(voice.SPEAKER.HARUKA)
.emotion(voice.EMOTION.HAPPINESS)
.emotion_level(voice.EMOTION_LEVEL.HIGH)
.volume(200)
.speak('こんにちは!私はラズベリー・パイって言います。今日も一日がんばるぞ!', function(e, buf){
if(e){
console.error(e);
return;
}
fs.writeFile('./voice.wav', buf, 'binary', function(e){
if(e){
console.error(e);
return;
}
});
});
//node-aplayを呼び出します
Sound = require('node-aplay');
new Sound('voice.wav').play();

ファイルの階層はこんな感じになります。

voice と名付けたディレクトリに2つのパッケージをインストールしました。自動的にnode_modules ファイルで振り分けられたのが分かると思います。

1
$ node voice.js

で実行します。

可愛らしい声でしゃべりました。

まとめ

ひとまずRaspberry Piも喋れるようになりました。

少しづつ機能を追加していきたいなと思います。ではまた。