Raspberry Piにツイッターのタイムラインを音声合成でしゃべらせる


以前から、ラズベリーパイとツイッターAPIとの連携に関して勉強しておりまして、試行錯誤の末、ラズパイからツイッターのタイムラインに投稿したり、タイムラインの投稿を監視して、ラズパイを制御すると言った事も出来るようになりました。

そこで、最近思いついたのが、ツイッターのタイムラインをラズパイがしゃべってくれたら、少し便利になるのではと思い、ラズパイにしゃべらせる方法、音声合成に関する事を調べました。

ラズベリーパイ用音声合成ソフト

ラズベリーパイでしゃべらせる(音声合成)をさせるためのソフトで、代表的なものは、「AquesTalk」と「OpenJTalk」と言う物があるみたいです。

「OpenJTalk」はフリーソフトで、「AquesTalk」は、個人利用はフリーで、商用利用は有料(ライセンス購入)が必要との事です。

OpenJTalk

さて、その設定方法ですが、下記のブログ様がとても丁寧に紹介していましたので、その通りにやったら、簡単に出来てしまいました。感謝です。

Raspberry Piにしゃべらせてみた(OpenJTalk 1.08、.htsvoiceファイル対応)

感想としては、フリーソフトにしては、しっかりしゃべってくれたと思います。

ネックなのは、英単語に対応していない事です。(対応する方法があるかもしれませんが、私は知りません。)

例えば、「Facebook」としゃべらせようとしても、「えふえーしーいーびーおーおーけー」としかしゃべってくれません。

AquesTalk

また、「AquesTalk」に関しても、どれくらいの精度か試してみたかったので、下記のブログ様を参考に試してみました。

Raspberry Pi 2を喋らせる

「AquesTalk」の良い所は、まず、多くの英単語も対応している所です。

例えば「Facebook」「twitter」と文言をしゃべらせると、「フェイスブック」「ツイッター」としゃべってくれます。

また、これは好みかもしれませんが「OpenJTalk」もゆっくりしゃべってくれます。もしかしたら、設定出などで、スピードなども調整できるかもしれませんが。

ツイッターのタイムラインをしゃべらせる

音声合成の方法は、参考のブログ様の通りに設定したら、意外と簡単に出来ました。

ただ、ツイッターと連携させる方法は、一筋縄ではいきません。正直難しかったです。

有料でも手軽に体験したい方は、「ラズパイがツイッターのタイムラインをしゃべっておしらせ」を購入すると、簡単に実現できます。

まず、ツイッターと連携させるには、下記の手順に則って、ツイッターAppsのKEYやアクセスTOKENを取得する必要があります。

Twitterアカウントの登録

まず最初に、下記URLをクリックして、ツイッターアカウントの登録をします。(既にツイッターアカウントをお持ちの方はとばして下さい。)

https://twitter.com/

アカウントの登録方法の詳細は、割愛します。

Twitter Appsの作成

twitterにログインした状態で、下記のURLをクリックします。

https://apps.twitter.com/

1.「Create New App」をクリック

twitterapps

2.必要な項目を入力

twitterapps1

3.「同意」にチェックを入れて、「Create your Twitter application」をクリック

twitterapps2

4.「Keys and Access Tokens」タブをクリック

twitterapps3

5.「Create my access token」をクリック

twitterapps4

6.下記のKeyやTokenを控えておきます。

twitterapps5

ラズベリー側の設定

ここから、ラズベリー側の設定作業に入りますが、かなり専門的な知識を要する為、ある程度理解がある方を対象とした、説明を致します。

また、今回の実装方法は、私が多少使える言語、「PHP」を使った方法になります。

1.「twitteroauth」ライブラリを取得

まず、ラズベリーパイとツイッターの連携に欠かせないライブラリ「twitteroauth」を「git」から取得します。

https://github.com/abraham/twitteroauth

上記のフォルダをダウンロードしたら、解凍後、フォルダ名を「twitteroauth-master」⇒「twitteroauth」にリネームします。

リネームした「twitteroauth」フォルダを、FTPソフトなどを使って、ラズパイの任意のディレクトリにアップロードします。

2.「PHP」でプログラムを組む

まず最初に、プログラムを組む上で参考にさせていただいたブログ様をご紹介します。

[PHP] ライブラリに頼らないTwitterAPI入門

【php】twitter Streaming API の statuses/filter を試す

誰でも作れる「つぶやきbot」や「ダイレクトメッセージ送信機」 PHPでTwitterを操作する方法

上記のブログ様の情報を参考にプログラムを作成します。

//oauthライブラリの読み込み
require ‘/twitteroauth/autoload.php’;
use PhpGpio\Gpio;

ini_set(‘display_errors’, 1);
error_reporting(E_ALL);

//twitter key情報の設定
$consumerKey = “consumerKey(api key)”;
$consumerSecret = “consumerSecret(api secret)”;
$accessToken = “accessToken”;
$accessTokenSecret = “accessTokenSecret”;

$url = ‘https://userstream.twitter.com/1.1/user.json’;
$method = ‘GET’;

$oauth_param = array(
‘oauth_consumer_key’ => $consumerKey
, ‘oauth_nonce’ => md5(mt_rand())
, ‘oauth_signature_method’ => ‘HMAC-SHA1’
, ‘oauth_timestamp’ => time()
, ‘oauth_token’ => $accessToken
, ‘oauth_version’ => ‘1.0’
);

$base = $oauth_param;

uksort($base,’strnatcmp’);

$base = implode(
‘&’
, array_map(
 ‘rawurlencode’
  , array(
   $method
   , $url
   , http_build_query($base, ”, ‘&’, PHP_QUERY_RFC3986)
  )
 )
);

$key = implode(
 ‘&’
 , array_map(
  ‘rawurlencode’
  , array(
   $consumerSecret
   , $accessTokenSecret
  )
 )
);

$oauth_param[‘oauth_signature’] = base64_encode( hash_hmac(‘sha1’, $base, $key, true) );

$header = ‘Authorization: OAuth ‘ . http_build_query($oauth_param, ”, ‘,’, PHP_QUERY_RFC3986);

$callback = function($ch,$str){

static $data = ”;

$data .= $str;

if(strpos($data, “\r\n”) !== false){

$obj = json_decode($data, true);
if (is_array($obj) && isset($obj[‘user’][‘screen_name’])) {

 $text = urldecode($obj[‘text’]);
 if($text){
  $command = “jsay ” . $text;
  exec ( $command, $data_array, $ret );//タイムラインの言葉をしゃべらせる
 }
 // バッファを空にする
 $data = ”;
}

return strlen($str);
};

$ch = curl_init();

curl_setopt_array(
$ch
, array(
CURLOPT_URL => $url
, CURLOPT_SSL_VERIFYPEER => false
, CURLOPT_HTTPHEADER => array($header)
, CURLOPT_ENCODING => ‘gzip’
, CURLOPT_TIMEOUT => 0
, CURLOPT_WRITEFUNCTION => $callback
)
);

curl_exec($ch);

後は、このPHPを実行させた状態で、ツイッターで何かつぶやいてみます。

無事、ラズパイに繋がれたスピーカーから音声が出力されたら成功です。

ラズパイがツイートをしゃべる様子

私的には、かなり難易度の高い実施方法だと思いますが、興味のある方は、是非挑戦してみてください。

有料でも手軽に体験したい方は、「ラズパイがツイッターのタイムラインをしゃべっておしらせ」を購入すると、簡単に実現できます。