見てはいけない黒歴史 in -The Rong's Caravan-
日記ログ コメント
About
黒歴史をリアルタイムで見られる貴重なサイト。
人間観察の悦びをあなたに・・・・・・

というのは冗談で、ただの趣味のサイトです。


管理人:ろんぐ
Since:2005/2/14
update:2018/04/19 「キモヲタだけど、女子高生と会話したい!#8【絶望のネイティブアプリ】」
update:2018/04/19 「キモヲタだけど、女子高生と会話したい!#8【絶望のネイティブアプリ】」
§Infomation§


「やりたいことをやるための継続可能な副業」としての

宅飲みカクテルデータベース

開発中。

ただいまデータ入力中!

あ、語感良くなりそうなので正式名称に「宅飲み」とつけてみました。でも宅飲み要素はあんまない笑


<予定>
未定:しばらくはデータを揃えることを考えます。

§Comment§
名前の非掲載


§Diary§
2018.4.19
キモヲタだけど、女子高生と会話したい!#8【絶望のネイティブアプリ】

ということで、妥協に妥協を重ねたわけではないのですが、一旦ネイティブでコードを書いて、うまくいけば移植というか、自分でブリッジさせるみたいな手を取ることにしました。
音声認識の部分さえ上手くいけば、あとはインターネット上にはびこるAPIにコードを投げて結果を受け取ってごにょごにょするだけですし。


ほんとこの連載はなんだったのかって感じですね


とはいえ、これが実装できれば、どんな高度なアプリでも実装できる目処が立つということなので頑張っていきましょう。フレームワークは使うのそんな難しくなさそうですしね。応用すれば自分でCordovaプラグインも書けるかも知れないし。とりあえずネイティブで書けることが大事なわけですね。


目指す実装としては、マイクを通して入力された音声が、Android標準装備のSpeech Recognizerでしたっけ、あれに「オフラインで」通してテキストで結果を受け取ることができれば完成です。



さて、ネイティブコードの書き方なんてとっくの昔に忘れてるので昔書いた記事とか参考にしながら書いていきますかね。
今回は画面遷移が必要ないので、設置するのはボタン1個とテキストボックス1つぐらいでよさそうですね。とりあえずまず画面だけ作っちゃいますかね。とりあえずAndroidStudio3をインストールしましてだ。


まず、PHP漬けだったためjavaとかkotlinを忘れてると思われるので、勘を取り戻すため、ボタンを押してなんか反応するコードを書きましょう。




class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val toastButton: Button = findViewById(R.id.start)
        toastButton.setOnClickListener {
            Toast.makeText(this, "テストメッセージです", Toast.LENGTH_SHORT).show()
        }
    }


}

とりあえずこんな感じのコードになりました。startというIDのボタンを押せば、「これはテストメッセージです」というポップアップみたいなやつが出てきます。




まぁこんな感じです。Toastとかいうよくわかんないクラスを使ってるんですけど、たぶんこのポップアップを使うのがToastなんですかね。サンプルコード丸コピなんでいまいちわかってないです(笑)
一応このコードを読み解いて見ると、最初の数行は最初からなんか書いてあったやつなんでちょっとわからないんですけど、Bundle型のなんかを受け取ってるんですかね。とりあえずそいつを使ってこの画面をCreateしてるっぽいですね。まぁこんなのは今のとこ気にしなくていいんじゃないですかね。

val以降が僕が書き加えたやつです。Rってのがおそらくアクティビティの構成要素を統括する物体なんですかね。んで、idがstartのものをfindViewByIdでとってきて、Button型のtoastButtonにぶちこんであげます。
で、それにクリックリスナーを付与するわけですね。

さらっと書いていますがKotlinの文法をあんま覚えてないので、なんでここ中括弧でくくってるのかわかんないですね。ラムダですか?絶対違うよな


調べたところ、用語的にはSAM変換とかいうものが暗黙的に行われているみたいですね。とりあえずリスナーをくっつけたかったらこんな感じで書けばいいみたいですね。



次に、ボタンを押したらHelloWorld!の部分を任意の文字列に書き換える動きを見せますかね。見た目わかりやすくするためにカウンタにしますか。




class MainActivity : AppCompatActivity() {
    companion object {
        var counter = 0
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val toastButton: Button = findViewById(R.id.start)
        toastButton.setOnClickListener {
            Toast.makeText(this, "テストメッセージです", Toast.LENGTH_SHORT).show()
            val textbox: TextView=findViewById(R.id.result)
            MainActivity.counter=MainActivity.counter.inc()
            textbox.setText("カウント:" + MainActivity.counter)
        }
    }
}

ケツに色々くっつけました。まぁ処理内容は読んで字の如くというか。


ただ個人的に不可解なのが、setText内でインクリメントができないという点ですね。色んな書き方を試したんですが、どーにも反映されず・・・・・・。
これはそのうち知ることができればいいかなということで諦めて素直な書き方になりました。ちなみにkotlinにはstatic変数がないみたいなので、コンパニオンオブジェクトとして定義するそうです。意味は正直理解してないのですが、とりあえずstaticな変数を使いたくなったらこう書けばいいんだ、って今のとこは思うことにします。


これで最低限必要な動きが確認できたので、ここからマイクを使ったアプローチをしたいところですね。問題なのはエミュレータでどうやってマイク動かすんだろって感じなんですけど。
実機で動かしてもいいんですけど、USBケーブル持ってないんだよね・・・・・・笑



とりあえず次回、マイクとの連携を図ってみますか。音声区間検出が必要なのかどうかがわからないので、とりあえず実装だけしてみて様子を見ます。

2018.4.18
僕とヴィオラとその未来

プログラミング連載ばかり続けるとアレなので、2日に1回ぐらいはちゃんと日記書こうかな(笑)
プログラミング連載は7日分ぐらいストックあるからラクなんですけどね


最近思うのは、ヴィオラからほんと離れたよなあと。

オケにも所属せず、時間にも余裕がないので結局ヴィオラはほとんど触らなくなりました。
別に嫌いになったとか飽きたとかじゃないです。単純明快な理由として今はカネにならないからなのは自分でも分かっています。


特にそれを意識して生活しているわけではありませんが、今やるべきことではないなと。
それでも時たま触りたくなって触るんですが、ほんと一瞬触って終わりになっちゃうんですよね。

僕はこの未来をかつて想像しただろうか、といった感じですね。自分でも不思議に思っています。
でも、やはりヴィオラを触っている余裕はないというか、それならばもっと生産的な活動をしたほうが良いだろうとは思うわけです。



エキストラに誘われたら乗るかもなあみたいな感じではいますが、エキストラはエキストラで別に楽しいか楽しくないかで言うとぶっちゃけ楽しくはないなとは思うのです。
満足に譜読みが終わらないまま本番を迎えることになりますし、ほんとさらって終わるだけになるというか。


僕には他に優先してやるべきことがある以上、楽器なんて今は触ってられないので封印しているのですが、いつかまた生活と将来に余裕を持って、触れるようになれたらいいなあとは思っています。



でも、いまから数年前は、いま自分がこのような状態になることなんて、一切想像しなかったんだよなあと思うと不思議な気分にはなるね笑

まぁ、そんな感じで今はヴィオラと離れていますが、いつかヴィオラを使ってあげられたらなあとは密かに思ってはおります。果たしてどうなることやら。



でも、そんな「どうなるか分からない未来に怯える姿」を見せられるというのは、この日記の存在意義でもあるのでしょう。
もしかしたら、かつて愛した作曲をしなくなってしまったように、ヴィオラが今後僕の人生に出てこなくなることも、もしかしたらあるのかも知れない。





さて、今後どうなることやら、ね(笑)

2018.4.17
キモヲタだけど、女子高生と会話したい!#7【音声区間検出ライブラリ】

どうしたものかと悩んでいたところReact Nativeというフレームワークを見つけました。
Facebookが開発したようで、他のハイブリッドアプリと異なり、HTMLベースではなく、ネイティブコードを呼び出して画面描写するため動作が軽快という点ですね。その分学習コストは多少かかりそうですけど・・・・・・。

あと、ハイブリッドアプリとはいえ完全にコードを共通化できるわけじゃないみたいです。体感的に7~8割ほどが共通のコードで動きますが、それ以外は自前で実装しないといけなさそうです。
ただ、javascript(というか、React.js)が使え、Webの知見も使えるみたいです。


ここまで読むと、採用のメリットはあんまりなさそうなんですが、僕が「ん?」と思ったのは困ったらjavaで書けるということ。iOSならswiftですかね。kotlinで書けるのかどうかは分かりませんが、少なくともjavaでネイティブコードが書けるみたいです。
車輪の再発明になりそうな気もしますが、とはいえ通常の音声認識に加え無音判定とかやんなきゃいけないので、その辺のロジックを組み込もうと思うと、この辺りの機構は自作した方が良さそうな気がします。

とはいえ、文単位で音声を認識できれば、あとはインポートしたサービスに投げて解析してもらい、それを人工知能とやりとりすればいいだけの話なので難しくなさそうですね。


最悪僕だけが使えれば支障はないので、とりあえずAndroidで作っていきましょう。音形操作とかのロジックがほんと今考えてもわけわかんないですけど、作っているうちになんとかなると信じています。


んじゃ早速インストールしましょ。
Windowsでの環境構築は大変だと聞いたのですが、今ではいろいろ便利になるようになってるみたいですね(笑)らくちんらくちん。


エミュレーターじゃなくて実機で確認するタイプらしいんですが、Expoとかいうアプリの使い勝手がメチャいいですね。たのしい。



とりあえず、最初は使い方に慣れるため、ボタンを設置して、そのボタンを押したら画面が遷移するみたいなものを作ってみましょうかね。


ただその前に、Reactの構文を知らないとわけわかめなので、学習してみます。


とりあえずこのページがわかりやすかったので、学習する方は参考に。僕はイントロダクションはやりません。あんま理解できてないし



とりあえず、基本的なお作法はなんか分かってきたので、色んな過程をすっ飛ばして音声録音からやってみたいと思います。


実装の目標としては、ボタンを押したら録音開始して、一定時間無音と判定されたら録音をやめる、みたいな動作が欲しいところですね。
単にボタンを押して終了、としないのは結局録音中に波形にアクセスできるロジックがないと求めるものが手に入らないというところにあります。



さて、これは自前でロジックを組まなくてはいけないのかなぁと思いながら憂鬱な気持ちで検索して手段を考えていたところ、音声区間検出というワードが引っかかりました。
探してみると、例えばvad.jsというライブラリがあることがわかり、こういったライブラリを組み込んで使えるのであれば、後は容易に実装できそうだな、と思うわけでございます。
だったらReact Nativeである必要なくなっちゃったネとも思うけどな


まぁこのライブラリはちょっと問題がありそうなのでたぶん使わないと思うのですが、そんな感じで組み込めそうなライブラリを選定して、組み込んでいきたいなと思う所存です。
じゃ、こっから先は次回。おたのしみに。



>>もっと読みたい


Contents
日記
過去ログです。
旅行レポートなどもこちらに置いています。

音楽素材
RPGツクール向けの音楽素材です。
現在の素材数は187曲です。

Fashion研究学Note
地雷を踏まないファッション研究学。低予算でディスられないファッションを目指します。

Instagram
カクテルの「ちょっとふざけたレビュー」。
写真素材
旅行中、無駄に撮った写真を素材として並べています。
現在2600枚ほど。
そのうち更新します。

Products
カクテルデータベース
古今東西のカクテルと、その評価をデータベースにしちゃいました(笑)
現在の登録数 ⇒

Commnication
旧BBS
一応残しておきます。

Other

Author
twitterも気軽にフォローミー!おすすめはしない!笑