つ部 2015 09 こわくないネイティブライブラリの使い方

Preview:

Citation preview

こわくないネイティブライブラリの

使い方

つ部 Android 勉強会 2015 年 9 月 LT 大会

で~ご@ dego_96 2015/09/26

はじめましての人ははじめまして

お久しぶりの人はお久しぶりです

そうでない人はちわっす ( 。・ ω ・ ) ノ゙

で~ごです

自己紹介

名前 : で~ご @dego_96仕事 : なんちゃって SE

自己紹介

名前 : で~ご @dego_96仕事 : なんちゃって SE

自己紹介

名前 : で~ご @dego_96仕事 : なんちゃって SE

自己紹介

名前 : で~ご @dego_96仕事 : なんちゃって SE

今日のおはなし

以前のつ部で…

まだしゃべれなかった

で、

今は簡単にしゃべらせる方法が

わかったので

そのお話です。

① OpenJTalk を使ってみる

② Android 用にクロスコンパイル

③ Android アプリへ組み込む

今回やったこと

① OpenJTalk を使ってみる

OpenJTalk とは

入力された日本語テキストに基づいて自由な音声を生成する HMM テキスト音声合成システム

名古屋工業大学の徳田・李研究室で開発

OpenJTalk のコンパイル

ソースコード ・ OpenJTalk v1.07 ・ HTS_engine v1.08

コンパイル $ ./configure $ make

※ コンパイル方法の詳細は省略

OpenJTalk の実行

辞書や音声パラメータなどを指定して実行

実行コマンドの例$ ./bin/open_jtalk -x ./open_jtalk_dic_utf_8-1.07 –m ./voice/mei_normal.htsvoice –ow out.wav ./test.txt

※ 詳細は省略

② Android 用に  クロスコンパイル

Android で C ライブラリを使う方法

(1) Android.mk を書く(2) ソースコードを修正して

共有ライブラリ化(3) バイナリをそのままアプリに入れる

Android で C ライブラリを使う方法

(1) Android.mk を書く(2) ソースコードを修正して

共有ライブラリ化(3) バイナリをそのままアプリに入れる

クロスコンパイルでやること

(1) NDK を準備(2) toolchain の設定(3) 環境変数の設定(コンパイラのパスなど)(4) arm-linux を指定して ./configure(5) make

※ OpenJTalk の Makefile は最後にバイナリ実行するため、  一時的に x86 でビルドしたファイルをコピー

② Android 用に  クロスコンパイル

https://goo.gl/5HkQDR

Android アプリに組み込む

assets フォルダに OpenJTalk 一式を入れる⇒ 1M を超えるサイズなので zip 圧縮⇒ 初回起動時に解凍

Android アプリに組み込む

assets フォルダに OpenJTalk 一式を入れる⇒ 1M を超えるサイズなので zip 圧縮⇒ 初回起動時に解凍

解凍先は/data/data/ パッケージ名 /

ここで予想外の事態が…

Zip ファイルのサイズ25M

解凍後のサイズ

82M

トータルのアプリサイズ

110M

でかい… orz

Android アプリに組み込む

解凍したバイナリを ProcessBuilder でJava から実行

コマンドの実験やテストは PC でできるので楽

ProcessBuilder processBuilder = new ProcessBuilder(command);processBuilder.redirectErrorStream();Process process = processBuilder.start();

※ command は String 配列

動かしてみる

致命的な問題ががが

Recommended