Hatena::ブログ(Diary)

rattcvの日記。


※記事中で紹介している自作ツール類は現状メンテしている時間が無いので一時公開停止しています。

208558

2016-08-28 Bash on Ubuntu on Windowsで日本語ターミナル環境を快適に使う3

下記の記事で紹介されている、wsl-terminal を使う方法が現状ベストだと思います。

Bash on Ubuntu on Windows + オールインワンmintty

簡単に導入出来て普通にminttyでBoWが使えちゃいます。凄い。

また cbwin というツールも一緒に使える様になっていて、Windowsプログラムも実行できます。言うことなしですね。

トラックバック - http://d.hatena.ne.jp/rattcv/20160828

2016-07-18 Bash on Ubuntu on Windowsで日本語ターミナル環境を快適に使う2

OpenSSHのsshdが起動しないって書いたのですが、どうやら私の環境ダメなだけかもしれません。

下記のリンク先で自動起動も含め、sshd使用法が紹介されていますので参考にしてみてください。

Bash on Ubuntu on Windows で SSH を利用する

私もやってみましたが何故か上手くいかなかったので、前回までの設定を行った上でとりあえず安直スタートアップbash.exe登録しました。

Windowsプログラムも実行したい

さて、今までWindows上のCygwin環境でやっていた事の殆どBash on Windowsに置き換えて作業できる様になって来たので、後はターミナルからWindowsプログラムを実行出来れば完全に移行できそうな気がします。まぁ、普通はそんなに必要無いんでしょうが、私の場合w3mから外部ブラウザを開く操作を頻繁にしますし、CUIのファイラからエクセルとかを起動するなんて事もあるので結構必須機能なんです。

Cygwin場合だと /cygdrive/c を起点としてフルパス指定すれば難なく設定出来ますが、Bash on Windowsではそう簡単にはいかないので、一般的Linuxからネットワーク経由でWindowsコマンドを実行するのと同じ手段で実現する形になります。ちょっと調べてみたらWindows用のRSHデーモンや"winexe"というツール使用する方法が見つかりましたが、どちらも上手く行きませんでした(winexecはCUIコマンドならOK、GUIを起動するオプション最近Windowsでは効かないみたい)。

なので今回はandLinux向けの下記サイト情報を参考にdRuby使用して実現したいと思います。

andLinuxからWindowsコマンドの呼び出し

Windows側の設定

まずはWindowsRubyインストールします。私は今回はUSB Rumix 2っていうインストーラ無しでコンパクトにRuby環境を整えるパッケージを使用しましたが、RubyInstallerや参考サイトの様なCygwinRuby等、なんでもイケると思います。

準備出来たら下記の内容でwinexec-executer.rbというファイルを作って適当場所に保存し、起動しておきましょう。

#!/usr/bin/ruby
require 'drb/drb'
require 'open3'
DRb.start_service('druby://127.0.0.1:12346', Open3)
sleep

Bash on Windows側の設定

こちらにも普通にapt-getRubyインストールしたら、下記内容でwinexec-teller.rbを作成します。

#!/usr/bin/ruby
require 'drb/drb'
DRbObject.new_with_uri("druby://127.0.0.1:12346").popen3(ARGV[0])

これを/usr/local/bin等パスが通った場所に保存し実行権限を与えて置きます。

Windowsプログラムの実行

ここまで出来たら、後はBash on Windowsターミナルから

winexec-teller.rb notepad

って打つだけでメモ帳が起動します。

w3mの外部ブラウザWindowsの標準ブラウザにするなら、Bash on Windows上の$HOME/.w3m/config

extbrowser winexec-teller.rb "start %s"

と追記すればOKです。

うんうん、なかなか快適です♪

トラックバック - http://d.hatena.ne.jp/rattcv/20160718

2016-07-16 Bash on Ubuntu on Windowsで日本語ターミナル環境を快適に使う

WindowsUbuntuが使える!

2016年8月2日Anniversary UpdateでWindows 10上のLinux環境Bash on Ubuntu on Windows」が提供されますねー。心待ちにしている方も多いんじゃないでしょうか?

現状はまだリリース前ですが、開発者向けのInsider Previewを用いる事で既に利用可能になっているので、私みたいに8/2まで待ちきれない方は下記リンク先の様にわかりやすく解説してくれているサイトを参照の上、導入しちゃっても良いでしょう。


Windowsに採用されたBash (Ubuntu)を試してみる

導入後は追加されたアイコンクリックすれば普通にシェル(zshとかも使えます)経由でLinuxが使える様になります。標準のターミナルコマンドプロンプトベースなので何かと不便ですが、ConEmu等のコマンドプロント代替ツール経由でbashを動かせば日本語の入出力が一応出来る様にはなります

ただ、これでもBSキー日本語が2文字消える等、文字幅の計算おかしい様で常用するには厳しい状況なので、ssh経由でログインして使ってみる事にしました。

以下に備忘録的にズラズラっと列挙してみます

OpenSSHのsshdは起動はすれども繋がらない様だったので、dropbearを使ってます

/etc/apt/sourses.listの設定

以下のように編集、保存します

deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty main restricted universe multiverse
deb-src http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-updates main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-security main restricted universe multiverse

日本語化

 sudo apt-get update
 sudo apt-get install language-pack-ja
 sudo update-locale LANGUAGE=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8
 sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

dropbearのインストール

sudo apt-get install dropbear

デーモンは使えない様なので、bashの起動スクリプトで起動させてますもっといい方法があるとは思います

echo "sudo service dropbear start" >> .bashrc

パスワード無しでdropbearが起動する様に、

sudo visudo

で開かれた設定ファイル

[ユーザー名] ALL=NOPASSWD: /usr/sbin/dropbear

と追記し、保存します

これでBash on Windowsアイコンクリックsshサーバが起動する様になります

puttyの導入

以下のページからputty.exeを頂いてきます

PuTTY Download Page

適当フォルダに置いたら、1度クッリクして起動します新規localhostssh接続するセッションを作り、フォントの設定等を行った後で名前(ここでは"BOW"とします)を付けて保存します

次にputty.exeショートカットを作り、プロパティの「リンク先」を

[puttyを置いたフォルダパス名]\putty.exe -load BOW -l [ubuntuユーザ名] -pw [ubuntuパスワード]

という感じに設定します

認証方式にした方がいいかもしれませんが、現状自分はこうしてます

puttyの見た目を変更

下記のリポジトリから、solarized_dark.regを頂いてきます

https://github.com/brantb/solarized/tree/master/putty-colors-solarized

puttyフォルダに保存したら、エディタで開いて下記のようにSessionsの後をputty上で作成したセッション名に変更します

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\BOW]

変更後にダブルクリックしてレジストリに反映させます

これで、puttyショートカットクリックで見易いターミナルUbuntu操作出来るようになる筈です。

tmuxインストール

Ubuntu Trustyのtmuxは古いので、最新版tmuxビルドして使います

sudo apt-get build-dep tmux
git clone https://github.com/tmux/tmux.git
cd tmux
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install

ここまでの作業で、以下の様な環境が整う筈です。Vim等での日本語入力も快適です。もしかしたら8/2のupdateでこんな面倒な事は不要になっちゃうかもしれないですね(笑)

ではまた!

f:id:rattcv:20160716154618p:image

↑やっぱりJnetHackビルドしてるし(笑)


トラックバック - http://d.hatena.ne.jp/rattcv/20160716

2013-11-28 rbox更新

アップローダにTerm20131128.apkを置きました。ちょっとVim Touchの真似をして、アクションバーにIME ON/OFF の切替(鉛筆アイコン)と[ESC]キーを付けました。手元の環境だと[TAB]が"[VolumeUp]+[T]"、[CTRL]が"[VolumeDown]"にアサインされているので、比較ATOK等のIMEでも扱いやすくなった気がします。ウィンドウを閉じたり追加したりする場合はメニューの「ウィンドウ一覧」等から行えます。

例によってVimのプラグイン管理をNeoBundleで行う設定が.vimrcに記述されているので必要に応じて書き換えるなりしてください。とりあえず私と同じ設定にするならば、$HOMEの"bundle.sh"を実行してNeoBundleとUnitegit cloneした後にVimを起動して :Unite neobundle/install すれば良いかと思います。

ではでは。

f:id:rattcv:20131128154531j:image

トラックバック - http://d.hatena.ne.jp/rattcv/20131128

2013-09-27 Vimから電話がかけられるなんて・・・素敵!

このエントリーVim Advent Calendar2012の301日目の記事です。

Vim電話

スマホVimを入れてるVimmerなら、Vimから電話掛けれたらな〜って1度は思ったことありますよね?(オレだけ?)。この度そんな願望を叶えるためのunite-sourceをちょこっと書いてみたので紹介してみたいと思います

電話帳の取得は?

もちろんAndroid端末は内部に連絡先のデータベースを持っており、そこから情報を取得できれば一番いいんですが、ターミナルエミュレータで動いてるAndroidネイティブなCUIアプリからそれをやるのは恐らく無理だと思われます。さてどうしたものかと考えて思いついたのは、スマホの「連絡先データエクスポート」でSDカード上に出力されたファイルを使ったらどうか?というものでした。vcard形式のこのファイルUTF-8エンコードされた部分をデコードしてリスト作成は出来るには出来るんですが、なんかあまりカッコよくない。んで最終的に辿り着いたのは、「ネットワーク経由でGoogle Contact APIを叩いて連絡先を取得する」方法です。オンラインじゃなきゃ使えませんが、これから電話しようって時にオフラインな状況下ってのはまず無いと思うので良しとします

スマホの連絡先情報の保存

Android端末の連絡先データの保存先は、機種にもよりますが「1:キャリアアカウント」、「2:本体」、「3:Googleアカウントから選べる形になってると思います。この中で「3」を選ぶとデータクラウド上で管理されるので携帯キャリアを変えたり機種変したりしても簡単にデータ移行できますし、PCブラウザGoogleログインして編集したりといったことも可能です。今回Vimから扱うのもこのGoogleアカウントに紐づいた連絡先情報という事になります

すでに連絡先を本体のみに保存してしまっている場合でもGoogleアカウントに同期させることは可能です。方法はググってみてください。

unite-sourceについて

Google Contact APIを叩く部分がcurlなのは仕方ないにしても、そこ以外はVimスクリプトだけで書きたかったんですが、精進不足でweb-apiが上手く使えなかったのでXMLパースrubyでやってます。動作にはAndroid上のターミナルアプリで端末Vimrubyが使える環境必要で、1から作るには結構大変なんですが、拙作のrboxだとTermYYYYMMDD.apkインストールだけで整いますIS01専用のMCVTってのもあります

拙いコードで申し訳ないんですが、以下にのっけます

let s:save_cpo = &cpo
set cpo&vim

" unite-source の設定を定義する
let s:unite_source = { 'name': 'denwa' ,
        \ }
let s:denwa = []


" Google Contact API を叩いて連絡先を取得
function! s:get_contact_list()
  let auth = vimproc#system("
    \ curl -s https://www.google.com/accounts/ClientLogin
    \ --cacert $RBOX/usr/share/curl/curl-ca-bundle.crt
    \  -d Email=YOUR_EMAIL
    \  -d Passwd=YOUR_PASSWD
    \  -d accountType=GOOGLE
    \  -d source=Google-Contact-Lister
    \  -d Gdata-version=3.0
    \  -d service=cp | grep ^Auth= | sed 's/^Auth=//' ")

  let cmd = "curl -s https://www.google.com/m8/feeds/contacts/default/full?max-results=1000
    \ --cacert $RBOX/usr/share/curl/curl-ca-bundle.crt
    \ -H 'Content-Type: application/atom+xml'
    \ -H 'GData-Version: 3.0'
    \ -H 'Authorization: GoogleLogin auth=" . auth ."'"

  let ret = vimproc#system(cmd)
  return ret
endfunction


" XML の連絡先をパースリスト作成
function! s:get_data()
        let str =  s:get_contact_list()
ruby << EOC
  require 'rexml/document'
  x='';y='';z=''
  ruby_ret = VIM.evaluate('str')
  doc = REXML::Document.new(ruby_ret)
  doc.elements.each('feed/entry') do |element|
     title = element.elements['title']
     fname = element.elements["gd:name/gd:familyName"]
     phoneno = element.elements['gd:phoneNumber']
     if title.length > 0 && !phoneno.nil? then
       x = title.text + " "
       x = x + "(" + fname.attributes['yomi'] + ")  " if !fname.nil? && !fname.attributes['yomi'].nil?
       x = x + phoneno.text
       y = "echo am start -a android.intent.action.DIAL tel:#{phoneno.text} | /system/bin/sh"
       z = z + "[\"#{x}\",\"#{y}\"],"
     end
   end
   z = "[#{z}]"
   VIM.command(%Q[let s:denwa = #{z}])
EOC
endfunction


" unite.vim で表示される候補を返す
function! s:unite_source.gather_candidates(args, context)
  if empty(s:denwa) | call s:get_data() | endif
  return map(copy(s:denwa), '{
        \ "word": v:val[0],
        \ "source": "denwa",
        \ "kind": "command",
        \ "action__command": "call unite#util#system(''".v:val[1]."'')"
        \ }')
endfunction


" unite.vim に source を登録
"call unite#define_source(s:unite_source)
"unlet s:unite_source
function! unite#sources#denwa#define()
          return  s:unite_source
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

YOUR_EMAIL,YOUR_PASSWDはご自分のものに置き換えてください。

使い方

◆ 上記のコードを"denwa.vim"という名前で ~/.vim/bundle/unite.vim/autoload/unite/sources に保存したら早速Vimを起動して"Unite denwa"してみましょう。



f:id:rattcv:20130928023717p:image


◆ 基本的には「氏名 (ふりがな電話番号」の形式で表示されます。(本当の私の連絡先を晒すわけには行かないので、下図はテストアカウントテストデータによるものです。)

f:id:rattcv:20130928023718p:image


四天王で絞り込み、広目天さんに電話してみましょう。リスト上で[Enter]押下です。


f:id:rattcv:20130928023719p:image


◆ あとは[ダイアル]ボタンを押せば電話がかかります

f:id:rattcv:20130928023720p:image


如何ですか?実用性はともかくw,Google Contact API & Unite & Androidインテントの組み合わせは結構面白いと思うんですけど。

応用としては、Uniteで選択した複数の連絡先のメールアドレスに、編集中のバッファを本文としてメールを送ることなんかも出来るんじゃないかなって考えたりしてます

ではまたー。

2013-09-21 Androidでeskk.vimを使ってみた

このエントリーVim Advent Calendar2012の294日目の記事です。

Vim日本語入力を行えるプラグインの中にtyruさんのskk.vim/eskk.vimがあり、rboxには今まで前者のskk.vim(anyakichiさんのfork版ですが)を同梱していました。これはこれでgoogle-ime-skkと連動も出来て便利なんですが、rboxのVimでもLuaJITの有効化によりneocompleteが使える様になったので、eskk.vimとの組み合わせを試してみたくなったんです。


◆ まずはrboxに入ってるskk.vimを削除します。

~% rm ~/.vim/plugin/skk.vim

◆ 次に .vimrc の編集です。skk.vimに関する設定部分を削除またはコメントアウトしたら、NeoBundleの設定箇所に下記を追記します。

NeoBundle 'tyru/eskk.vim'

◆ ついでにeskk.vimの設定も追記しときましょう。わたしはとりあえず下記の様にしました。

" eskk
let g:eskk#large_dictionary = {
  \ 'path': $HOME . "/SKK-JISYO.L",
  \ 'sorted': 1,
  \ 'encoding': 'euc-jp',
  \}

let g:eskk#enable_completion = 1
let g:eskk#egg_like_newline = 1


◆ 設定を終えたらUnite-Neobundle/Installしましょう。(skk-dict.vim必要なかったかもしれません。)

f:id:rattcv:20130921070302p:image


◆ 忘れてましたー。SKK-JISYO.Lこちらからダウンロードし、$HOMEに置きましょう。


◆ はやる気持ちを抑えつつ早速Vimを起動し[Ctrl]+[j]。

f:id:rattcv:20130921070301p:image


実はeskkは設定が良く分からなくてPCでも使ってなかったんで、いきなりこの環境で試したわけですが、ちゃんと自動補完されてる様で結構感動ものです。今の設定だと[Ctrl]+[N]or[P]で候補選択するんですけど、[TAB]でも出来るようにしたいと思ってます

ではまた〜。

2013-09-16 AndroidでTweetVimを使うには

rboxでやるととっても簡単だよって話です。


色々と気になる点があったんですが、ブログコメント欄が無かったのでこちらでエントリーを書かせて頂きます。(ちなみにrboxってのはここで公開してる改造版Android TerminalEmulatorです。)

まずその1の方


続いてその2




実際にrboxの現時点の最新版(Term20130905.apk)を使用した場合の導入手順を示しますね。


◆ rboxがインストールできたらすかさずNeoBundleを入れる。ソフトキーボードは"Keyboard with Ctrl key"を使ってます。5インチの端末でも打ち間違いも少なく使いやすいと思います

f:id:rattcv:20130916090005p:image


Vimを起動し、:NeoBundleInstallする。これによりTweetVimを含め、いくつかのプラグインインストールされる($HOME/.vimrc参照)。

f:id:rattcv:20130916090004p:image


◆ :TweetVimHomeTimelineでTweetVim起動。

f:id:rattcv:20130916090003p:image


◆ するとインテントによりURLを開くアプリを選択する画面が表示されます。ここでは標準ブラウザを選択してみます

f:id:rattcv:20130916090002p:image


ブラウザ連携アプリ認証を促す画面に遷移します。Twiiterへのログイン必要です。

f:id:rattcv:20130916090001p:image


PIN番号が表示されるので暗記しますw(コピペでもいいと思います。)

f:id:rattcv:20130916090000p:image


Vimに戻りPIN入力

f:id:rattcv:20130916085959p:image


タイムラインが表示されました。続けてUserStreamも試しましょう。

f:id:rattcv:20130916085958p:image


◆ ちゃんと動きますね。スワイプログスクロールしたり、URLカーソルを合わせてエンター押下で外部ブラウザで表示したり出来ます

f:id:rattcv:20130916085957p:image


ソフトキーボードをOFFにして、ログを垂れ流しとくのもいいかも知れないですね。

f:id:rattcv:20130916090529p:image

ではでは興味ある方は試してみてください。

トラックバック - http://d.hatena.ne.jp/rattcv/20130916

2013-09-05 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ファイル作成可能)。

ではでは。

トラックバック - http://d.hatena.ne.jp/rattcv/20130905

2013-07-14 rbox更新

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


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

さらShaberu.vimを導入し、.vimrcに下記を追加すればAndroidVimが喋ります。

let g:shaberu_user_define_say_command = ‘say "%%TEXT%%"’

面白い活用法とかあったら教えてくださいね〜。

ではでは。

トラックバック - http://d.hatena.ne.jp/rattcv/20130714

2013-07-04 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から


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

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の方は私の勘違いだった様で、普通に喋ります

トラックバック - http://d.hatena.ne.jp/rattcv/20130704