はじめて Cortana に対応してみたアプリです。
概要
- IkaConnect での使用例
- Cortana で使えるキーワード
- まとめ
1. IkaConnect での使用例
とりあえず IkaConnect での実際のサンプルを見てください。
※ この動画は開発中のものであり実際の製品のものと一部異なる部分があります。
Cortana さんに Splatoon のステージを問いかけたときのレスポンスを動画にしてみました! #ikaconnect pic.twitter.com/5XZi20f0Vn
— monotone (@mntone) 2016年1月6日
Cortana のビルトイン UI に表示しています。ステージをクリックすると IkaConnect のフォアグラウンド化を行います。
まあそんな感じ。ビルトイン UI じゃなくても直接アプリを起動するという方法もあります。
2. Cortana で使えるキーワード
Cortana で使える音声認識キーワードには制約があります。
まず (1) アプリ名が含まれていること、です。これはかなり大きい。例えば、“IkaConnect で”と音声認識には必ずこのワードが必要… じゃないと端末がうまく解析できないっぽいです。あくまでひな形に合わせて認識させるというわけです。
ほかにも (2) 知識ベースの言葉を計算機が識別可能な語彙に変換する機構の自前実装が必要、というのもあります。これが結構厄介だった。自分の場合、言語ごとに知識ベースの json を用意して、それを OS が適切にロードして、そしてその知識ベースと音声入力された語彙を照らし合わせて内部型に変換するという方法をとっています。この辺りはまだどうするのがベストかわかりませんが、できれば、Item
要素に対して、Tag
なんか設定できればこんな情報変換を自前で実装しなくても行けるのですが… という感じでした。
以下に IkaConnect で使った Cortana の VCD 定義 xml の日本語部分だけ貼っておきます。Mit license でお願いします。
<?xml version="1.0" encoding="utf-8"?> <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1"> <CommandSet xml:lang="ja-jp" Name="StageCommandSet_ja-jp"> <AppName>IkaConnect</AppName> <Example>現在のガチマッチのステージを表示</Example> <Command Name="showStage"> <Example>ガチマッチのステージを表示</Example> <ListenFor>{mode}[のステージ]を表示</ListenFor> <ListenFor RequireAppName="ExplicitlySpecified">{builtin:AppName}で{mode}[のステージ]を表示</ListenFor> <Feedback>{mode}のステージを表示しています</Feedback> <VoiceCommandService Target="CortanaService" /> </Command> <Command Name="showStageWithTime"> <Example>現在のガチマッチのステージを表示</Example> <ListenFor>{time}の{mode}[のステージ]を表示</ListenFor> <ListenFor RequireAppName="ExplicitlySpecified">{builtin:AppName}で{time}の{mode}[のステージ]を表示</ListenFor> <Feedback>{time}の{mode}のステージを表示しています</Feedback> <VoiceCommandService Target="CortanaService" /> </Command> <PhraseList Label="time"> <Item>現在</Item> <Item>次</Item> </PhraseList> <PhraseList Label="mode"> <Item>レギュラー</Item> <Item>ナワバリ</Item> <Item>ガチ</Item> <Item>レギュラーマッチ</Item> <Item>ナワバリバトル</Item> <Item>ガチマッチ</Item> <Item>レート戦</Item> </PhraseList> </CommandSet> </VoiceCommands>
ここで見てもらうとわかるのですが、params は省略記号を含めることができません。つまり [{time}の]
みたいな定義は不可能です。ほかにも PhraseList は省略記号不可能なので別途定義する必要があります。
ざっとこんな感じです☻
3. まとめ
はじめて対応してみましたが思ったより認識がすごいなって感じです。定型文に当てはめている、ってのはありますが、英語日本語数字ローマ字混合のものをちゃんと発話できたりするあたり、音声合成機能もよくできていると思いますし、このあたりはさすが MS といったところでしょうか。
IkaConenct でいえば「Bバスパーク」をちゃんと「びーばすぱーく」と呼んでくれます。このあたりいろいろと面白いので、興味ある人は Cortana の VCD 定義で遊んでみてはいかがでしょうか?
本日の Cortana トピックは以上です。少しでも開発の参考になるとうれしいです。
なお、IkaConnect for Windows/Phone 8.1 1.1.1.10 も同時にリリースです。現在審査中です。また IkaConnect for UWP 2.1.9 は現在 (記述時) Windows ストアで ¥600 で配信中です。