
Un Fragment pour l'ajout de contrôle vocal via Spokestack à n'importe quelle application Android. Vous pouvez trouver une application de démonstration simple qui montre le plateau en action dans l' example de répertoire.
Lorsque vous ajoutez le fragment de plateau de spokestack à votre disposition, vous obtiendrez un bouton de microphone en forme de onglet sur le côté de l'écran ( de quel côté il appartient est à vous; Le taraudage ou le glissement de l'onglet révèle le reste du plateau, qui est organisé comme un flux de messagerie dans une application de chat. L'ouverture du plateau active le microphone, et tout ce que l'utilisateur dit sera envoyé via un service de reconnaissance vocale automatique (ASR) et affiché sous forme de texte. Ce texte est ensuite envoyé à un modèle de compréhension du langage naturel (NLU) pour la classification. Les résultats de la classification sont envoyés au composant d'application que vous avez établi pour écouter les événements du plateau, qui peuvent produire une réponse que le plateau affichera et lira à l'utilisateur via le service de synthèse de texte à la vitesse (TTS) de Spokestack (TTS). Le microphone sera réactivé si la réponse de l'application le dirige vers; Sinon, le plateau ferme et désactivera ASR.
Et juste comme ça, vous avez ajouté la voix à votre application!

Oh, et après cette interaction initiale, le plateau peut être ouvert avec un wakeword au lieu d'un robinet. Le wakeword est "Spokestack" par défaut, mais cela peut être personnalisé.
Si une partie de cela n'avait pas de sens, ne croyez pas! Lisez la suite et nous couvrirons tous les détails ci-dessous.
Remarque : le plateau de Spokestack était hébergé sur JCenter, mais depuis l'annonce de son arrêt, nous avons déménagé la distribution à Maven Central. Veuillez vous assurer que votre fichier build.gradle au niveau de la racine comprend mavenCentral() dans son bloc repositories afin d'accéder aux versions> = 0.4.1.
Assurez-vous que vous utilisez la version 0.4.2 ou supérieure pour résoudre correctement la dépendance à la bibliothèque Core Spokestack après que JCenter soit inaccessible.
Par défaut, Spokestack Tray gère ASR, NLU et TTS pour les interactions vocales avec les utilisateurs - qui convertit leur voix en texte, traitant ce texte pour produire une action et synthétisant la réponse de l'application à lire à l'utilisateur. Pour plus d'informations sur ces fonctionnalités, consultez les documents Spokestack.
Pour utiliser NLU et TTS, vous aurez besoin d'un compte SpokEstack gratuit. À partir de votre page de compte, vous pourrez créer et télécharger des modèles NLU; et l'ID client et la clé secrète sont nécessaires au moment de l'exécution pour les demandes TTS.
Tout d'abord, ajoutez la dépendance à build.gradle de votre application (vérifiez le badge JCenter ci-dessus pour la dernière version):
implementation ' io.spokestack:tray:0.4.1 ' Comme mentionné ci-dessus, le plateau Spokestack est mis en œuvre comme un Fragment qui rend au-dessus de votre Activity existante et gère l'interaction vocale, vous voudrez donc l'ajouter à la disposition de votre activité:
<!-- nested in the main layout, after other views/sublayouts -->
< include
android : id = " @+id/tray_fragment "
layout = " @layout/spokestack_tray_fragment "
/> Remarque : Selon la disposition de votre application, vous devrez peut-être également ajouter android:clipChildren="false" à la mise en page des parents du fragment pour éviter que l'onglet microphone ne disparaisse à l'ouverture du plateau.
Ensuite, faites de votre activité elle-même étendre TrayActivity (une sous-classe d' AppCompatActivity ), implémentez les méthodes dont il a besoin, et la bibliothèque s'occupera du reste.
Si vous préférez faire la configuration vous-même, voici un échantillon qui n'utilise pas 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()
} Lorsque vous téléchargez des modèles Spokestack Wakeword ou NLU, vous aurez plusieurs URL dans différents fichiers. wakewordModelURL et nluURL ci-dessus ne nécessitent que le chemin d'accès au répertoire pertinent, et non des URL de fichier complet. Donc, pour la démo "SpokeStack" Wakeword, définissez wakewordModelURL sur "https://d3dmqd7cy685il.cloudfront.net/model/wake/spokestack/".
Le plateau est conçu pour une utilisation transparente entre les activités - par exemple, pour permettre à un utilisateur de continuer à donner une commande vocale pendant que l'application change les activités - de sorte que son état est stocké en dehors du fragment lui-même et survit à la destruction du fragment. Si votre application doit libérer les ressources détenues par le plateau et son instance Spokestack sous-jacente, appelez la méthode stop() du plateau. Si vous devez ensuite réactiver le contrôle vocal avant que l'instance de fragment de plateau actuel ne soit détruite, vous devez appeler start() .
Si vous souhaitez garder l'état du plateau intact après la mort du processus, vous pouvez le stocker dans les méthodes onSaveInstanceState de son activité parentale et onRestoreInstanceState en utilisant les méthodes getState() et loadState() du plateau; Voir leur documentation pour plus de détails.
Il y a de fortes chances que si vous permettez à l'utilisateur de parler à votre application, vous voulez que l'application revienne. Le plateau est intégré au service TTS de Spokestack, donc la synthèse de l'audio est tout aussi simple que la transcription.
Lorsque vous prolongez TrayActivity , l'une des méthodes que vous devrez implémenter est getTrayListener() , qui crée et renvoie un SpokestackTrayListener . Cette interface aide votre application à réagir aux événements reçus et produits par le plateau. Parce que chaque cas d'utilisation est unique, toutes ses méthodes sont facultatives; Celui qui nous intéresse ici est onClassification . Cette méthode est appelée après que le discours d'un utilisateur a été transcrit par ASR et classé par NLU. Il fournit votre application avec le résultat NLU et vous demande de retourner une réponse:
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 )
}
} Le deuxième paramètre facultatif dans le constructeur VoicePrompt permet au plateau de savoir si vous vous attendez à une réponse - si vous l'êtes, il reprendra une écoute active après la lecture de votre invite afin que l'utilisateur n'ait pas à utiliser le wakeword ou un bouton pour chaque interaction.
L'échantillon ci-dessus vous fera fonctionner avec un minimum d'agitation, mais c'est loin de tout ce que le plateau Spokestack propose. Lorsque vous construisez une instance TrayConfig , vous pouvez choisir de configurer et de fournir le constructeur Spokestack sous-jacent lui-même. Cela vous permettra de faire des choses comme modifier les fournisseurs ASR, de configurer des auditeurs personnalisés pour les événements de systèmes individuels et d'ajouter des composants de traitement de la parole personnalisés si vous en avez besoin. Vous pouvez lire le constructeur de spokestack ici.
Il existe également une gamme d'options applicables au plateau lui-même, accessible via des méthodes d'assistance sur l'instance TrayConfig.Builder . La description de chacun ici rendrait ce réadme ... cependant, alors consultez la documentation pour plus de détails. La documentation sur TrayConfig.Builder est [ici] (https://spokestack.github.io/spokestack-tray-android/-pokestack-tray/io.spokestack.tray/-tray-config/-builder*.
La plupart des aspects de l'interface utilisateur du plateau peuvent être personnalisés. Souvent, cela est accompli en XML en remplaçant des valeurs définies dans la bibliothèque.
Une exception à cela est l'orientation du plateau: son bouton de microphone apparaît par défaut comme une onglet orientée vers la droite du côté lefthand de l'écran, le plateau glissant par conséquent depuis la gauche. Il soutient également une orientation droite mais nécessite deux modifications pour ce faire:
.orientation(TrayConfig.Orientation.RIGHT) SUR LE BUILDER TrayConfig Avant de construire la configuration.< 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 " /> Nous n'avons besoin que de la dernière contrainte ici; Les autres attributs sont identiques à la disposition de la source. Étant donné que nous utilisons, cependant, le include d'un attribut signifie le remplacer tous; Voir la note à la fin du paragraphe ici.
Les personnalisations d'interface utilisateur basées sur la valeur sont répertoriées ci-dessous. Les noms de fichiers indiquent ici les définitions d'origine dans le dossier res/values de la bibliothèque, mais les remplacements peuvent être définis ailleurs dans votre projet. L'exemple de l'application illustre cela en remplaçant la couleur du texte pour les messages système dans res/values/custom_colors.xml .
colors.xmlspsk_colorTrayBg : La couleur d'arrière-plan utilisée pour le flux de messages du plateau.spsk_colorIcon : La couleur de premier plan utilisée pour les icônes qui doivent contraster avec spsk_colorBrand . Par défaut est blanc.spsk_colorDragHandle : La couleur utilisée pour la poignée de traînée de redimensionnement du plateau.spsk_colorBrand : La couleur principale des éléments d'interface utilisateur comme le bouton Microphone et les icônes sans fond.spsk_colorListenText : La couleur utilisée pour le texte dans la bulle "d'écoute".spsk_colorSystemText : La couleur utilisée pour le texte dans les bulles de message système.spsk_colorUserText : La couleur utilisée pour le texte dans les bulles de message utilisateur.spsk_colorSystemBg : La couleur d'arrière-plan utilisée pour les bulles de message système.spsk_colorUserBg : La couleur d'arrière-plan utilisé pour les bulles de message utilisateur.spsk_colorGradientOne : La couleur de démarrage utilisée pour l'animation de gradient d'écoute. Par défaut à spsk_colorBrand .spsk_colorGradientEnd : La couleur finale utilisée pour l'animation de gradient d'écoute.spsk_colorTransparent : couleur transparente utilisée comme teinte d'arrière-plan pour la flèche "arrière" sur le plateau.dimens.xmlspsk_micTabWidth : Largeur pour le bouton Tab Microphone. Par défaut à 60dp .spsk_micTabHeight : Hauteur pour le bouton Microphone Tab. Par défaut, 80dp et doit être conservé dans un rapport 4: 3 avec spsk_micTabWidth .spsk_listenBubbleWidth : Largeur pour la bulle d'écoute qui apparaît pendant ASR. Par défaut, 120dp et doit être conservé dans un rapport 2: 1 avec spsk_listenBubbleHeight .spsk_listenBubbleHeight : hauteur pour la bulle d'écoute qui apparaît pendant ASR. Par défaut à 60dp .spsk_messageStreamHeight : hauteur de démarrage pour le flux de messages à l'intérieur du plateau. Par défaut à 100dp .spsk_messageStreamMinHeight : Hauteur minimale à laquelle le plateau peut être redimensionné par traînée. Par défaut à 80dp .ints.xmlspsk_trayAnimateMs : La durée, en millisecondes, le plateau prend pour ouvrir ou fermer. Par défaut à 500 .strings.xmlspsk_listening : Le texte affiché dans le plateau lors de l'écoute active (ASR). Par défaut "LISTENING" .styles.xmlspsk_messageFont : La famille de polices a utilisé pour afficher les transcriptions ASR et les messages système dans le plateau. Par défaut sans-serif (Roboto). Copyright 2020 Spokestack, Inc.
Licencié sous la licence Apache, version 2.0 (la "licence"); Vous ne pouvez pas utiliser ce fichier sauf conforme à la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf exiger la loi applicable ou convenu par écrit, les logiciels distribués en vertu de la licence sont distribués sur une base «tel quel», sans garantie ou conditions d'aucune sorte, expresse ou implicite. Voir la licence pour la langue spécifique régissant les autorisations et les limitations sous la licence.