
Fragment สำหรับการเพิ่มการควบคุมเสียงผ่าน Spokestack ไปยังแอพ Android ใด ๆ คุณสามารถค้นหาแอพสาธิตอย่างง่ายที่แสดงถาดที่ใช้งานได้ในไดเรกทอรี example
เมื่อคุณเพิ่มชิ้นส่วนถาด Spokestack ลงในเค้าโครงของคุณคุณจะได้รับปุ่มไมโครโฟนที่มีรูปร่างเหมือนแท็บที่ด้านข้างของหน้าจอ (ด้าน ใด ที่ขึ้นอยู่กับคุณมากขึ้นในภายหลัง) การแตะหรือลากแท็บเผยให้เห็นส่วนที่เหลือของถาดซึ่งจัดเรียงเหมือนสตรีมส่งข้อความในแอพแชท การเปิดถาดเปิดใช้งานไมโครโฟนและสิ่งที่ผู้ใช้บอกว่าจะถูกส่งผ่านบริการการรู้จำเสียงพูดอัตโนมัติ (ASR) และแสดงเป็นข้อความ ข้อความนั้นจะถูกส่งไปยังรูปแบบการทำความเข้าใจภาษาธรรมชาติ (NLU) สำหรับการจำแนกประเภท ผลลัพธ์ของการจำแนกประเภทจะถูกส่งไปยังส่วนประกอบแอปพลิเคชันที่คุณได้สร้างขึ้นเพื่อฟังเหตุการณ์จากถาดซึ่งสามารถสร้างการตอบกลับที่ถาดจะแสดงและอ่านให้ผู้ใช้ผ่านบริการการสังเคราะห์ข้อความเป็นข้อความ (TTS) ของ Spokestack (TTS) ไมโครโฟนจะเปิดใช้งานอีกครั้งหากการตอบสนองของแอปนำไปสู่ มิฉะนั้นถาดจะปิดและปิดการใช้งาน ASR
และเช่นนั้นคุณได้เพิ่มเสียงลงในแอปของคุณ!

โอ้และหลังจากการโต้ตอบครั้งแรกนั้นถาดสามารถเปิดได้ด้วยคำเตือนแทนการแตะ Wakeword คือ "Spokestack" โดยค่าเริ่มต้น แต่สามารถปรับแต่งได้
ถ้าบางอย่างไม่สมเหตุสมผลอย่ากลัว! อ่านต่อและเราจะครอบคลุมรายละเอียดทั้งหมดด้านล่าง
หมายเหตุ : ถาด Spokestack เคยเป็นเจ้าภาพใน JCenter แต่เนื่องจากการประกาศหยุดการทำงานเราได้ย้ายการกระจายไปยัง Maven Central โปรดตรวจสอบให้แน่ใจว่าไฟล์ build.gradle ระดับรูทของคุณรวมถึง mavenCentral() ในบล็อก repositories เพื่อเข้าถึงเวอร์ชัน> = 0.4.1
ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชัน 0.4.2 หรือสูงกว่าเพื่อแก้ไขการพึ่งพาของไลบรารีหลักของสางหลังจาก JCenter ไม่สามารถเข้าถึงได้
โดยค่าเริ่มต้นถาด Spokestack จัดการ ASR, NLU และ TTS สำหรับการโต้ตอบด้วยเสียงกับผู้ใช้นั่นคือการแปลงเสียงของพวกเขาเป็นข้อความประมวลผลข้อความนั้นเพื่อสร้างการกระทำและสังเคราะห์การตอบสนองของแอปเพื่ออ่านกลับไปยังผู้ใช้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติเหล่านี้ดูเอกสาร Spokestack
ในการใช้ NLU และ TTS คุณจะต้องมีบัญชี Spokestack ฟรี จากหน้าบัญชีของคุณคุณจะสามารถสร้างและดาวน์โหลดรุ่น NLU ได้ และรหัสลูกค้าและรหัสลับจำเป็นต้องใช้เวลารันไทม์สำหรับคำขอ TTS
อย่างไรก็ตามก่อนอื่นเพิ่มการพึ่งพาใน build.gradle ของแอปของคุณ (ตรวจสอบตรา jCenter ด้านบนสำหรับเวอร์ชันล่าสุด):
implementation ' io.spokestack:tray:0.4.1 ' ดังที่ได้กล่าวไว้ข้างต้นถาด SPOKESTACK ถูกนำมาใช้เป็น Fragment ที่แสดงผลด้านบนของ Activity ที่มีอยู่ของคุณและจัดการการโต้ตอบด้วยเสียงดังนั้นคุณจะต้องเพิ่มลงในเค้าโครงกิจกรรมของคุณ:
<!-- 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 พื้นฐานให้โทรหาวิธี stop() ของถาด หากคุณต้องการเปิดใช้งานการควบคุมด้วยเสียงอีกครั้งก่อนที่อินสแตนซ์ของแฟรกเมนต์ถาดปัจจุบันจะถูกทำลายคุณต้องโทร start()
หากคุณต้องการรักษาสถานะของถาดไว้หลังจากการเสียชีวิตของกระบวนการคุณสามารถเก็บไว้ในวิธี onSaveInstanceState และ onRestoreInstanceState ของกิจกรรมของผู้ปกครองโดยใช้วิธี getState() และ loadState() ของถาด ดูเอกสารของพวกเขาสำหรับรายละเอียดเพิ่มเติม
มีโอกาสที่ถ้าคุณอนุญาตให้ผู้ใช้คุยกับแอพของคุณคุณต้องการให้แอพคุยกลับมา ถาดถูกรวมเข้ากับบริการ TTS ของ SPOKESTACK ดังนั้นการสังเคราะห์เสียงจึงง่ายพอ ๆ กับการถอดเสียง
เมื่อคุณขยาย TrayActivity หนึ่งในวิธีการที่คุณต้องใช้คือ getTrayListener() ซึ่งสร้างและส่งคืน SpokestackTrayListener อินเทอร์เฟซนี้ช่วยแอปของคุณในการตอบสนองต่อเหตุการณ์ที่ได้รับและผลิตโดยถาด เนื่องจากแต่ละกรณีการใช้งานไม่ซ้ำกันวิธีการทั้งหมดจึงเป็นทางเลือก สิ่งที่เราสนใจที่นี่คือ 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 ช่วยให้ถาดทราบว่าคุณคาดหวังว่าจะได้รับการตอบกลับ - หากคุณเป็นมันจะกลับมาใช้งานอีกต่อไปหลังจากเล่นพรอมต์ของคุณเพื่อให้ผู้ใช้ไม่ต้องใช้ WAKEWOR หรือปุ่มสำหรับการโต้ตอบแต่ละครั้ง
ตัวอย่างข้างต้นจะช่วยให้คุณทำงานด้วยความยุ่งยากน้อยที่สุด แต่มันก็ยังห่างไกลจากถาด Spokestack ทั้งหมดที่เสนอ เมื่อคุณกำลังสร้างอินสแตนซ์ TrayConfig คุณสามารถเลือกที่จะกำหนดค่าและจัดหาตัวสร้าง Spokestack พื้นฐานตัวเอง สิ่งนี้จะช่วยให้คุณทำสิ่งต่าง ๆ เช่นการเปลี่ยนแปลงผู้ให้บริการ ASR ตั้งค่าผู้ฟังที่กำหนดเองสำหรับเหตุการณ์จากแต่ละระบบและเพิ่มส่วนประกอบการประมวลผลคำพูดที่กำหนดเองหากคุณต้องการ คุณสามารถอ่านเกี่ยวกับตัวสร้าง Spokestack ได้ที่นี่
นอกจากนี้ยังมีตัวเลือกที่หลากหลายที่ใช้กับถาดเองสามารถเข้าถึงได้ผ่านวิธีการของผู้ช่วยในอินสแตนซ์ TrayConfig.Builder การอธิบายแต่ละคนที่นี่จะทำให้ readme นี้ ... น่าเบื่อ แต่ดังนั้นตรวจสอบเอกสารสำหรับรายละเอียดเพิ่มเติม เอกสารเกี่ยวกับ TrayConfig.Builder คือ [ที่นี่] (https://spokestack.github.io/spokestack-tray-android/-spokestack-tray/io.spokestack.tray/-tray-config/-builder**
ด้านส่วนใหญ่ของ UI ของถาดสามารถปรับแต่งได้ บ่อยครั้งที่สิ่งนี้สามารถทำได้ใน XML โดยการเอาชนะค่าที่ตั้งไว้ในไลบรารี
ข้อยกเว้นอย่างหนึ่งคือการวางแนวของถาด: ปุ่มไมโครโฟนเริ่มต้นที่จะปรากฏเป็นแท็บหันหน้าไปทางขวาที่ด้าน lefthand ของหน้าจอโดยถาดจึงเลื่อนเข้ามาจากด้านซ้าย นอกจากนี้ยังรองรับการวางแนวขวา แต่ต้องมีการเปลี่ยนแปลงสองครั้งเพื่อทำเช่นนั้น:
.orientation(TrayConfig.Orientation.RIGHT) บนตัวสร้าง TrayConfig ก่อนที่จะสร้างการกำหนดค่า< 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 ถึงการเอาชนะหนึ่งแอตทริบิวต์หมายถึงการเอาชนะพวกเขาทั้งหมด ดูโน้ตในตอนท้ายของย่อหน้าที่นี่
การปรับแต่ง 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_colorBrandspsk_colorGradientEnd : สีสุดท้ายที่ใช้สำหรับการฟังภาพแอนิเมชั่นการไล่ระดับสีspsk_colorTransparent : สีโปร่งใสที่ใช้เป็นโทนสีพื้นหลังสำหรับลูกศร "ย้อนกลับ" บนถาดdimens.xmlspsk_micTabWidth : ความกว้างสำหรับปุ่มแท็บไมโครโฟน ค่าเริ่มต้นเป็น 60dpspsk_micTabHeight : ความสูงสำหรับปุ่มแท็บไมโครโฟน ค่าเริ่มต้นเป็น 80dp และควรเก็บไว้ในอัตราส่วน 4: 3 กับ spsk_micTabWidthspsk_listenBubbleWidth : ความกว้างสำหรับฟองฟังที่ปรากฏในระหว่าง ASR ค่าเริ่มต้นเป็น 120dp และควรเก็บไว้ในอัตราส่วน 2: 1 ด้วย spsk_listenBubbleHeightspsk_listenBubbleHeight : ความสูงสำหรับฟองฟังที่ปรากฏในระหว่าง ASR ค่าเริ่มต้นเป็น 60dpspsk_messageStreamHeight : เริ่มต้นความสูงสำหรับสตรีมข้อความภายในถาด ค่าเริ่มต้นเป็น 100dpspsk_messageStreamMinHeight : ความสูงขั้นต่ำที่ถาดสามารถปรับขนาดได้โดยการลาก ค่าเริ่มต้นเป็น 80dpints.xmlspsk_trayAnimateMs : ระยะเวลาในมิลลิวินาทีถาดจะเปิดหรือปิด ค่าเริ่มต้นถึง 500strings.xmlspsk_listening : ข้อความที่แสดงในถาดระหว่างการฟังที่ใช้งาน (ASR) ค่าเริ่มต้นเป็น "LISTENING"styles.xmlspsk_messageFont : ตระกูลตัวอักษรที่ใช้แสดงการถอดเสียง ASR และข้อความระบบในถาด ค่าเริ่มต้นเป็น sans-serif (Roboto) ลิขสิทธิ์ 2020 Spokestack, Inc.
ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ยกเว้นตามใบอนุญาต คุณอาจได้รับสำเนาใบอนุญาตที่
http://www.apache.org/licenses/LICENSE-2.0
เว้นแต่ว่ากฎหมายที่บังคับใช้หรือตกลงเป็นลายลักษณ์อักษรซอฟต์แวร์ที่แจกจ่ายภายใต้ใบอนุญาตจะถูกแจกจ่ายตาม "ตามพื้นฐาน" โดยไม่มีการรับประกันหรือเงื่อนไขใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อ จำกัด ภายใต้ใบอนุญาต