
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
除非適用法律要求或以書面形式同意,否則根據許可證分配的軟件是按照“原樣”分發的,沒有任何明示或暗示的任何形式的保證或條件。請參閱許可證,以獲取執行許可條款和限制的特定語言。