SlideShare a Scribd company logo
1 of 43
こわくない
ネイティブライブラリの
使い方
つ部 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配列
動かしてみる
致命的な問題ががが

More Related Content

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

辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話s2otsa
 
Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Munenori Sugimura
 
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Satoshi KOBAYASHI
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれAtsushi Mizoue
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会Yu Shibatsuji
 
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜Yuya Tanaka
 
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Satoshi Yamada
 
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)Shoot Morii
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-nishio
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) Taku Yajima
 
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_0630分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06TOC for Education, Japan Branch
 
20181212_amplfy_console
20181212_amplfy_console20181212_amplfy_console
20181212_amplfy_consoleHisayuki Mori
 
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門虎の穴 開発室
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までTeppei Sato
 

Similar to つ部 2015 09 こわくないネイティブライブラリの使い方 (16)

辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話辛い開発を色々使って迂回した話
辛い開発を色々使って迂回した話
 
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
 
Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜
 
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれ
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
 
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜
Slack超入門 〜メッセージングアプリが変えるコラボレーションのかたち〜
 
Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
 
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
 
Osc2012tksplt
Osc2012tkspltOsc2012tksplt
Osc2012tksplt
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
 
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮) 「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮)
 
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_0630分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
 
20181212_amplfy_console
20181212_amplfy_console20181212_amplfy_console
20181212_amplfy_console
 
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
 
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生までgoog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
 

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