FC2ブログ

スマフォのアプリを作りたい(32):スマフォだけで動作する音声認識⑦

   プログラミング [2020/09/09]
前回の続きになります。
でも、だいぶ間があいちゃいましたね。

前回割と中途半端なところで話を切ったので、この回から読み始めても「さっぱり何言ってんのかわかんない」と思います。
(それじゃなくても、独り言に近い備忘録なので、他の人が読んでもどうにか理解できるのかはあまり気に掛けてません。)

なので、もし類似の何かを調べしている方は、
「スマフォだけで動作する音声認識⑥」から、あるいは「スマフォだけで動作する音声認識①」からお読みください。


前回までで、JavaからC/C++のライブラリをコールして、さらにライブラリ側からJava側のコールバックを呼び出すところまでを実験的にやってみました。
今回は、今までの内容を整形(コードをそれなりの内容にまで整える)して、さらにReact Native用パッケージに仕立てるところ・・・
行けるかどうか分かりませんが、始めます。


◆単語認識ライブラリのコールバックの実装
ず~~~っと前に作ったGoogle音声認識と同時に録音するJavaコード(さるもすなる版react-native-google-speech-api)では、音声データをバッファで渡すことができます。
データ型はbyte配列(byte[])です。
ただし、そのバッファを握ったまま音声認識の処理が終わるまで離さないということは、どう考えても効率が悪そうだし、そんな制御は却って難しそうです。
なので、認識を開始した後に渡す音声データは、コールバックで渡す段階で認識側専用のバッファ(char *の先)にデータをコピーするのがまあ普通な考え方かと。

じゃあ、そのコピーはJava側で行うのか、C側で行うのか・・・

Java側でやるなら、
Java側にC側で用意したバッファのポインタをそのまま渡せるのか?できない?
前回記事でお試しコードを書いたときは、わざわざJavaのbyte型配列を新しく確保して渡した。
これだと、データコピーが2回発生してしまう。

C側でコピーするとしたら
Java側のコールバック関数のリターン値をデータアドレスとデータ長の2種類を含むものにしないといけなくなる。
①C言語でいうところの参照型の引数を使ってJava側のバッファアドレスを貰って来ることはできるのか?
②バッファを渡した側がデータのコピーの完了を知る術がない(そのバッファの解放判断ができない)んじゃない?

①:そもそも、Javaにポインタという概念はないらしい。
byte[]型のオブジェクトそのものはリターン値として使えて、そこから中身のレングスとポインタはJNIの関数で取り出せるみたいです。

②:でもでも、リターンのタイミングでそれを渡したとすると、コピーの完了を知るすべがないということになります。
Java側のバッファの「用済み」がいつなのか分からないと、バッファを解放できないということになります。
データコピーの完了を知らせるために別の仕掛けを用意しなくちゃいけなくなってしまいます。
認識が完了するまで、Java側バッファも保持しつづける?
それは、後々厄介なことになりそう。

悩んだ末に、こんなことを考えました。
Javaのコールバックを呼ぶんだけど、そのコールバックは再度C関数を呼び出して、そのC関数がデータのコピーをやっちゃうって仕掛けです。

まずは、やってみました。
ここでも結局、Java側のコールバック関数を経由して、C側のバッファのポインタはどう渡すんだ?
と、振り出しに戻るような疑念が出ました。

結局そこはC側にグローバル変数を用意して、自分のバッファとその長さを保持して
コールバックから呼ばれたデータコピー関数は、グローバル変数を参照することで、済ませてしまいました。
かなりベタというか、美しくありません。
これだと、マルチスレッドでこのコールバック処理が非同期に実施されるようなことがあれば、アウトです。

ともあれ、この作りで一旦先に進みます。

続きます。この後も長ーいです。

続きを読む

スポンサーサイト





カレンダー
08 | 2020/09 | 10
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 - - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



PVアクセスランキング にほんブログ村 にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR