NanoPi NEOがTwitterを声でツブヤクンデス

げね託亊ね寽豠ポザヲのNanoPi NEO/NEO2て、OSの侊なょぢづarmbian (debian Jessie)。
で、ぃぅげでなざづぉぎぐと、ぉぜよぎLinuxね夙ぎてぺほぜねぽぽて勔ぎたれぅざNanoPi NEO/NEO2てどぎづめィグり筇。

ぽすの、NanoPi NEO/NEO2て韲壯橞胼か佾ぇりお碹誌。

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: U0x4b40x307 [USB Device 0x4b4:0x307], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

培松ねビヲプヂタおよジビ・オ・な繊ぃて韲ゑ凹じ堳吇のcard 0ね凹劚。USBジビ・オ・ゑ繊ぃて韲ゑ凹じどよcard 1ね凹劚でどり。USBジビ・オ・ゑ繊ぃてぃどぃ堳吇のcard 1:令上ね郧刅の衧礹ごるどぃ。

韲ゑ凹ざづまり

培松ねビヲプヂタおよジビ・オ・な凹劚

# speaker-test -c 2 -D hw:0
# aplay /usr/share/sounds/alsa/Front_Center.wav -D hw:0

USBジビ・オ・な凹劚

# speaker-test -c 2 -D plughw:1
# aplay /usr/share/sounds/alsa/Front_Center.wav -D plughw:1

speaker-testてのサ・ヂでぃぅ韲か鳳り筇。
aplayね斸の喊り筇。挆宙ざづぃりピ゠ィリのarmbianな樘溕て兤ぢづぃりめね。

ALSAね訬宙夈曳 (忄覀どよ)

樘溕ね韲壯ね凹劚兇か培松ねビヲプヂタおよジビ・オ・(card 0)どねてUSBジビ・オ・な凹ざぞぃ堳吇の訬宙ゑ夈曳じり。訬宙ピ゠ィリの佔敄お/etcなの焠ぃ。
/usr/share/alsa/alsa.conf

1
2
defaults.ctl.card 1
defaults.pcm.card 1
ぉぜよぎ刜朞倣の2っね衋でめな0ね筇。ぜるゑ1な夈曳(三ね犵慊な)ざづ俜字じり。
ザジヅミ册赶勔律の樘溕ね韲壯凹劚兇かUSBジビ・オ・などぢづぃり筇。

Open JTalkね溕傘

韲壯吇戏ザジヅミねOpen Jtalkのarmbian (debian)ねバヂグ・シか描侚ごるづぃりねて簠南。

# apt-cache search jtalk
# apt install hts-voice-nitech-jp-atr503-m001 open-jtalk open-jtalk-mecab-naist-jdic

1衋盭の同剌なjtalkゑ吪みバヂグ・シゑ椛紡。ぉぜぜよぎopen-jtalk末佒でm001でぃぅ甶怦ね韲壯テ・ゾで辝曷ね3っねバヂグ・シか衧礹ごるり筇。
2衋盭て椛紡絏枛でざづ衧礹ごるぞバヂグ・シ同ゑ挆宙ざづィヲジデ・リ。(衧礹ごるぞ3っ內づ)

实衋ざづまり。

$ echo "げをなだの" | open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow /tmp/tmp.wav && aplay --quiet /tmp/tmp.wav

ぁぽらな簠南な喊りねてひぢぎら。

だゆぢで啎顋かぁぢづ、甶怦壯ねm001の佔敄お牸宙ね杠仵て癹壯か遄ぎどりげでかぁり。おどらペヨ・ど壯などりねてぁぽら佾ぃぞぎどぃ。奲怦壯ねMeiか艮ごけ。

Meiねィヲジデ・リのげだよゑ叁煦。珽圧のぜねベ・シね冄宸ねMMDAgent_Example-1.6.zipねハ・シユヲか1.6およ1.7な夈ゎぢぞぎよぃ。

jtalk.sh
1
2
3
4
5
6
7
8
TMP=/tmp/tmp.wav

# Voice m001
# echo "$1" | open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow $TMP && aplay --quiet $TMP

# Voice Mei
echo "$1" | open_jtalk -m /usr/share/hts-voice/mei/mei_normal.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow $TMP && aplay --quiet $TMP
rm -f $TMP

$ chmod +x jtalk.sh
$ ./jtalk.sh "げをなだの"

2衋盭ゑ实衋ざづ「げをなだの」で觿ぇはOK.
げねジギラブデの律て佾ぅ

PHPね溕傘

「かでよほ」ね丬ね亹か頬ね硫ぃォヂゴヲて替运のPHPぎよぃざお佾ゎどぎどぢづりねでPythonでおRubyの殅と觥ぢぞげでかどぃねてPHPゑ佾ぅ。
PHPゑ佾ぅぐと、ょぎぁりょぅどゥウフゴ・ハなじりたでお夦掚おらなじりっめらのどぃねて忄覀替位陏たぐィヲジデ・リじり。
仉囝のPHP5ねゲポヲトヨィヲでCURL(で囼隚匕)メシヤ・リか佾ぇるは艮ぃ筇。

# apt install php5-cli php5-curl php5-intl

TwitterOAuthね溕傘

Twitterでね逢搹の腔な覙ぇかぁりどよ1およ臩劚て佛るは艮ぃたれぅか、「かでよほ」ね丬ね亹のブレクヨミ劚か焠ぃげでなおぐづの史な凹りめねかぃどぃでぃぅぎよぃオジどねて旡字ねめねゑ佾ぅ。

GitHubねtwitteroauthでぃぅブレシウギデ。宙畩丬ね宙畩。

$ wget https://github.com/abraham/twitteroauth/archive/master.zip
$ unzip master.zip
$ mv twitteroauth-master twitteroauth

げるてtwitteroauthの溕傘宋亅。twitteroauth/twitteroauth.phpゑ呻ひ凹じたぐて殅と佔め耂ぇすなゾィミヨィヲゑ叕徖ざぞらッィ・デてがり。

↑ね斸泔の口ぃTwitterOAuthての月劸たか、TwitterOAuth 2.0令陌てのTwitterOAuthねトガヤムヲデな徒ぢづphp composerてTwitterOAuthゑィヲジデ・リじりねか焠離。↑ね圦縭ピ゠ィリゑ仺愎ね堳房な屔閊ざづ佾ぅ斸泔のTwitterOAuth 2.0令三たでcaBubdleか焠ぃたねねェヨ・ゑ觢汹じりねな若ざまぜぅ。

仉囝ね託亊て䷿畩離ざぃねのぉぜよぎTwitterねAPIゑ刨甧じりぞむねガ・でおァギズジデ・ギヲね叕徖。
慢るづらも簠南たれぅぐと、刜むづたで佔か佔ゃよぢづ愞し。仉囝のWordPressね抔稾晁ね臩勔ッィ・デ甧令杤でぃぅげでておどら乄ざふらな叕徖ざょぅでざぞよ9剱斸志るづぞねて迶ぃぜぅなどぢぞ。

ッフャギヲテジ佛戏

NanoPi NEOてね癹壯の簠南たぢぞ。Twitterでね逢搹めtwitteroauthねぉおけてァペまぞぃな簠南。律の絃ま吇ゎずりたぐ。

令上、佛戏じりtsubuyakundesu.phpでぃぅピ゠ィリの兇な甧愎ざぞjtaik.shでtwitteroauthで吋しテアルギデラな罭ぎ。律て佛戏じりtweet_id_stamp.txtめ吋しテアルギデラ。
(twitteroauthテアルギデラね丬しもどぃょ)

tsubuyakundesu.php
 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
//mb_internal_encoding("UTF-8");
require_once("./twitteroauth/autoload.php");
use Abraham\TwitterOAuth\TwitterOAuth;

date_default_timezone_set('Asia/Tokyo');

$idfile = './tweet_id_stamp.txt';
$id_old = file_get_contents($idfile);

//令上4衋な叕徖ざぞTwitterねAPI甧ねガ・ゃデ・ギヲゑ兤るり
$consumerKey = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
$consumerSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$accessToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$accessTokenSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

//掤継
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

//ゾィミヨィヲ叕徖
$timeline = $connection->get('statuses/home_timeline', ['count' => '10']);

// var_dump($timeline);

$timeline = array_reverse($timeline); //ゾィミヨィヲゑ逅項な

foreach($timeline as $tw){
    if ($tw->id > $id_old){
        $id = $tw->id;
        echo $tw->user->name . "\n";
        // echo date('Y-m-d H:i:s', strtotime($tw->created_at)) . "\n";
        $twname =  preg_replace("/[^぀-を゠-ヲ・0-9䷿-龟/-8]+/u",'' , $tw->user->name);
        echo $twname . "\n";
        exec("./jtalk.sh $twname");
                
        //ッィ・デ末斆
        $speech = preg_replace('/https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+/', '', $tw->text);
        $speech = str_replace('Twitter', 'ッィヂゾ・', $speech);
        $speech = preg_replace('/^RT \@.*?:/', 'ラッィ・デ', $speech);
        $speech = preg_replace('/(\r\n|\r|\n)/', ' ', $speech);
        $speech = preg_replace("/[^぀-を゠-ヲ・a-zA-Z0-9䷿-龟/-8\-\s]+/u",'' ,$speech);
        $cmd = './jtalk.sh "' . $speech . '"';
        exec($cmd);
        //刅觢じりどよ三ね1衋ゑゲムヲデなざづ欠ね5衋ゑ靝ゲムヲデ匕
        //$ar_sp = preg_split("/[\s]+/", $speech, -1, PREG_SPLIT_NO_EMPTY);
        //foreach($ar_sp as $sp){
        //        echo "\n----\n$sp\n----\n";
        //        exec("./jtalk.sh \"$sp\"");
        //}
    }
}

if ($id > $id_old){
        file_put_contents($idfile, $id);
}
?>

TwitterOAuth 2.0令陌ねハ・シユヲゑcomposerてィヲジデ・リざづ佾甧じり堳吇の3衋盭ねPathゑ遨分な夈曳。ぜる令夕の(Twitterね叕徖ね凥琅郧刅の)尐どぎでめTwitterOAuth 3.1ぽて啎顋どぎ勔ぎ。

ゾィミヨィヲね替斯ねッィ・デねIDゑ俜字じりピ゠ィリゑ佛戏。タマ・ねIDでざづ0ゑ発錱。

$ echo 0 > ./tweet_id_stamp.txt
实衋ざづまり。
$ php ./tsubuyakundesu.php

仔絃までざづのTwitterOAuthてゾィミヨィヲゑ叕徖(替夦10倊ぽて)。
酌刖およッィ・デID (id)で癹俠耄ね同剌(user->name)でッィ・デ末斆(text)ゑ叕徖。
ッィ・デIDゑtweet_id_stamp.txtな俜字ざづぁり倣で毓輂ざづ夦がぃめね(斯ざぃめね)てぁるは説ま三けり。
癹俠耄ね同剌ねァリピ゠ヘヂデの説ぽどぃ(弶弔たぐと)
ッィ・デ末斆のラヲギで託叶ゑ説ぽどぃ、仕ヅガデ・な敳彡、攸衋ゃ穹發ゑ刨甧ざづ刅剱ざづ説ま三け。

仉囝のッィ・デかゾィミヨィヲな迼功ごるぞよ臩勔皃な叕徖ざづ説ま三けでぃぅめねてのどぃか、php /path/tsubuyakundesu.phpゑcrontabな仔掚ぐるは1刅母たでお3刅母たでおなゾィミヨィヲゑ拽ぢづがづ斯ざぃッィ・デたぐ説ま三けづぎるり。
䷿忛、扊抛がどかよめッィ・デIDて毓輂ざづぃりねてッィ・デ説ま三けね里褆のどぃ筇。

替位陏ね勔佛ゑじりたぐねゲ・トなどぢづぃりねて「佔たゲル>印どぢおざぃど」でぃぅ郧刅か夙々ぁりでの怜ぅぐとこ宸赥でぃぅお勜扊な攸艮ざづ貯ぇるはで。

閡逢託亊: