rbox更新

アップローダにTerm20130905.apkを置きました。updatefileは必要ないですが、open_jtalkを使いたい場合はjtalk.tar.gzを/sdcard上に展開してください。主な更新内容は下記になります。



.vimrcに自分用にNeobundleの設定を色々書いてるので普通に起動するとエラーメッセージが出ます。要らない場合はコメントアウトすればいいんですが、とりあえず私と同じ設定で試す場合は


% mkdir -p ~/.vim/bundle
% git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
とした上でVim上でNeoBundleInstallしてみてください。
あと、前回書き忘れたんですが、wav再生にOpenSL ES APIが使われますので、Android2.2以下の端末では今のところsayで喋らすことが出来ません(open_jtalkでwavファイルは作成可能)。
ではでは。

rbox更新

アップローダに置いたusr20130714.tar.gzを$RBOX上で展開します。更新内容は下記になります。

  • JNetHack3.4.3-0.11
  • lua追加
  • Vim 7.3.1237 +lua
  • sayコマンド追加



"say 喋らせたい言葉"と打つことによりrboxでテキスト読み上げが可能です。リアルタイムに喋らせたい場合、zshからは扱いづらいのでgoogle-ime-skk & skk.vim & VimShellで試す事をオススメします。シェルスクリプトに組み込んじゃうのが簡単でいいかもしれませんね。
さらにShaberu.vimを導入し、.vimrcに下記を追加すればAndroidVimが喋ります。


let g:shaberu_user_define_say_command = ‘say "%%TEXT%%"’
面白い活用法とかあったら教えてくださいね〜。
ではでは。

Androidでおしゃべりコマンドを試す。

フリーで利用出来る日本語音声合成エンジンを使って、Androidコマンドラインからお喋りさせてみようという試みです。
オープンソースで公開されている'OpenJTalk'を使用します。

ロスコンパイラの入手

Sourcery CodeBench Lite Editionから



をダウンロードして来ます。最近は色々登録しないと落とせなくなってしまった様でちと面倒かもしれません。
入手出来たら実際にクロスコンパイルをするLinuxマシンの/opt以下にインストールします。インストール先を変える場合は適宜読み替えてください。


~% cd /opt
tar xvjf arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
~% mv arm-2013.05 Sourcery

環境変数を設定しておきましょう。


~% export PATH=$PATH:/opt/Sourcery/bin/:/opt/Sourcery/arm-none-linux-gnueabi/bin/
~% export LD="arm-none-linux-gnueabi-ld"
~% export CC="arm-none-linux-gnueabi-gcc"
~% export CXX="arm-none-linux-gnueabi-g++"
~% export LDFLAGS="-L/opt/Sourcery/arm-none-linux-gnueabi/lib"
~% export CFLAGS="-I/opt/Sourcery/arm-none-linux-gnueabi/include"
~% export AR="arm-none-linux-gnueabi-ar"

ソースコード類の入手

hts_engine API から、

  • hts_engine_API-1.06.tar.gz



Open JTalkから

  • open_jtalk-1.05.tar.gz(本体)
  • open_jtalk_dic_utf_8-1.05.tar.gz(Open JTalk用辞書)
  • hts_voice_nitech_jp_atr503_m001-1.05.tar.gz(Open JTalk用HTSボイス)



MMDAgent - Toolkit for Building Voice Interaction Systemsから

  • MMDAgent_Example-1.0.zip(MMDAgent のサンプルスクリプト、meiちゃんの声の音響ファイルを拝借)



をそれぞれダウンロードしておきます。

hts_engine APIをビルドする

これが無いとOpenJTalkがビルドできません。


~% tar xvzf hts_engine_API-1.06.tar.gz
~% cd hts_engine_API-1.06
~% ./configure \
> --prefix=/opt/Sourcery/arm-none-linux-gnueabi \
> --host=i386-linux \
> --target=arm-linux
~% make
~% make install

OpenJTalkをビルド

OpenJTalk自体はhts_engine_APIのサンプルアプリという扱いのようです。


~% export CC="arm-none-linux-gnueabi-gcc -static"
~% tar xvzf open_jtalk-1.05.tar.gz
~% ./configure \
> --prefix=/opt/Sourcery/arm-none-linux-gnueabi \
> --host=i386-linux \
> --target=arm-linux \
> --with-hts-engine-header-path=/opt/Sourcery/arm-none-linux-gnueabi/include \
> --with-hts-engine-library-path=/opt/Sourcery/arm-none-linux-gnueabi/lib \
> --with-charset=UTF-8
~% make
でビルドが始まりますが、途中で 「mecab-dict-indexが実行出来ないよ!」的なメッセージと共にエラー終了しちゃうと思います。仕方ないのでホストマシンで実行可能なmecab-dict-indexを得るために、Linux上で普通にOpenJTalkをビルドします。先に設定したクロスコンパイル向けの環境変数の影響を避けるために別なターミナル上で作業します。

~% mkdir ~/linux-native
~% mkdir ~/openj
~% cd linux-native
~% tar xvzf hts_engine_API-1.06.tar.gz
~% tar xvzf open_jtalk-1.05.tar.gz
~% cd hts_engine_API-1.06
~% ./configure --prefix= $HOME/openj
~% make
~% make install
~%
~% cd open_jtalk-1.05
~% ./configure \
> --prefix=$HOME/openj \
> --with-hts-engine-header-path=$HOME/openj/include \
> --with-hts-engine-library-path=$HOME/openj/lib \
> --with-charset=UTF-8
~% make
ビルドが正常終了したら、mecab-dict-indexをクロスコンパイル環境の方にコピーします。

~% cp ~/linux-native/open_jtalk-1.05/mecab/src/mecab-dict-index ~/open_jtalk-1.05/mecab/src/
ロスコンパイル用のターミナルに戻って続きをビルドします。

~% cd ~/open_jtalk-1.05
~% make
~% make install
これで/opt/Sourcery/arm-none-linux-gnueabi/binに、open_jtalkバイナリが出来てる筈です。

~% cd /opt/Sourcery/arm-none-linux-gnueabi/bin
~% file open_jtalk
open_jtalk: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped

サウンドプレイヤーの入手

出来上がったOpenJTalkのバイナリでテキストファイルから読み上げwavファイルが作れて、それをAndroidの適当なプレイヤーで再生したり出来るんですが、やっぱりコマンドラインから扱いたいのでcuiサウンドプレーヤーを準備します。ちょっと楽して The KBOX projectの'andplay'を使わせて頂きます。


~% mkdir andplay
~% cp andplay_0.0.1_kbox.deb andplay
~% cd andplay
~% ar x andplay_0.0.1_kbox.deb
~% ls
andplay_0.0.1_kbox.deb control.tar.gz data.tar.gz debian-binary
~% tar xvzf data.tar.gz
./
./usr/
./usr/bin/
./usr/bin/andplay

再生スクリプトの準備

以下の内容でsay.shというファイルを作成しておきます。


#!/system/bin/sh
VOICE=$HOME/MMDAgent_Example-1.0/Voice/mei_happy
DIC=$HOME/open_jtalk_dic_utf_8-1.05
OUT=$HOME/tmp/jsay.tmp.wav
echo "$1" | $HOME/openj/bin/open_jtalk -s 48000 -p 210 -a 0.55 \
-z 0 \
-td $VOICE/tree-dur.inf -tm $VOICE/tree-mgc.inf -tf $VOICE/tree-lf0.inf \
-tl $VOICE/tree-lpf.inf -md $VOICE/dur.pdf -mm $VOICE/mgc.pdf \
-mf $VOICE/lf0.pdf -ml $VOICE/lpf.pdf -dm $VOICE/mgc.win1 \
-dm $VOICE/mgc.win2 -dm $VOICE/mgc.win3 -df $VOICE/lf0.win1 \
-df $VOICE/lf0.win2 -df $VOICE/lf0.win3 -dl $VOICE/lpf.win1 \
-em $VOICE/tree-gv-mgc.inf -ef $VOICE/tree-gv-lf0.inf -cm $VOICE/gv-mgc.pdf \
-cf $VOICE/gv-lf0.pdf -k $VOICE/gv-switch.inf -ow $OUT \
-ot trace.txt \
-x $DIC

andplay $OUT
rm $OUT

作成ファイルの実機へのコピー

Linuxマシン上で準備した以下のファイルをAndroid端末に送信します。
場所はrboxの$HOMEがいいと思います。

  • open_jtalk_dic_utf_8-1.05.tar.gz
  • MMDAgent_Example-1.0.zip
  • open_jtalk
  • andplay
  • say.sh



上記ファイルの上2つは普通に$HOME上で展開し、下3つは実行属性をつけて$RBOX/usr/binに移動させます。
以上でとりあえずの準備は完了です。
rboxのshell上で、


~% say.sh 喋らせたい言葉
でお喋りしてくれると思います。
ただ、筆者の環境だと喋り始めるまで5秒位かかるので、リアルタイム読み上げをしたいような用途に使うのはちょっと厳しいかもしれませんねー。
あと、rboxのzshは今のところマルチバイト対応出来てないので、日本語入力する化け化けになります(それでも一応喋りはします)のでちょっと使い方に工夫がいりますね。VimShell+skk.vimでイケるかなと思ったんですが何故かダメでしたorz
ではでは、時間がある方は色々遊んでみてくださーい。
※2013.07.18追記 - gccに "-Ofast -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp" のオプションを追記してビルドしたところ劇的に早くなりました。端末によっては動かないケースもありそうですけど。VimShellの方は私の勘違いだった様で、普通に喋ります。

IS01でNeobundle.vimを使ってみる。

遅くなってすいません、git使えるようになったんでアップローダのMCVT4IS01.apkとrboxfile入れ替えました。
では早速Neobundleに挑戦。下記コマンドを実行します。


~% mkdir -p ~/.vim/bundle
~% git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
.vimrcに設定を追記します。

:NeoBundleInstall実施。うまく行ったのかな?

VimShellもイケますね。下の方はvimshell-kawaii入れた図です。


NeoBundleInstallとNeoBundleInstall!位しか試してませんが、これで大分プラグイン管理が楽になると思います。
ではではIS01でHappy Vim Lifeを!

あのクラムシェル端末をVimで使い倒そう!

全国のVimmerのみなさん、こんばんは!
Vim Advent Calendar2012の138日目の記事を書かせて頂きます、端末大好きVim大好きなrattcvと申します。

Vimとお出かけしてますか?

Vimに対して単なるエディタ以上の愛を抱いているVimmerの中には、モバイルガジェットにもVimを入れて所構わず時構わずイチャイチャされてる方も多いことでしょう。
今はiPhoneにせよAndroidにせよ、公式のStoreからVimが使えるアプリをインストール出来るので、ごっついノートPCとか持ち出さなくてもVimと一緒に気軽にお出かけ出来る環境が整ってきていてます。素晴らしいですね。

Androidで使えるVimについて。

AndroidVimを使うには、Playからインストール出来る"Vim Touch"を入れるのが一番お手軽だと思います。タッチパネルから操作しやすい様に色々と工夫されていて、評判も上々のようです。私は使ったことがないのでレビューは書けませんが、hyamadaさんのブログやMOONGIFTの記事が参考になるかと思います。


一方、私みたいな端末好きでVimはコンソール版って人は、同じくPlayにある"Terminal IDE"という、端末エミュレータがベースのアプリを使うのがいいと思います。Vim以外にもGeek御用達なツール類がてんこ盛りです。肝心なVimの使い勝手が気になるところですが、詳しく紹介されてるサイトはちょっと見つけられませんでした。日本語の扱いは苦手な(出来ない?)様ですね。

今回Vimを入れる端末は・・

さて、上で紹介したアプリはいずれもAndroid要件が2.3(.3)以上な為、私の手持ちのガジェットの中で最もVimが似合うヤツ ーそう、薄々お気づきかと思いますがあの伝説の名機『IS01』では動かないんです!そんな化石端末今すぐ捨てろ的な声も聞こえてきそうですが、持ち運びに丁度良く、ポケットからサッと出してqwertyキーボードが使えるコイツでVim使いたいんです。同じようなコンセプトの後継機も中々出ないですしね。それなら自分で環境作っちゃえ!ってのが今回の記事の主旨です。IS01(かDocomo版のLynx)は結構安価に購入・運用出来たので何となく買っちゃった方も相当数いらっしゃるとは思うのですが、持ってない/とっくに手放した方にはあんまし関係なくってすいません。
持ってる方は埃かぶってる端末を復活させる事が出来るかもしれません!(本当か?)
最近の機種では、@syuiさんがご紹介してくださった"rbox"が使えると思います。一点補足すると最新の版では特にインストール後ファイル追加しなくてもgitが使えます。


Android向けのVimと周辺ツールのビルドについて

私がIS01を入手した3年ほど前は、当然あると思っていたVimAndroidマーケット(当時)に存在せず、ついに出たか!と思ったアプリも有料だったりで非常にがっかりし、何か手はないものかと模索していたものでした。
アプリが無いならコンソール版のVimは使えないのか?とは言っても一般的な携帯端末で生コンソールに落ちることなんて出来ないだろうし、仮想端末アプリは使えるのかな?お、Androidソースコードにもともと"Term"っていう端末エミュレータのアプリが含まれてるじゃん。ってことはマーケットにも・・あるあるw
てな感じでLinuxカーネル)がベースであるAndroidでも、端末エミュレータでログインすれば当然CLIのシェルが動き、プログラムの実行が可能なことは分かりました。この環境でコンソール版のVimを動かせばいいのか、と思ったものの 、OSSAndroid NDK等を使ってAndroidネイティブな環境にポーティングするのは結構骨が折れる作業ですんなりいかない場合が多いんですよね。でもこんだけ世界中でVimが使われてるんだからAndroidに移植している人ぐらい、何人か居る筈だ!と血眼になって探したらやっぱり居たんですね、これが。はい、他力本願ですw



ご覧になれば分かると思いますが、agcc.pl(Android NDKに含まれるツールチェーン版gccへのラッパースクリプト)を使用してビルドを実施されています。
私も基本的には上記の記事の手順をもとにいつもVimをビルドしています。

さて、こうして念願のVimが使える様になった訳ですが、Vimが使えるなら他のツールも色々使える筈じゃん?と思い色々なツールの移植を試みました。そうこうしている内に手持ちのガジェットの種類も徐々に増えて行き、動作確認も新らし目な機種を使う機会が多くなり、更には使うよりもAndroidで動かす事の方が面白く主体になってしまっていたんですね。そう、大好きな筈のIS01ちゃんを顧みず暫く放置しちゃってたんです。やっとそれなりに環境が整ったなー、そろそろ使おうかなーと思った時にはもうIS01上では完全には動かないものになっていたんです。
それなら動くようにしてやろうじゃん、そんな手間かからんだろ、とタカをくくっていましたが実際やってみたらそんな甘くなかったです。一応なんとか使えるようにはしたものの、NDKでビルドしたもの、Sourcery G++ Toolchainを使ったもの、ARM Linuxでstaticビルドしたものが混在する代物になりました。
が、動けばいいんですw

端末アプリについて

さて、今回でっちあげた準備したツールですが、AndroidTerminalEmulatorではなくキーバインド変更の容易さ、Android1.6でのマルチバイト対応の面からConnectbotをベースにしました。
名づけて、Modified Connectbot with Vim and other useful Tools 略称 M.C.V.T.ですw
"other usefull tools"とは言ってもzsh,git,w3m,rubyぐらいですね。Vim中心の環境なんでTerminalマルチプレクサは要らないかな、と思い外してます。IS01専用です。当然rootは要りません。CM4IS01等のカスタムROMではキーコードの割り当てが違うので使えないと思います。

インストール方法

アップローダから、MCVT4IS01.apkとrboxfileをダウンロードします。rboxfileの方はSDカード直下(/sdcard)に置いてください。また、お好きな等幅フォントを"rbox_font.ttf"にリネームしてこちらもSD直下に置いとくと表示に使われます。無くても大丈夫ですけど。

本体をインストール後に適当な名前でlocal接続を作成し起動すると初回にファイル展開をします。結構時間がかかりますが、zshが起動するまで、暫し待ちましょう。


ConnectBotですが、IS01Vimを使うためにいくつかカスタマイズしています。
IS01に付いて回る、画面右のサイドメニューを消しました。
キーバインドに関しては

  • 左[shift]+[1〜9の数字キー]で刻印通りの記号
  • 左[shift]+[0]でパイプ
  • 右[shift]で[TAB]
  • [絵・顔・記]で[Ctrl]
  • [文字]で[Esc]



を入力するようにしてあります。
◆タップでマウスイベントを起こすパッチを当てているので、画面へのタッチ操作でVimのカーソル移動、バッファの切り替え、テキスト選択等が出来ます。

早速Vimを使ってみましょう。


タップ&ドラッグで文字選択。


w3mが動くのでw3m.vimが使えます。



ここまで順調に来てて、いよいよNeobundle入れて色んなプラグインの動作確認!って思ってたら直前にgitに不具合が見つかってしまいまして、更に不幸なことに開発用のARM Linuxマシン(Debian ARM on Lifetouch Note)の環境も壊れるという事態に陥ってしまいました。本記事の投稿が遅れたのもこれが原因ですが、Debianの再インストから始めてたら半日遅れ程度じゃ済まないのでとりあえずここで一旦締めたいと思います。
楽しみにしてた方(居るのか?)には申し訳ありませんが後日また続きを書きます。
ただ、Vim本体はじめ他のツールも普通に使えるのでとりあえず試したい場合はgitを抜いた状態ですが使ってみてください。手動で入れればデフォなIS01でVimShellもUniteも動きます。

ではでは中途半端になりましたが近いうちにまたー。
あ、そうそう今回もjnethackも入っちゃいましたww

Androidでvimprocを試す。

Android上のVimでvimprocが使えず歯がゆい思いをしていた今日この頃ですが、本日の更新で"Added Android support"が入ったことでやっと最近の便利なpluginが試せそうな感じになってまいりました。早速githubから最新版を持ってきてビルドしてみましたが、今のところ普通に動作している様です。感謝感謝。
make_android.makのコメントに従えばNDKのビルド環境を整えている方であれば簡単にコンパイル出来ると思いますが、Term20130319.apkに私がビルドしたものを同梱したのですぐに試したい方はどうぞ。ここに置いときます。/sdcardに置くupdatefileは前の版のをそのまま使います。
Androidでvimshellの図です。

上げました

ここに Term20130217.apk と updatefile を置きます。
apkの方をインストールしたら、updatefileを/sdcardに配置してから実行してください。
前のエントリでコメント頂いた内容について、一応対応してみたつもりです。