Google Cloud Speech APIを使ったHoloLensアプリ(Unity2017対応など)
先週のできごと
先日、Google Cloud Speech APIを使ったアプリを制作し、リクルートATL様に寄稿させていただきました。
HoloLensで言霊を撃ってみよう | ATL SHOWCASE
それにまつわる内容で、 Tokyo HoloLens ミートアップ vol.4でLTの機会を頂きました。
www.slideshare.net
HoloLensでの音声認識は手垢の付いたネタにも関わらず良い反響を頂きました。ありがとうございます。
Unity・アセットをアップデート
アプリ自体の紹介は上記リンクにお任せするとして、 寄稿・紹介後に、Unity2017への対応・Google Cloud Speech RecognitionのV3.0へのアップグレードを行ったので、 それについて書きます。
アプリのソースコードは公開しています。
Unity2017への更新
元々Unity5.6.1 で作成したアプリですが、寄稿が終わったのでUnity 2017.1.0f3 に更新しました。 本アプリ自体、特に難しいことはしてませんので、各アセットのバージョンアップ対応が主になります。
HoloToolkit for Unity
Unity2017対応は、アーカイブはまだですがmasterブランチでは行われています。
/Assets/HoloToolkit/
のディレクトリをプロジェクトから削除し、
ダウンロードしたコードから /Assets/HoloToolkit/
をコピーすることで無事動作しました。
プロジェクト内のprefabやオブジェクトは適宜置き換えましょう。
Google Cloud Speech Recognition
Google Cloud Speech Recognition
Unity2017リリースの少し前に バージョン3.0に更新されました。
1. ThreadManager.cs
の更新
バージョン2.3まではUWPアプリケーションでも問題なく動作していたのですが、 3.0はUWPでビルドしようとするとエラーで蹴られます。(Unity Editorでは動く)
そこで、以下のファイルを書き換えます。
\Assets\FrostweepGames\GCSpeechRecognition\Scripts\Core\Managers\ThreadManager.cs
2. 名前空間の変更
また、名前空間やクラス構成がごっそりと変わっているので、対応します。
using FrostweepGames.SpeechRecognition.Utilites; using FrostweepGames.SpeechRecognition.Google.Cloud;
↓
using FrostweepGames.Plugins.GoogleCloud.SpeechRecognition;
3. メソッドの置き換え
使い方もがらっと変わっているので、これも更新します。
3.1. クラスの変更
private ILowLevelSpeechRecognition _speechRecognition;
↓
private GCSpeechRecognition _speechRecognition;
3.2. 初期化処理
初期化処理も大きく変更が必要です。
_speechRecognition = SpeechRecognitionModule.Instance; _speechRecognition.SpeechRecognizedSuccessEvent += SpeechRecognizedSuccessEventHandler; _speechRecognition.SpeechRecognizedFailedEvent += SpeechRecognizedFailedEventHandler;
↓
_speechRecognition = GCSpeechRecognition.Instance; _speechRecognition.SetLanguage(Enumerators.LanguageCode.JA); _speechRecognition.RecognitionSuccessEvent += SpeechRecognizedSuccessEventHandler; _speechRecognition.RecognitionFailedEvent += SpeechRecognizedFailedEventHandler;
3.3. イベントハンドラ
イベントハンドラも引数が増えたので対応します。
失敗時
private void SpeechRecognizedFailedEventHandler(string obj)
↓
private void SpeechRecognizedFailedEventHandler(string obj, long l)
成功時
private void SpeechRecognizedSuccessEventHandler(RecognitionResponse obj)
↓
private void SpeechRecognizedSuccessEventHandler(RecognitionResponse obj, long l)
3.4. Start/Stop
録音開始メソッドは、音声の個人認識をするオプションがつきました。
開始
_speechRecognition.StartRecord();
↓
bool VoiceDetection = false; _speechRecognition.StartRecord(VoiceDetection);
終了
_speechRecognition.StopRuntimeRecord();
↓
_speechRecognition.StopRecord();
変更のサンプル
https://github.com/m2wasabi/SpeechGoUnity/commit/6d1824a659f05baa8d7e136f65419b9fc096f7d5
以上の変更で無事動くようになります。
おわりに
今回、Unity2017への更新で、C#6対応などビルド環境が一変したので心配しましたが、 思ったより不具合もなく移行できました。
アップデート対応は手間だけどやっておいて損はありません。
AndroidStudio3.0 Canary2 でKotlinをbuildしようとするとこける問題
AndroidStudio3.0からKotlinが正式サポートされました。 6月1日現在プレビュー版で以下からダウンロード可能です。 https://developer.android.com/studio/preview/index.html?hl=ja
AndroidStudio2.x空の変更点は、 プロジェクト開始時にJavaから変換を介せずに最初からKotlinでプロジェクトを開始できます。
何も考えずにビルドすると、
Unable to find method ‘com.android.build.gradle.internal.variant.BaseVariantData.getOutputs()Ljava/util/List;’
のようなエラーが出てしまいます。
Kotlinのバージョンが合ってないので、
build.gradle
の内容を以下のように書き換えます。
ext.kotlin_version = '1.1.2-3'
ext.kotlin_version = '1.1.2-4'
そんなわけでLet’s enjoy Kotlin!
参考
Android Studioの更新でSDK Managerが起動しなくなったら
Android Studio
と Xamarin
やUnity
で共通のAndroid SDK
を使っている場合、
SDK Manager
やAVD Manager
を単体で起動するケースがよくあります。
自分の場合、Android Studio
のバージョンを更新したときに、同時にAndroid SDK
のバージョンも更新して、AVD Manager
が起動しなくなってしまいました。
尚、ggってよくお勧めされる、JavaのPathとバージョンが合ってないのでfind_java.bat
に固定値ぶち込むみたいな腑抜けた対応は近年は不要です。
自分の場合
結論として、SDK tools
が壊れていた(or バージョンが遅れていた?)ので、コマンドラインツール
をダウンロードし、Android SDK
のtools
フォルダを置き換えてやることで動作しました。
https://developer.android.com/studio/index.html?hl=ja
一般的対処How to
RPGツクールMVの Milkcocoaプラグインを更新しました
フラグ関係のみ、データ保存の永続化に対応しました。
使い方は、GitHub参照のこと。 https://github.com/m2wasabi/milkcocoa-rpgmv-plugin#43-永続スイッチ変数の操作new
デバッグ足りなそうなので不具合あったら教えてください。
Xamarin入門者の集い #2でLT発表しました
4月17日に行われた『初心者歓迎XamarinのLT会!Xamarin入門者の集い #2』で、 初心者LT枠として発表してきました。
タイトルは 『Xamarin.Formsのための基礎体力づくり(圧縮版)』です。 丁寧に説明していると到底5分で収まりきらない内容ですが、 読み物としてお楽しみください。
懇親会の時に聞かれた内容
- Q. 勉強の期間はどのぐらいか
- A. 勉強のみしていた期間は約1か月。あとは作りながら覚えた。まだ完璧ではない。
- Q. プロジェクトを受注する前から勉強したのか、受注してから勉強したのか
- A. C#基礎は受注前から勉強していた。でも具体的な使い方を学んだのは受注が決まってから
- Q. Xamarinの案件なんて見つからない
- A. ふわっとしたモバイルアプリの案件をXamarinでやるんだよ。自分色に染めろ!
これで、仕事や趣味でXamarin(.Forms)を使ってアプリを出す人が増えれば幸いです。
Xamarin.Forms の ListView内で可変数個の画像オブジェクトを表示する
はじめに
TwitterなどのSNSのタイムラインをXamarin.Formsを使って表示したいとき、
ListViewの中で可変数個の画像ファイルを表示する必要があります。
方法は色々ありそうですが、
今回は画像表示用のカスタムビューを定義することによりシンプルに実装しました。
本記事の価値はCustomViewのソースに集約されているので、
「説明不要、ソースくれ!」という方は以下のリンクからお持ち帰りください。
ImageListView for Xamarin.Forms · GitHub
目次
- はじめに
- 目次
- 実装
- モデルの定義
- カスタムビューの実装
- ビューの実装
- ビューモデルの実装
- 完成図(API周りの実装は省略するけど)
- まとめ
- 参考記事
EditorConfigに対応したVisualStudio2017でコーディングルールを共有する
VisualStudio2017で新たに、EditorConfigファイルへ対応したらしいので、さっそく試してみました。
使い方は、ソリューションのルートディレクトリに .editorconfig
ファイルを置くだけです。
.editorconfigファイルの記法の詳細は、EditorConfigのWebサイトにて確認できます。
また、このファイルをGitで共有すると、他の人がソースを編集する場合にも、特に意識せずに、 改行、タブ、インデント等のコーディング規約を共有できます。
VisualStudioでプロジェクト単位の改行コードの制御ができるようになったのが大きな進歩です!
私がXamarin.Formsのプロジェクトで使っている設定はシンプルですが以下のようなものです。
[*] end_of_line = lf insert_final_newline = true [*.xaml] indent_style = space indent_size = 2
健全な理性を持つエンジニア諸氏は、これからはインデントガーって騒ぐ前にInitialCommitに .editorconfig仕込むようにしましょう。
ネタ元
昨日Visual Studio 2017 リリース記念勉強会に行ってきました。 csugjp.connpass.com
その中で、かずきさん id:okazuki のセッションにて、VisualStudio2017の新機能についてピックアップで紹介されました。