
Spokestack是Android上移动语音接口的多合一解决方案。它提供了语音处理难题的所有部分,包括语音活动检测,唤醒词检测,语音识别,自然语言理解(NLU)和语音综合(TTS)。在其默认配置(在较新的Android设备上)下,除了TTS之外,所有其他内容都直接发生在移动设备上 - 与云的通信无表示更快的结果和更好的隐私。
Android并不是它支持的唯一平台!
在spokestack.io上创建一个免费帐户,使您可以训练自己的NLU模型并测试TTS,而无需在应用程序中添加代码。我们甚至可以为您训练自定义的唤醒字和TTS语音,以确保您的应用程序的声音独特而令人难忘。
有关简要介绍,请继续阅读,但有关更多详细的指南,请参见以下内容:
注意:Spokestack曾经在Jcenter上托管,但是自从宣布停产以来,我们已将发行版移至Maven Central。请确保您的root级build.gradle文件在其repositories库中包含mavenCentral()以便访问版本> = 11.0.2。
Spokestack的清单中列出的最低Android SDK版本是8,因为这是您需要运行Wake Word检测和语音识别的全部。要使用其他功能,最好至少针对API级别21。
如果您在TTS播放中包含e exoplayer(请参见下文),则可能会在Android版本上运行的Android比API级别24级别24。如果遇到此问题,请尝试将以下行添加到gradle.properties文件:
android.enableDexingArtifactTransform=false
将以下内容添加到您的应用程序的build.gradle :
android {
// ...
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
}
// ...
dependencies {
// ...
// make sure to check the badge above or "releases" on the right for the
// latest version!
implementation ' io.spokestack:spokestack-android:11.5.2 '
// for TensorFlow Lite-powered wakeword detection and/or NLU, add this one too
implementation ' org.tensorflow:tensorflow-lite:2.6.0 '
// for automatic playback of TTS audio
implementation ' androidx.media:media:1.3.0 '
implementation ' com.google.android.exoplayer:exoplayer-core:2.14.0 '
// if you plan to use Google ASR, include these
implementation ' com.google.cloud:google-cloud-speech:1.22.2 '
implementation ' io.grpc:grpc-okhttp:1.28.0 '
// if you plan to use Azure Speech Service, include these, and
// note that you'll also need to add the following to your top-level
// build.gradle's `repositories` block:
// maven { url 'https://csspeechstorage.blob.core.windows.net/maven/' }
implementation ' com.microsoft.cognitiveservices.speech:client-sdk:1.9.0 '
}有关更多信息,请参见《 Quickstart指南》,但这是30秒的设置:
RECORD_AUDIO权限。有关此的示例,请参见我们的骨骼项目。还需要INTERNET权限,但默认情况下图书馆的清单包括在内。Activity中: private lateinit var spokestack : Spokestack
// ...
spokestack = Spokestack . Builder ()
.setProperty( " wake-detect-path " , " $cacheDir /detect.tflite " )
.setProperty( " wake-encode-path " , " $cacheDir /encode.tflite " )
.setProperty( " wake-filter-path " , " $cacheDir /filter.tflite " )
.setProperty( " nlu-model-path " , " $cacheDir /nlu.tflite " )
.setProperty( " nlu-metadata-path " , " $cacheDir /metadata.json " )
.setProperty( " wordpiece-vocab-path " , " $cacheDir /vocab.txt " )
.setProperty( " spokestack-id " , " your-client-id " )
.setProperty( " spokestack-secret " , " your-secret-key " )
// `applicationContext` is available inside all `Activity`s
.withAndroidContext(applicationContext)
// see below; `listener` here inherits from `SpokestackAdapter`
.addListener(listener)
.build()
// ...
// starting the pipeline makes Spokestack listen for the wakeword
spokestack.start()此示例假设您是在应用程序的高速缓存目录中存储Wakeword和NLU模型;同样,请参阅骨架项目,以获取从资产捆绑中解压缩这些文件到此目录中的示例。
要使用演示“ spokestack”醒目,请下载TensorFlow Lite模型:检测|编码|筛选
如果您还不想打扰它,只需禁用Wakeword检测和NLU,就可以忽略上述所有文件路径:
spokestack = Spokestack . Builder ()
.withoutWakeword()
.withoutNlu()
// ...
.build()在这种情况下,您仍然需要如上所述start() spokestack,但是您还需要在某个地方创建一个按下spokestack.activate()时的按钮;这启动了ASR,将转录用户语音。
另外,您可以将Spokestack设置为启动ASR,任何时候使用语音管道文档中所述的非默认语音管道配置文件来检测语音。在这种情况下,您需要VADTriggerAndroidASR配置文件:
// replace
.withoutWakeword()
// with
.withPipelineProfile( " io.spokestack.spokestack.profile.VADTriggerAndroidASR " )还要注意设置过程中的addListener()行。语音处理在背景线程上不断发生,因此您的应用需要一种方法来找出用户何时与之交谈。重要事件是通过事件交付给SpokestackAdapter的子类。您的子类可以根据需要覆盖以下许多事件方法。选择不实施不会破坏任何东西;您只是不会收到这些活动。
speechEvent(SpeechContext.Event, SpeechContext) :这可以传达语音管道中的事件,包括从已激活/取消ASR的通知到用户语音的部分和完整的成绩单的所有内容。nluResult(NLUResult) :启用NLU时,用户语音将自动通过NLU发送进行分类。您需要该分类的结果来帮助您的应用程序决定下一步要做什么。ttsEvent(TTSEvent) :如果您自己管理TTS播放,则需要知道何时合成的演讲可以播放( AUDIO_AVAILABLE事件);即使您不是,如果您要在应用程序读取响应后自动重新激活麦克风, PLAYBACK_COMPLETE事件也可能会有所帮助。trace(SpokestackModule, String) :这结合了每个Spokestack模块中的日志/跟踪消息。一些模块在其自己的事件方法中包括跟踪事件,但是每个事件也在这里发送。error(SpokestackModule, Throwable) :这结合了每个Spokestack模块中的错误。一些模块在其自己的事件方法中包含错误事件,但是这些事件也在这里发送。快速启动指南包含大多数这些方法的示例实现。
如我们提到的,如果启用了NLU,则会自动处理分类,因此在Spokestack正在运行时需要了解的主要方法是:
start()/stop() :启动/停止管道。在跑步时,Spokestack使用麦克风来聆听应用程序的唤醒单词,除非禁用了唤醒字,否则必须以另一种方式激活ASR。当不再需要Spokestack(或暂停应用程序时)以释放资源时,应停止管道。activate()/deactivate() :激活/停用ASR,它倾听并转录用户所说的话。synthesize(SynthesisRequest) :将文本发送到Spokestack的Cloud TTS服务,以合成音频。在默认配置下,此音频将在可用时自动播放。 Maven用于建造/部署,该包装托管在Maven Central。
此软件包需要安装Android NDK,并设置ANDROID_HOME和ANDROID_NDK_HOME变量。在OSX上, ANDROID_HOME通常设置为~/Library/Android/sdk和ANDROID_NDK_HOME通常设置为~/Library/Android/sdk/ndk/<version> 。
ANDROID_NDK_HOME也可以在您的本地maven settings.xml文件中指定为android.ndk.path属性。
mvn test jacoco:reportmvn checkstyle:check确保您的Sonatype/Maven Central凭据在您的用户settings.xml中。xml(通常是~/.m2/settings.xml ):
< servers >
< server >
< id >ossrh</ id >
< username >sonatype-username</ username >
< password >sonatype-password</ password >
</ server >
</ servers >在非主机分支上,运行以下命令。这将提示您输入新版本的版本编号和标签,将标签推向GitHub,然后将软件包部署到Sonatype存储库中。
mvn release:clean release:prepare release:performMaven目标可能由于试图两次上传文件的错误而失败,但是该版本仍然发生了。
通过创建并合并GitHub上新分支的拉请请求并通过编辑标签来更新发行说明来完成该过程。
有关发布的更多信息
版权2021 Spokestack,Inc。
根据Apache许可证(版本2.0(“许可”)获得许可;除了符合许可外,您不得使用此文件。您可以在
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或以书面形式同意,否则根据许可证分配的软件是按照“原样”分发的,没有任何明示或暗示的任何形式的保证或条件。请参阅许可证,以获取执行许可条款和限制的特定语言。