
AndroidアプリにSpokeStackを介して音声制御を追加するためのFragment 。 exampleディレクトリで動作中のトレイを表示する簡単なデモアプリを見つけることができます。
スポークスタックトレイフラグメントをレイアウトに追加すると、画面の側面にあるタブのような形状のマイクボタンが表示されます(これはあなた次第です。後で詳しく説明します)。タブをタップまたはドラッグすると、チャットアプリのメッセージングストリームのように配置されている残りのトレイが明らかになります。トレイを開くとマイクがアクティブになり、ユーザーが言うものはすべて、自動音声認識(ASR)サービスを通じて送信され、テキストとして表示されます。そのテキストは、分類のために自然言語理解(NLU)モデルに送信されます。分類の結果は、トレイからイベントを聴くために確立したアプリケーションコンポーネントに送信されます。これにより、トレイがSpokeStackのテキストツースピーチ(TTS)合成サービスを介してユーザーに表示および読み取りの両方がユーザーに表示されるという応答が生成されます。アプリの応答がそれを指示する場合、マイクは再保証されます。それ以外の場合、トレイはASRを閉じて無効にします。
そしてそのように、あなたはあなたのアプリに音声を追加しました!

ああ、その最初の相互作用の後、トレイはタップの代わりにウェイクワードで開くことができます。ウェイクワードはデフォルトでは「SpokeStack」ですが、カスタマイズできます。
その一部が意味をなさないなら、恐れないでください!先に読んでください。以下のすべての詳細について説明します。
注:SpokeStackトレイはJCenterでホストされていましたが、中止の発表以来、Maven Centralに配布を移動しました。ルートレベルのbuild.gradleファイルには、バージョン> = 0.4.1にアクセスするために、そのrepositoriesブロックにmavenCentral()が含まれていることを確認してください。
JCenterがアクセスできなくなった後、コアスポークスタックライブラリへの依存関係を適切に解決するために、バージョン0.4.2以上を使用していることを確認してください。
デフォルトでは、SpokeStack Trayは、ユーザーとの音声インタラクションのためにASR、NLU、およびTTSを処理します。それは音声をテキストに変換し、そのテキストを処理してアクションを作成し、ユーザーに読み戻すアプリの応答を合成します。これらの機能の詳細については、SpokeStack Docsを参照してください。
NLUおよびTTSを使用するには、無料のSpokeStackアカウントが必要です。アカウントページから、NLUモデルを作成およびダウンロードできます。また、TTSリクエストの実行時にクライアントIDとシークレットキーが必要です。
ただし、最初に、アプリのbuild.gradleに依存関係を追加します(上記のJCenterバッジを最新バージョンについては確認してください):
implementation ' io.spokestack:tray:0.4.1 '上記のように、SpokeStackトレイは、既存のActivityの上にレンダリングし、音声相互作用を処理するFragmentとして実装されているため、アクティビティのレイアウトに追加する必要があります。
<!-- nested in the main layout, after other views/sublayouts -->
< include
android : id = " @+id/tray_fragment "
layout = " @layout/spokestack_tray_fragment "
/>注:アプリのレイアウトに応じて、 android:clipChildren="false"フラグメントの親レイアウトに追加する必要があります。トレイが開くとマイクタブが消えることを避けます。
次に、アクティビティ自体にTrayActivity ( AppCompatActivityのサブクラス)を拡張し、必要な方法を実装すると、ライブラリが残りを処理します。
自分でセットアップを行いたい場合は、 TrayActivityを使用しないサンプルを次に示します。
import io.spokestack.tray.*
class MyActivity : AppCompatActivity (), SpokestackTrayListener {
lateinit var tray : SpokestackTray
// ...
override fun onCreate ( savedInstanceState : Bundle ? ) {
val config = TrayConfig . Builder ()
// credentials from your Spokestack account
.credentials( " spokestack-client-id " , " spokestack-secret-key " )
.wakewordModelURL( " https://path-to-wakeword-models " )
.nluURL( " https://path-to-nlu-files " )
// note the implementation of `SpokestackTrayListener` in the class declaration
.withListener( this )
// optional builder customization; see the documentation for more details...
.build()
supportFragmentManager.fragmentFactory = SpokestackTrayFactory (config)
// note that the factory is instantiated and set on the manager BEFORE calling
// `super.onCreate()`
super .onCreate(savedInstanceState)
}
override fun onStart () {
// set the value of the lateinit `tray` var
tray = SpokestackTray .getInstance(config)
super .onStart()
} SpokeStack WakewordまたはNLUモデルをダウンロードすると、異なるファイルにいくつかのURLがあります。上記のwakewordModelURLとnluURL 、完全なファイルURLではなく、関連するディレクトリへのパスのみが必要です。したがって、デモ「Spokestack」Wakewordについては、 wakewordModelURLを「https://d3dmqd7cy685il.cloudfront.net/model/wake/spokestack/」に設定します。
このトレイは、アクティビティ全体でシームレスに使用するように設計されています。たとえば、アプリがアクティビティを切り替えている間にユーザーが音声コマンドを提供し続けることができるように、その状態はフラグメント自体の外側に保存され、フラグメント破壊に耐えます。アプリがトレイとその基礎となるSpokestackインスタンスが保有するリソースをリリースする必要がある場合は、Tray's stop()メソッドを呼び出します。現在のトレイフラグメントインスタンスが破壊される前に、音声コントロールを再度に容易にする必要がある場合は、 start()を呼び出す必要があります。
プロセスの死後、トレイ状態をそのままにしたい場合は、トレイのgetState()およびloadState()メソッドを使用して、親アクティビティのonSaveInstanceStateおよびonRestoreInstanceStateメソッドに保存できます。詳細については、ドキュメントをご覧ください。
ユーザーがアプリに話しかけることを許可している場合、アプリに話しかけることができます。トレイはSpokeStackのTTSサービスと統合されているため、オーディオの合成は、転写と同じくらい簡単です。
TrayActivityを拡張すると、実装しなければならない方法の1つはSpokestackTrayListener getTrayListener()です。このインターフェイスは、トレイによって受信および生成されたイベントにアプリが反応するのを支援します。各ユースケースは一意であるため、すべての方法はオプションです。ここで私たちが興味を持っているのはonClassificationです。この方法は、ユーザーのスピーチがASRによって転写され、NLUによって分類された後に呼び出されます。アプリにNLUの結果を提供し、応答を返すように求めます。
override fun onClassification ( result : NLUResult ): VoicePrompt {
return if (result.intent == " your-special-intent " ) {
VoicePrompt ( " I hear you loud and clear " )
} else {
VoicePrompt (
" Sorry; I didn't catch that " ,
expectFollowup = true )
}
} VoicePromptコンストラクターのオプションの2番目のパラメーターは、応答を期待しているかどうかをトレイに知らせます。ユーザーがプロンプトが再生された後にアクティブなリスニングを再開して、ユーザーがウェイクワードまたは各インタラクションにボタンを使用する必要がないようにします。
上記のサンプルでは、最小限の大騒ぎで稼働しますが、Spokestack Trayが提供するすべてのものとはほど遠いものです。 TrayConfigインスタンスを構築するときは、基礎となるSpokestack Builder自体を構成して提供することを選択できます。これにより、ASRプロバイダーの変更、個々のシステムからのイベントのカスタムリスナーを設定し、必要に応じてカスタム音声処理コンポーネントを追加できます。 Spokestack Builderについては、こちらをご覧ください。
トレイ自体に適用できるさまざまなオプションもあります。これは、 TrayConfig.Builderインスタンスのヘルパーメソッドを介してアクセスできます。ここでそれぞれを説明すると、この読み取りがあります...しかし、詳細についてはドキュメントをご覧ください。 TrayConfig.Builderのドキュメントは[here](https://spokestack.github.io/spokestack-tray-android/spokestack-tray/io.spokestack.tray/-tray-config/-builder**です。
トレイのUIのほとんどの側面をカスタマイズできます。多くの場合、これはライブラリに設定された値をオーバーライドすることにより、XMLで達成されます。
これの1つの例外は、トレイの向きです。マイクボタンは、画面の左側にある右向きのタブとして表示され、その結果トレイが左からスライドすることになります。また、右側の向きをサポートしていますが、そうするためには2つの変更が必要です。
TrayConfigビルダーに.orientation(TrayConfig.Orientation.RIGHT)を呼び出します。< include
layout = " @layout/spokestack_tray_fragment "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
app : layout_constraintBottom_toBottomOf = " parent "
app : layout_constraintEnd_toEndOf = " parent " />ここでは最後の制約のみが必要です。残りの属性は、ソースレイアウトと同じです。ただし、 includeしているため、1つの属性をオーバーライドすることは、それらすべてを無効にすることを意味します。こちらの段落の最後にあるメモを参照してください。
値ベースのUIカスタマイズを以下に示します。ここでのファイル名は、ライブラリのres/valuesフォルダーの元の定義を指していますが、プロジェクトの他の場所では交換が定義できます。例アプリはres/values/custom_colors.xmlのシステムメッセージのテキスト色をオーバーライドすることにより、これを示しています。
colors.xmlspsk_colorTrayBg :トレイのメッセージストリームに使用される背景色。spsk_colorIcon : spsk_colorBrandと対照する必要があるアイコンに使用される前景色。デフォルトは白です。spsk_colorDragHandle :トレイのサイズ変更ドラッグハンドルに使用される色。spsk_colorBrand :マイクボタンや背景のないアイコンなどのUI要素の主要な色。spsk_colorListenText :「リスニング」バブルのテキストに使用される色。spsk_colorSystemText :システムメッセージバブルのテキストに使用される色。spsk_colorUserText :ユーザーメッセージバブルのテキストに使用される色。spsk_colorSystemBg :システムメッセージバブルに使用される背景色。spsk_colorUserBg :ユーザーメッセージバブルに使用される背景色。spsk_colorGradientOne :リスニンググラデーションアニメーションに使用される開始色。デフォルトはspsk_colorBrandです。spsk_colorGradientEnd :リスニンググラデーションアニメーションに使用される最終色。spsk_colorTransparent :トレイ上の「背面」矢印の背景色として使用される透明な色。dimens.xmlspsk_micTabWidth :マイクの幅タブボタン。デフォルトは60dpです。spsk_micTabHeight :マイクの高さタブボタン。デフォルトは80dpで、 spsk_micTabWidthで4:3の比率に保つ必要があります。spsk_listenBubbleWidth :asr中に表示されるリスニングバブルの幅。デフォルトは120dpになり、 spsk_listenBubbleHeightで2:1の比率に保持する必要があります。spsk_listenBubbleHeight :ASR中に表示されるリスニングバブルの高さ。デフォルトは60dpです。spsk_messageStreamHeight :トレイ内のメッセージストリームの起動高さ。デフォルトは100dpです。spsk_messageStreamMinHeight :ドラッグでトレイをサイズ変更できる最小高さ。デフォルトは80dpです。ints.xmlspsk_trayAnimateMs :ミリ秒単位での時間、トレイが開閉にかかる。デフォルトは500です。strings.xmlspsk_listening :アクティブリスニング中にトレイに表示されるテキスト(ASR)。デフォルトは"LISTENING"になります。styles.xmlspsk_messageFont :TrayにASRトランスクリプトとシステムメッセージを表示するために使用されるフォントファミリー。デフォルトはsans-serif (roboto)になります。 Copyright 2020 Spokestack、Inc。
Apacheライセンス、バージョン2.0(「ライセンス」)に基づいてライセンスされています。ライセンスに準拠している場合を除き、このファイルを使用することはできません。ライセンスのコピーを取得できます
http://www.apache.org/licenses/LICENSE-2.0
適用法で要求されていないか、書面で合意されていない限り、ライセンスに基づいて配布されたソフトウェアは、明示または黙示のいずれかの保証または条件なしに、「現状のまま」に基づいて配布されます。ライセンスに基づく権限と制限を管理する特定の言語のライセンスを参照してください。