
Ein Fragment zum Hinzufügen von Sprachsteuerung über Spokestack zu jeder Android -App. Sie finden eine einfache Demo -App, die das Tablett in Aktion im example anzeigt.
Wenn Sie das Spokestack -Tablettfragment zu Ihrem Layout hinzufügen, erhalten Sie eine Mikrofontaste, die wie eine Registerkarte auf der Seite des Bildschirms geformt ist ( auf welcher Seite liegt es auf Ihnen; dazu später mehr). Wenn Sie auf die Registerkarte tippen oder ziehen, wird der Rest des Tabletts angezeigt, das wie ein Messaging -Stream in einer Chat -App angeordnet ist. Das Öffnen des Tabletts aktiviert das Mikrofon, und alles, was der Benutzer sagt, wird über einen automatischen Spracherkennungsdienst (ASR) gesendet und als Text angezeigt. Dieser Text wird dann zur Klassifizierung an ein natürliches Sprachverständnis (NLU) -Modell gesendet. Die Ergebnisse der Klassifizierung werden an die Anwendungskomponente gesendet, die Sie erstellt haben, um Ereignisse aus dem Tablett anzuhören. Dies kann eine Antwort erstellen, die das Tablett sowohl über den Synthesedienst von Spokestacks Text-to-Speech (TTS) angezeigt als auch dem Benutzer vorgelesen wird. Das Mikrofon wird neu vermittelt, wenn die Antwort der App es an widmet. Andernfalls schließt und deaktiviert das Tablett ASR.
Und so haben Sie Ihrer App Voice hinzugefügt!

Oh, und nach dieser anfänglichen Interaktion kann das Tablett mit einem Wakeword anstelle eines Tipps geöffnet werden. Das Wakeword ist standardmäßig "Spokestack", aber das kann angepasst werden.
Wenn ein Teil davon keinen Sinn ergab, fürchten Sie sich nicht! Lesen Sie weiter, und wir werden alle Details unten abdecken.
HINWEIS : Das Spokestack -Tray wurde früher auf JCenter gehostet, aber seit der Ankündigung seiner Absaltung haben wir die Verteilung in Maven Central verlegt. Bitte stellen Sie sicher, dass Ihre Root-Level build.gradle Datei mavenCentral() in seinen repositories -Block enthält, um auf Versionen> = 0,4.1 zuzugreifen.
Stellen Sie sicher, dass Sie Version 0.4.2 oder höher verwenden, um die Abhängigkeit von der Core Spokestack -Bibliothek ordnungsgemäß zu beheben, nachdem JCenter nicht zugänglich ist.
Standardmäßig verarbeitet das Spokestack -Tray ASR, NLU und TTS für Sprachinteraktionen mit Benutzern. Das konvertiert ihre Stimme in Text, verarbeitet diesen Text, um eine Aktion zu erzeugen, und synthetisiert die Antwort der App, um dem Benutzer zurückgelesen zu werden. Weitere Informationen zu diesen Funktionen finden Sie in den Spokestack -Dokumenten.
Um NLU und TTS zu verwenden, benötigen Sie ein kostenloses Spokestack -Konto. Auf Ihrer Kontoseite können Sie NLU -Modelle erstellen und herunterladen. Die Client -ID und der geheime Schlüssel werden zur Laufzeit für TTS -Anfragen benötigt.
Fügen Sie zunächst jedoch die Abhängigkeit zum build.gradle Ihrer App hinzu. Gradle (überprüfen Sie das obige JCenter -Abzeichen für die neueste Version):
implementation ' io.spokestack:tray:0.4.1 ' Wie oben erwähnt, wird das Spokestack -Tray als Fragment implementiert, das sich über Ihre vorhandene Activity überträgt und die Sprachinteraktion verarbeitet. Sie sollten es dem Layout Ihrer Aktivität hinzufügen:
<!-- nested in the main layout, after other views/sublayouts -->
< include
android : id = " @+id/tray_fragment "
layout = " @layout/spokestack_tray_fragment "
/> Hinweis : Abhängig von Ihrem App -Layout müssen Sie möglicherweise auch android:clipChildren="false" dem übergeordneten Layout des Fragments, um zu vermeiden, dass das Mikrofon -Registerkarte beim Öffnen des Tabletts verschwindet.
Lassen Sie Ihre Aktivität selbst TrayActivity (eine Unterklasse von AppCompatActivity ) erweitern, die erforderlichen Methoden implementieren, und die Bibliothek kümmert sich um den Rest.
Wenn Sie es vorziehen möchten, das Setup selbst durchzuführen, finden Sie hier ein Beispiel, das keine TrayActivity verwendet:
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()
} Wenn Sie Spokestack Wakeword- oder NLU -Modelle herunterladen, haben Sie mehrere URLs in verschiedene Dateien. wakewordModelURL und nluURL oben erfordern nur den Pfad zum entsprechenden Verzeichnis, nicht zum vollständigen Datei -URLs. Setzen Sie wakewordModelURL für das Demo "Spokestack" Wakeword auf "https://d3dmqd7cy685il.cloudfront.net/model/wake/spokestack/".
Das Tablett ist für den nahtlosen Gebrauch über Aktivitäten hinweg konzipiert - zum Beispiel, um einem Benutzer weiterhin einen Sprachbefehl zu geben, während die App die Aktivitäten wechselt - so wird sein Zustand außerhalb des Fragments selbst gespeichert und überlebt die Fragmentzerstörung. Wenn Ihre App Ressourcen veröffentlichen muss, die vom Tablett und der zugrunde liegenden Spokestack -Instanz gehalten werden, rufen Sie die stop() -Methode des Tablys an. Wenn Sie dann die Sprachregelung erneut unterhalten müssen, bevor die aktuelle Instanz der Tablettfragment zerstört wird, müssen Sie start() anrufen.
Wenn Sie nach getState() Tod des Verfahrens intakt bleiben möchten, können Sie ihn in den Methoden der übergeordneten Aktivitäten auf den onSaveInstanceState und onRestoreInstanceState loadState() aufbewahren. Weitere Informationen finden Sie in der Dokumentation.
Wenn Sie dem Benutzer erlauben, mit Ihrer App zu sprechen, möchten Sie, dass die App zurückgesprochen wird. Das Tray ist in den TTS -Service von Spokestack integriert, sodass das Synthesizing von Audio genauso einfach ist wie die Transkription.
Wenn Sie TrayActivity erweitern, ist eine der Methoden, die Sie implementieren müssen, getTrayListener() , der einen SpokestackTrayListener erstellt und zurückgibt. Diese Schnittstelle unterstützt Ihre App bei der Reaktion auf Ereignisse, die vom Tablett erhalten und erzeugt werden. Da jeder Anwendungsfall eindeutig ist, sind alle seine Methoden optional. Das, an dem wir hier interessiert sind, ist onClassification . Diese Methode wird aufgerufen, nachdem die Rede eines Benutzers von ASR transkribiert und von NLU klassifiziert wurde. Es liefert Ihre App mit dem NLU -Ergebnis und fordert Sie auf, eine Antwort zurückzugeben:
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 )
}
} Mit dem optionalen zweiten Parameter im VoicePrompt -Konstruktor können Sie das Taplett wissen, ob Sie eine Antwort erwarten. Wenn dies der Fall ist, wird das aktive Zuhören nach dem Spielen der Eingabeaufforderung fortgesetzt, sodass der Benutzer für jede Interaktion das Wakeword oder eine Taste nicht verwenden muss.
Das obige Beispiel wird Sie mit minimaler Aufregung zum Laufen bringen, aber es ist alles andere als all das Angebot von Spokestack -Tablett. Wenn Sie eine TrayConfig -Instanz erstellen, können Sie den zugrunde liegenden Spokestack -Builder selbst konfigurieren und bereitstellen. Auf diese Weise können Sie Dinge wie Änderungen von ASR -Anbietern tun, benutzerdefinierte Hörer für Ereignisse aus einzelnen Systemen einrichten und bei Bedarf benutzerdefinierte Sprachverarbeitungskomponenten hinzufügen. Hier können Sie über den Spokestack -Bauunternehmer lesen.
Es gibt auch eine Reihe von Optionen, die für das Tablett selbst anwendbar sind und über Helfermethoden auf der Instanz TrayConfig.Builder zugänglich sind. Wenn Sie jeden hier beschreiben, würde diese Readme jedoch schwerfällig werden. Schauen Sie sich also die Dokumentation an, um weitere Details zu erhalten. Dokumentation zu TrayConfig.Builder ist [hier] (https://spokestack.github.io/spokestack-tray-android/-spokestack-tray/io.spokestack.tray/-tray-config/-builder**.
Die meisten Aspekte der Benutzeroberfläche des Tabletts können angepasst werden. Oft wird dies in XML durch überschreibende Werte in der Bibliothek erreicht.
Eine Ausnahme dafür ist die Ausrichtung des Tablys: Die Mikrofontaste wird standardmäßig als rechtsgerichtete Registerkarte auf der Linkschandseite des Bildschirms angezeigt, wobei das Tablett folglich von links einsieht. Es unterstützt auch eine rechte Orientierung, erfordert jedoch zwei Änderungen, um dies zu tun:
.orientation(TrayConfig.Orientation.RIGHT) auf dem TrayConfig -Builder vor dem Erstellen der Konfiguration an.< 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 " /> Wir brauchen hier nur die letzte Einschränkung; Der Rest der Attribute ist mit dem Quelllayout identisch. Da wir jedoch include , bedeutet das Überschreiben eines Attributs jedoch alle von ihnen. Siehe die Notiz am Ende des Absatzes hier.
Wertbasierte UI-Anpassungen sind unten aufgeführt. Die Dateinamen hier weisen auf die ursprünglichen Definitionen im res/values -Ordner der Bibliothek hin, aber Ersatz kann an anderer Stelle in Ihrem Projekt definiert werden. Die Beispiel -App veranschaulicht dies, indem die Textfarbe für Systemmeldungen in res/values/custom_colors.xml überschrieben wird.
colors.xmlspsk_colorTrayBg : Die für den Nachrichtenstrom des Tabletts verwendete Hintergrundfarbe.spsk_colorIcon : Die für Symbole verwendete Vordergrundfarbe, die sich mit spsk_colorBrand im Gegensatz zu Kontrastieren müssen. Standardmäßig weiß.spsk_colorDragHandle : Die Farbe, die für den Größenverkehrsgriff des Tabletts verwendet wird.spsk_colorBrand : Die primäre Farbe von UI -Elementen wie die Mikrofontaste und Symbole ohne Hintergrund.spsk_colorListenText : Die Farbe, die für Text in der Blase "Hören" verwendet wird.spsk_colorSystemText : Die Farbe, die für Text in Systemnachrichtenblasen verwendet wird.spsk_colorUserText : Die Farbe, die für Text in Benutzernachrichtenblasen verwendet wird.spsk_colorSystemBg : Die Hintergrundfarbe für Systemnachrichtenblasen.spsk_colorUserBg : Die Hintergrundfarbe für Benutzernachrichtenblasen.spsk_colorGradientOne : Die für die Animation des Hörverlaufs verwendete Startfarbe. Standardmäßig zu spsk_colorBrand .spsk_colorGradientEnd : Die für die Animation des Hörgradienten verwendete Endfarbe.spsk_colorTransparent : Die transparente Farbe wird als Hintergrundtönung für den Pfeil "zurück" auf dem Tablett verwendet.dimens.xmlspsk_micTabWidth : Breite für die Registerkarte Mikrofon. Standardeinstellungen zu 60dp .spsk_micTabHeight : Höhe für die Registerkarte Mikrofon. Standardmäßig 80dp und sollte in einem Verhältnis von 4: 3 mit spsk_micTabWidth aufbewahrt werden.spsk_listenBubbleWidth : Breite für die Hörblase, die während der ASR erscheint. Standardmäßig auf 120dp und sollte in einem Verhältnis von 2: 1 mit spsk_listenBubbleHeight gehalten werden.spsk_listenBubbleHeight : Höhe für die Hörblase, die während der ASR erscheint. Standardeinstellungen zu 60dp .spsk_messageStreamHeight : Starthöhe für den Nachrichtenstrom im Tablett. Standardeinstellungen zu 100dp .spsk_messageStreamMinHeight : Mindesthöhe, auf die das Tablett durch Widerstand geändert werden kann. Standardeinstellungen zu 80dp .ints.xmlspsk_trayAnimateMs : Die Zeitspanne in Millisekunden, das Tablett braucht zum Öffnen oder Schließen. Standardeinstellung auf 500 .strings.xmlspsk_listening : Der Text, der während des aktiven Hörens (ASR) im Tablett angezeigt wird. Standardeinstellungen zum "LISTENING" .styles.xmlspsk_messageFont : Die Schriftfamilie, mit der ASR -Transkripte und Systemnachrichten im Tablett angezeigt werden. Standardeinstellungen nach sans-serif (Roboto). Copyright 2020 Spokestack, Inc.
Lizenziert unter der Apache -Lizenz, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie können eine Kopie der Lizenz bei erhalten
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht nach geltendem Recht oder schriftlich zu vereinbart wird, wird die im Rahmen der Lizenz verteilte Software auf "As is" -Basis ohne Gewährleistung oder Bedingungen jeglicher Art ausdrücklich oder impliziert verteilt. Siehe die Lizenz für die spezifischen Sprachberechtigungen und Einschränkungen im Rahmen der Lizenz.