はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Everything you need to know about WinUI

Microsoft Build 2020からの引用

https://mybuild.microsoft.com/sessions/7d5b56db-d367-43ac-9163-44de4e3919e8

 

UX Frameworkの統一化を進めているMicrosoftですが、現行のWin UI 2の次のWin UI 3では、MFC、WinForms、WPF、UWP XAMLから共通に使えるようになるようです。

f:id:hatsune_a:20200520225426p:plain

動作フレームワーク的にはDesktopとUWPなので、恩恵をうけそうな感じとしては、WPFにUWP XAMLライクなFluentデザインのコントロールとか使えるようになったらいいかなー。

 

ロードマップは次のような感じだそうです。

f:id:hatsune_a:20200520225700p:plain

本番システムに使っていいよという「go live」には2020年10月、Ignite 2020あたりを目標にしていた感じですね。

Ignite 2020もBuild 2020と同様にオンラインイベントのようですから、「さあ!そろそろ使おうか!」的な目線でセッションを受講出来たらよさそうです。

そして、来年の3月にはGAですね。来年のMicrosoft MVP Global Summitはどうかなー。現地開催できるような情勢だといいですね。

 

さて、みんな大好きuno platformもWinUI 3.0をサポートするそうです。

platform.uno

ということは、Desktop AppsとUWP Appsに加えて、Xamarin AppsもWin UIでUXプラットフォーム部分は共通化できそうですね。

https://s3.amazonaws.com/uno-website-assets/wp-content/uploads/2020/05/19120251/howitworks_new.png

 

 

WinUI 3.0ですがPreview 1はもう使えます。10月までの半年しかないですから、始めるには早すぎるってことはなさそうですよね。

microsoft.github.io

「英語」音声認識で都道府県わかるかな?

「英語」音声認識都道府県わかるかな?

英語ネイティブ発音じゃなくて、日本人の日本語発音で英語音声認識がどう認識するかを知ることは、私たちの日本語が英語圏の人たちにはどう聴こえるかを知る目安になります。
そこで、Azure Cognitive Servicesの「英語」音声認識都道府県わかるかな?をやってみたいと思います。

北海道 Hokkaido
青森 all Moody.
岩手 You out there?
宮城 Yeah.
秋田 Oct.
山形 Yamagata
福島 Fukushima
茨木 Ibaraki.
栃木 put it.
群馬 Goomba.
埼玉 sitamma.
千葉 T bar
東京 Tokyo.
神奈川 Kanagawa
新潟 Niigata
富山 Toy, Yama.
石川 Is covered.
福井 Quit.
山梨 Yeah, minus.
永野 Nagano
岐阜 he who?
静岡 She's OK.
愛知 Heights.
三重 Mia
滋賀 cigar.
京都 Kyoto
大阪 Osaka
兵庫 Hugel
奈良 Nara
和歌山 What I am.
鳥取 Put buddy.
島根 She money.
岡山 Oklahoma.
広島 Hiro Shima.
山口 Yamaguchi
徳島 Takashima,
香川 Cagua
愛媛 Hmm.
高知 Coach
福岡 Coca.
佐賀 Saga
長崎 Nagasaki.
熊本 Komodo.
大分 Order
宮崎 Music.
鹿児島 Cosima
沖縄 Okinawa.

意外ときちんと認識しているところ、確かにそう聴こえるところ、謎なところとありますね。
謎なところは、多分、私の発音がそもそも悪いというのもあるのかも。

でも、海外で「静岡」って言えば、「She's OK?」って聞こえるのは重宝しそうですね。
ということで、みなさんもためしてみてね。

New Cognitive Services capabilities are now generally available

Microsoft Build 2020のオンラインイベントが本日0時からスタートしました。

それに伴って、Cognitive ServicesもいろいろGA (generally available) がありますね。

音声認識関連をピックアップしてみましょう。

azure.microsoft.com

Quickly transcribe audio to text. Speech to Text is expanding to 27 new locales (coming soon), with 30 percent improvement in speech transcription accuracy.

音声テキスト変換の速度向上、27の新しい地域(これからのも含め)の追加、音声認識精度が30%向上などだそうです。

音声認識の対応地域って、この前まで30地域(言語的には21言語)だったと思うので、一気に倍近くになったのかな?

早速、ドキュメントをみてみましょう。

docs.microsoft.com

ドキュメントの更新日付見ると3月なんで、まだ、今回の発表分は反映されてないのかな?

ロケール一覧を抜き出してみると下記の様になります。

Locale Language  
ar-AE アラビア語 (UAE) [2019/10/22追加]
ar-BH アラビア語 (バーレーン) [2019/10/22追加]
ar-EG アラビア語 (エジプト)  
ar-KW アラビア語 (クウェート) [2019/10/22追加]
ar-QA アラビア語 (カタール) [2019/10/22追加]
ar-SA アラビア語 (サウジアラビア) [2019/10/22追加]
ar-SY アラビア語 (シリア) [2020/03/26追加]
ca-ES カタロニア語  
da-DK デンマーク語 (デンマーク)  
de-DE ドイツ語 (ドイツ)  
en-AU 英語 (オーストラリア)  
en-CA 英語 (カナダ)  
en-GB 英語 (イギリス)  
en-IN 英語 (インド)  
en-NZ 英語 (ニュージーランド)  
en-US 英語 (米国)  
es-ES スペイン語 (スペイン)  
es-MX スペイン語 (メキシコ)  
fi-FI フィンランド語 (フィンランド)  
fr-CA フランス語 (カナダ)  
fr-FR フランス語 (フランス)  
gu-IN グジャラート語 (インド) [2019/10/22追加]
hi-IN ヒンディー語 (インド)  
it-IT イタリア語 (イタリア)  
ja-JP 日本語 (日本)  
ko-KR 韓国語 (韓国)  
mr-IN マラーティー語 (インド) [2019/10/22追加]
nb-NO ノルウェー語 (ノルウェー)  
nl-NL オランダ語 (オランダ)  
pl-PL ポーランド語 (ポーランド)  
pt-BR ポルトガル語 (ブラジル)  
pt-PT ポルトガル語 (ポルトガル)  
ru-RU ロシア語 (ロシア)  
sv-SE スウェーデン語 (スウェーデン)  
ta-IN タミール語 (インド) [2019/10/22追加]
te-IN テルグ語 (インド) [2019/10/22追加]
th-TH タイ語 (タイ)  
tr-TR トルコ語 (トルコ) [2019/10/22追加]
zh-CN 中国語 (簡体字)  
zh-HK 中国語 (繁体字)  
zh-TW 中国語 (台湾)  

docsの変更履歴を見ても、2019/10/22にアラビア語ロケール増加、インドの言語の増加、トルコ語の追加があり、2020/3/26にアラビア語(シリア)が追加されていますが、まだ、今回のGAのが追加されてはいないのかな?

30地域(言語的には21言語)と思っていたけれど、現時点で、41地域(言語的には26言語)でした。そういえば、アラビア語は、ar-EGがMSA=Modan Standard Arabicだったのですが、2019/10/22の追加で、ar-BHの方に移ったみたいですね。

本日(2020/05/20)にアナウンスのあった27地域がどこなのか、どこが増えるのか楽しみですね。

 

Humans of IT Blogに寄稿しました

techcommunity.microsoft.com

Microsoftが最近取り組んでいるHumans of ITのブログにブログ記事を寄稿しました。

他のゲストブログの方が、困っている当事者である開発者がITで問題解決する内容なのでちょっとだけ異色かもしれませんが、音声認識アクセシビリティをブーストするよという取り組みの紹介となります。

お時間のある時にご一読いただけると幸いです。

Unityで作成したアプリをMicrosoftストアで配布するには

事前準備

Unityでビルドされるexe名は、あらかじめMicrosoft Storeで名前の予約をしておきます。

例)HoloLabStoreCheck2D 

Unityアプリ側での設定

Build Settingsを開いて、
Platformで「PC, Mac & Linux Standalone」を選択して、Target Platformに「Windows」を指定、Architectureは「x86_64」を選択します。
これで、配布ターゲットは、Windows 10 x64のみとなります。
必要なのはExeや実行に必要なDLLそしてデータですので、Create Visual Studio Solutionは不要です。

Player SettingでProduct Nameにストアで予約した名前にします。
「↓」タブの中のIconなど必要な設定をします。

BuildボタンとクリックしてExeの生成先をUnityのプロジェクトフォルダ配下(例:Buildフォルダ)に指定します。
以降の説明では、Unityプロジェクトフォルダ直下にBuildフォルダがあることを前提とします、

作成先のフォルダの内容を確認します。
例)
HoloLabStoreCheck2D.exe
UnityCrashHandler64.exe
UnityPlayer.dll
WinPoxEventRuntime.dll
HoloLabStoreCheck2D_Dataフォルダ
MonoBleedingEdgeフォルダ

Visual StudioWindowsアプリケーションパッケージプロジェクトを作成

Visusl Studioを立ち上げて、Windowsアプリケーションパッケージプロジェクトを新規作成します。
プロジェクト名は、UnityのExe名+AppPackageを推奨します(例:HoloLabStoreCheck2DAppPackage)
場所は、Unityプロジェクトフォルダを指定します(以降の説明は、この位置を指定している前提となります)。
「ソリューションとプロジェクトを同じディレクトリに配置する」チェックは外したままです。

ターゲットプラットフォームを指定します。UWPアプリケーションがサポートするとありますが気にしないで大丈夫です。
ターゲットバージョンは、できれば最新のバージョンを指定するのがいいでしょう。
最小バージョンはビルド14393(バージョン1607)以降を指定する必要があります。2020/04/30現在のWindows 10サポートは1803以降なので、1809以降を指定するのも1案です。
※LTSC/LTSBを考慮するならば、ビルド14393(バージョン1607)のLTSCの延長サポート終了日が2026/10/13なのでそれを最小バージョンとするという戦略もあります。

Unityで作成したexeを直接指定できないので中間プロジェクトを作成

次に、.NET Frameworkのコンソールアプリプロジェクトを追加します。
このあたりから正攻法から外れた邪法に突入しますので、本当はWindowsアプリケーションパッケージプロジェクトのテンプレートあたりでUnityアプリの配布もサポートしてくれるといいんじゃないかと思います。
プロジェクト名はUnityのExe名と必ず同じ(例:HoloLabStoreCheck2D)にします。

プロジェクトが追加されたらばVisual Studioの[ビルド]-[構成マネージャー]で

  • アクティブソリューション構成:Release
  • アクティブソリューションプラットフォーム:x64

を選択します。
そうするとコンソールアプリのプラットフォームが「Any CPU」のままなので、x64を追加して選択しておきます。

パッケージ対象のプロジェクトとして参照

 次にソリューションエキスポローラーで、Windowsアプリケーションパッケージプロジェクトの「アプリケーション」を右クリックして[参照の追加]で、追加したコンソールアプリケーションプロジェクトを参照します。

上記が完了したら、このあたりで、[ファイル]-[すべて保存]で、一度保存しておきましょう。

中間プロジェクトにUnityアプリの実行ファイルをコピー

コンソールアプリケーションプロジェクト名を右クリックして、[エクスプローラーでフォルダを開く]をします。
エキスプローラ―での表示例:

f:id:hatsune_a:20200430144100p:plain

このフォルダにUnityでビルドした中身を丸ごとコピーします。

f:id:hatsune_a:20200430144156p:plain

中間プロジェクトビルド時にUnityアプリの実行ファイルが使われるように調整

ソリューションエキスプローラ―でコンソールアプリケーションプロジェクト名を指定して[すべてのファイルを表示]します。
さらに
HoloLabStoreCheck2D_Dataフォルダ
MonoBleedingEdgeフォルダ
HoloLabStoreCheck2D.exe
UnityCrashHandler64.exe
UnityPlayer.dll
WinPixEventRuntime.dll
を選択して右クリックメニューで[プロジェクトに含める]をクリックします。

f:id:hatsune_a:20200430143941p:plain

これでUnityアプリが必要としているファイルやフォルダ構造がプロジェクトに取り込まれました。

更にプロジェクトに含めたexeやdll、フォルダ内のファイル全てのプロパティを次のように指定します。

  • ビルドアクション:なし
  • 出力ディレクトリにコピー:常にコピーする 

コンソールアプリをビルドします。

bin\x64\ReleaseフォルダにUnityのビルド先と同じファイル+若干のコンソール用ファイルが出力されているのが確認できると思います。

もし、bin\x64\Releaseフォルダではなくbin\Releaseフォルダに出力されていたらプラットフォームがAny CPUのままなので再確認をしてください。

この状態でexeファイルをダブルクリックして実行してもコンソールアプリが実行されます。
つまり、Unityで作成した実行ファイルとコンソールアプリケーションプロジェクトでビルドされるExe名が同じなので出力フォルダでは上書きされてしまうのです。

これを次に解決します。

中間プロジェクトビルド時で作成されたexeファイルをUnityアプリのexeファイルに変更

そこで、ソリューションエキスプローラーからコンソールアプリケーションプロジェクトのプロパティを開いて、[ビルドイベント]-「ビルド後イベントのコマンドライン」に以下をいれて、上書きされた本来のExeを更に本来のものに上書きし直します。

xcopy /Y "$(ProjectDir)$(TargetFileName)" "$(TargetDir)"
del /Q "$(TargetDir)$(TargetName).pdb"

再度、bin\x64\Releaseフォルダ上のexeを起動してみましょう。
作成したUnityアプリが起動するはずです。
無事に起動出来たらば、Windowsアプリケーションパッケージプロジェクトに情報を伝えるためのダミープロジェクトの構成がまずは完了しました。

Microsoft Storeに登録

ここから先は、WPFアプリなどをAppPackage化してMicrosoft Storeに登録するのと同じ流れになります。
身近に、Windows Phoneアプリ、Windows Storeアプリ、UWPアプリのストア配布経験者がいらっしゃるようであれば、ぜひ、その方に以降の手順を一読いただいて以降の説明をショートカットするチートルートを進んでいただければと思います。

Package.appxmanifestの編集(AppPackage化特有事項)

WindowsアプリケーションパッケージプロジェクトにあるPackage.appxmanifestをテキストエディタVisual Studio Codeで開くと下記の部分があります。
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
こちらからWindows.Universalの行を削除して保存しましょう。
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>

Package.appxmanifestの内容設定(UWPアプリと同等項目)

次にソリューションエキスプローラーでPackage.appxmanifestをダブルクリックして内容を編集します。
表示名は、元々とのExe名にAppPackageが付いた形になっているので適切な名前にします。

例:HoloLabStoreCheck2DAppPackage→HoloLabStoreCheck2D for Desktop

説明もきちんと記載しましょう。
パッケージ化のところにもパッケージ表示名があるのでそちらも同様(例:HoloLabStoreCheck2DAppPackage→HoloLabStoreCheck2D)に編集します。
[ビジュアル資産]のところにアプリのアイコン画像など必要な解像度のアイコンを作成します。
大きめのアイコンファイルを作成して、[生成]ボタンで一気に必要な解像度の画像を自動生成するのも良いでしょう。
アイコンは背景を透過pngにしておき、タイルの背景やスプラッシュスクリーンの背景に色を指定してください。
もしくは、アイコンのイメージ部分を白で作成し、背景指定色をtransparentを指定してシステムカラーを使うようにするのも、それっぽい感じの仕上げになります。

試しにローカルインストールを確認

コンソールアプリケーションプロジェクトを右クリックして[リビルド]します。
Windowsアプリケーションパッケージプロジェクトを右クリックして[配置]を実行します。
うまく配置がいけば、Windowsのスタートの中にアプリが出現します(例:HoloLabStoreCheck2D)。
配置したアプリを実行してUnityアプリが起動すれば、ストア登録前の確認は終了です。
忘れずにアンインストールして置きましょう。

Microsoft Storeに登録

Windowsアプリケーションパッケージプロジェクトを右クリック[公開]-[アプリパッケージの作成]をクリックします。
配布方法は、アプリ名は予約済ですが[新しいアプリ名でMicrosoft Storeに]を選択します。
ストアに登録するアカウントを追加して、[既存のアプリケーション名]リストから、事前に予約した名前を選択します。
バージョンは[自動的に増加]チェックは外して、アーキテクチャはx64のみチェックします。ソリューション構成も「Release (x64)」になっていることを確認して、[作成]をクリックします。
成功すれば次のような出力となります。

1>パッケージが正常に作成されました。
========== 公開: 1 正常終了、0 失敗、0 スキップ ==========
パッケージが Release (x64) 向けに正常にビルドされました。
========== パッケージ: 1 正常終了、0 失敗 ===========
アプリケーション バンドルが Release (x64) 向けに正常にビルドされました。
========== アプリケーション バンドル: 1 正常終了、 0 失敗 ===========  

出力先フォルダはプロジェクトフォルダ内のAppPackagesフォルダになります。この中にあるmsixuploadフォルダをストアに登録します。

例)HoloLabStoreCheck2DAppPackage_1.0.0.0_x64_bundle.msixupload  

ストア登録時の注意表示について(AppPackage化特有事項) 

Windowsアプリケーションパッケージプロジェクトは自動的にrunFullTrustがついているので下記の注意書き(次の制限された機能は、アプリで使用する前に承認が必要です)が表示されますが、気にしないで大丈夫です。

The following restricted capabilities require approval before you can use them in your app: runFullTrust. 

f:id:hatsune_a:20200430144332p:plain

 ストア登録自体は一般的なものと同じですが、申請オプションの項目にある制限付き機能については、下記のようなコメントを記載します。

デスクトップアプリのブリッジを使ったAppPackage化によるストア登録なのでrunFullTrustが必要です。
Because it is a store registration by AppPackage using the bridge of the desktop application, runFullTrust is necessary.

 あとは申請に提出してストアに公開されるのを待つだけです。

以前とは異なり数時間くらいで審査通過してストア公開フェーズになります。

ストア公開フェーズになってから実際に公開されるまで数時間待たされるので翌朝には公開されているかなくらいの感覚でいるとイライラしないでしょう。

もちろんストア公開なので有料アプリもサクッと指定ができてアプリ費用もMSさんが回収してくれる(マージンは取られるけれど)ので、これはっ!というUnityアプリを登録してみるのもいいでしょう!

プレゼンPCから配信PCへ映像を取り込むには

今回の.NETラボ勉強会で配信に使っていたHDMI→USB変換はこちらになります。

これを使って登壇者のPCから配信用のPCに映像を取り込んで(ついでに翻訳字幕合成して)配信というのを以前から行っておりまいた。

www.youtube.com

 

Xamarin.Androidで、Could not determine the installation pathというエラーがでたときの対処方法

XamarinでAndroidアプリを実機デプロイして試していたら、何かのタイミング(多分、実機で直接アプリをアンインストール)でビルドは成功するけれど

Could not determine the installation path com.companyname.programname

のようなエラーがでて実機デプロイができなくなりました。

AndroidManifest.xmlのなかのTYPOみたいな情報もあったのですが、今回のケースでは下記が原因でした。

個人用からはアプリをアンインストールしたけれど、仕事用の方からアンインストールしていなかった 

仕事用からもアンインストールすることで無事に実機デプロイが可能になりました。