
Sebuah Fragment untuk menambahkan kontrol suara melalui spokeStack ke aplikasi Android apa pun. Anda dapat menemukan aplikasi demo sederhana yang menunjukkan baki beraksi di direktori example .
Saat Anda menambahkan fragmen baki spokestack ke tata letak Anda, Anda akan mendapatkan tombol mikrofon berbentuk seperti tab di sisi layar (sisi mana itu terserah Anda; lebih lanjut tentang itu nanti). Mengetuk atau menyeret tab mengungkapkan sisa baki, yang diatur seperti aliran pesan di aplikasi obrolan. Membuka baki mengaktifkan mikrofon, dan apa pun yang dikatakan pengguna akan dikirim melalui layanan pengenalan ucapan otomatis (ASR) dan ditampilkan sebagai teks. Teks itu kemudian dikirim ke model pemahaman bahasa alami (NLU) untuk klasifikasi. Hasil klasifikasi dikirim ke komponen aplikasi yang telah Anda buat untuk mendengarkan peristiwa dari baki, yang dapat menghasilkan respons yang akan ditampilkan dan dibaca oleh baki kepada pengguna melalui layanan sintesis Text-to-Speech (TTS) Spokestack. Mikrofon akan diandalkan jika respons aplikasi mengarahkannya ke; Kalau tidak, baki akan menutup dan menonaktifkan ASR.
Dan begitu saja, Anda telah menambahkan suara ke aplikasi Anda!

Oh, dan setelah interaksi awal itu, baki dapat dibuka dengan kata wakil, bukan keran. Kata bangun adalah "SpokeStack" secara default, tetapi itu bisa disesuaikan.
Jika beberapa dari itu tidak masuk akal, jangan takut! Baca terus, dan kami akan membahas semua detail di bawah ini.
Catatan : Baki Spokestack dulu di -host di JCenter, tetapi sejak pengumuman penghentiannya, kami telah memindahkan distribusi ke Maven Central. Harap pastikan bahwa file build.gradle tingkat root Anda termasuk mavenCentral() di blok repositories untuk mengakses versi> = 0.4.1.
Pastikan Anda menggunakan versi 0.4.2 atau di atas untuk menyelesaikan ketergantungan pada perpustakaan spokestack inti setelah JCenter menjadi tidak dapat diakses.
Secara default, baki spokestack menangani ASR, NLU, dan TTS untuk interaksi suara dengan pengguna - itu mengubah suara mereka menjadi teks, memproses teks itu untuk menghasilkan tindakan, dan mensintesis respons aplikasi untuk dibaca kembali kepada pengguna. Untuk informasi lebih lanjut tentang fitur -fitur ini, lihat Dokumen SpokeStack.
Untuk menggunakan NLU dan TTS, Anda akan memerlukan akun spokestack gratis. Dari halaman akun Anda, Anda dapat membuat dan mengunduh model NLU; dan ID klien dan kunci rahasia diperlukan saat runtime untuk permintaan TTS.
Namun, pertama -tama, tambahkan ketergantungan ke build.gradle aplikasi Anda (periksa lencana jCenter di atas untuk versi terbaru):
implementation ' io.spokestack:tray:0.4.1 ' Seperti disebutkan di atas, baki spokestack diimplementasikan sebagai Fragment yang membuat di atas Activity Anda yang ada dan menangani interaksi suara, jadi Anda ingin menambahkannya ke tata letak aktivitas Anda:
<!-- nested in the main layout, after other views/sublayouts -->
< include
android : id = " @+id/tray_fragment "
layout = " @layout/spokestack_tray_fragment "
/> Catatan : Bergantung pada tata letak aplikasi Anda, Anda mungkin juga harus menambahkan android:clipChildren="false" ke tata letak induk fragmen untuk menghindari tab mikrofon menghilang saat baki terbuka.
Kemudian buat aktivitas Anda sendiri memperpanjang TrayActivity (subclass dari AppCompatActivity ), mengimplementasikan metode yang dibutuhkan, dan perpustakaan akan mengurus sisanya.
Jika Anda lebih suka melakukan pengaturan sendiri, berikut adalah sampel yang tidak menggunakan 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()
} Saat Anda mengunduh SpokeStack Wakword atau model NLU, Anda akan memiliki beberapa URL untuk file yang berbeda. wakewordModelURL dan nluURL di atas hanya membutuhkan jalur ke direktori yang relevan, bukan URL file penuh. Jadi untuk demo "spokeStack" wakword, atur wakewordModelURL ke "https://d3dmqd7cy685il.cloudfront.net/model/wake/spokestack/".
Baki ini dirancang untuk penggunaan yang mulus di seluruh kegiatan - misalnya, untuk memungkinkan pengguna terus memberikan perintah suara sementara aplikasi beralih kegiatan - sehingga keadaannya disimpan di luar fragmen itu sendiri dan selamat dari kerusakan fragmen. Jika aplikasi Anda perlu melepaskan sumber daya yang dipegang oleh baki dan instance Spokestack yang mendasarinya, hubungi metode stop() baki. Jika Anda perlu mengaktifkan kembali kontrol suara sebelum instance fragmen baki saat ini dihancurkan, Anda harus menelepon start() .
Jika Anda ingin menjaga keadaan baki tetap utuh setelah proses kematian, Anda dapat menyimpannya di metode onSaveInstanceState dan onRestoreInstanceState dari aktivitas induknya menggunakan metode getState() dan loadState() baki; Lihat dokumentasi mereka untuk detail lebih lanjut.
Kemungkinannya adalah jika Anda mengizinkan pengguna untuk berbicara dengan aplikasi Anda, Anda ingin aplikasi untuk berbicara kembali. Baki terintegrasi dengan layanan TTS SpokeStack, jadi mensintesis audio sama mudahnya dengan menyalinnya.
Saat Anda memperluas TrayActivity , salah satu metode yang harus Anda terapkan adalah getTrayListener() , yang menciptakan dan mengembalikan SpokestackTrayListener . Antarmuka ini membantu aplikasi Anda dalam bereaksi terhadap peristiwa yang diterima dan diproduksi oleh baki. Karena setiap kasus penggunaan unik, semua metodenya opsional; Yang kami minati di sini adalah onClassification . Metode ini dipanggil setelah pidato pengguna telah ditranskripsi oleh ASR dan diklasifikasikan oleh NLU. Ini memasok aplikasi Anda dengan hasil NLU dan meminta Anda untuk mengembalikan tanggapan:
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 )
}
} Parameter kedua opsional dalam konstruktor VoicePrompt memberi tahu baki jika Anda mengharapkan respons - jika Anda, itu akan melanjutkan mendengarkan aktif setelah prompt Anda dimainkan sehingga pengguna tidak harus menggunakan katage bangun atau tombol untuk setiap interaksi.
Sampel di atas akan membuat Anda bangun dan berjalan dengan keributan minimal, tetapi jauh dari semua yang ditawarkan baki spokestack. Saat Anda membangun instance TrayConfig , Anda dapat memilih untuk mengonfigurasi dan menyediakan pembangun Spokestack yang mendasarinya sendiri. Ini akan memungkinkan Anda melakukan hal -hal seperti mengubah penyedia ASR, mengatur pendengar khusus untuk acara dari sistem individu, dan menambahkan komponen pemrosesan ucapan khusus jika Anda perlu. Anda dapat membaca tentang pembangun spokestack di sini.
Ada juga berbagai opsi yang berlaku untuk baki itu sendiri, dapat diakses melalui metode helper pada instance TrayConfig.Builder . Menggambarkan masing -masing di sini akan membuat readme ini ... BERBAHASAN, meskipun, jadi lihat dokumentasi untuk lebih jelasnya. Dokumentasi di TrayConfig.Builder adalah [di sini] (https://spokestack.github.io/spokestack-tray-android/-pokestack-tray/io.spokestack.tray/-tray-config/-builder*.
Sebagian besar aspek UI baki dapat disesuaikan. Seringkali ini dilakukan dalam XML dengan menimpa nilai yang ditetapkan di perpustakaan.
Salah satu pengecualian untuk ini adalah orientasi baki: tombol mikrofonnya default untuk tampil sebagai tab yang menghadap ke kanan di sisi kiri layar, dengan baki akibatnya meluncur masuk dari kiri. Ini juga mendukung orientasi kanan tetapi membutuhkan dua perubahan untuk melakukannya:
.orientation(TrayConfig.Orientation.RIGHT) pada pembangun TrayConfig sebelum membangun konfigurasi.< 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 " /> Kami hanya membutuhkan kendala terakhir di sini; Sisa atribut identik dengan tata letak sumber. Karena kami menggunakan, include satu atribut yang mengesampingkan berarti mengesampingkan semuanya; Lihat catatan di akhir paragraf di sini.
Kustomisasi UI berbasis nilai tercantum di bawah ini. Nama file di sini menunjukkan definisi asli di folder res/values perpustakaan, tetapi penggantian dapat didefinisikan di tempat lain dalam proyek Anda. Aplikasi Contoh menggambarkan ini dengan menimpa warna teks untuk pesan sistem di res/values/custom_colors.xml .
colors.xmlspsk_colorTrayBg : Warna latar belakang yang digunakan untuk aliran pesan baki.spsk_colorIcon : Warna latar depan yang digunakan untuk ikon yang perlu kontras dengan spsk_colorBrand . Default menjadi putih.spsk_colorDragHandle : Warna yang digunakan untuk pengubah ukuran baki.spsk_colorBrand : Warna utama elemen UI seperti tombol mikrofon dan ikon tanpa latar belakang.spsk_colorListenText : warna yang digunakan untuk teks dalam gelembung "mendengarkan".spsk_colorSystemText : Warna yang digunakan untuk teks dalam gelembung pesan sistem.spsk_colorUserText : Warna yang digunakan untuk teks dalam gelembung pesan pengguna.spsk_colorSystemBg : Warna latar belakang yang digunakan untuk gelembung pesan sistem.spsk_colorUserBg : Warna latar belakang yang digunakan untuk gelembung pesan pengguna.spsk_colorGradientOne : Warna awal yang digunakan untuk animasi gradien mendengarkan. Default ke spsk_colorBrand .spsk_colorGradientEnd : Warna akhir yang digunakan untuk animasi gradien mendengarkan.spsk_colorTransparent : Warna transparan digunakan sebagai warna latar belakang untuk panah "belakang" di baki.dimens.xmlspsk_micTabWidth : Lebar untuk tombol tab mikrofon. Default ke 60dp .spsk_micTabHeight : Tinggi untuk tombol tab mikrofon. Default ke 80dp dan harus disimpan dalam rasio 4: 3 dengan spsk_micTabWidth .spsk_listenBubbleWidth : Lebar untuk gelembung mendengarkan yang muncul selama ASR. Default ke 120dp dan harus disimpan dalam rasio 2: 1 dengan spsk_listenBubbleHeight .spsk_listenBubbleHeight : Tinggi untuk gelembung mendengarkan yang muncul selama ASR. Default ke 60dp .spsk_messageStreamHeight : Tinggi mulai untuk aliran pesan di dalam baki. Default ke 100dp .spsk_messageStreamMinHeight : Tinggi minimum di mana baki dapat diubah ukurannya dengan seret. Default ke 80dp .ints.xmlspsk_trayAnimateMs : Jumlah waktu, dalam milidetik, baki dibutuhkan untuk membuka atau menutup. Default ke 500 .strings.xmlspsk_listening : Teks yang ditampilkan di baki selama mendengarkan aktif (ASR). Default untuk "LISTENING" .styles.xmlspsk_messageFont : Keluarga font yang digunakan untuk menampilkan transkrip ASR dan pesan sistem di baki. Default ke sans-serif (roboto). Hak Cipta 2020 SpokeStack, Inc.
Berlisensi di bawah lisensi Apache, versi 2.0 ("lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan lisensi. Anda dapat memperoleh salinan lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diharuskan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak yang didistribusikan di bawah lisensi didistribusikan berdasarkan "sebagaimana adanya", tanpa jaminan atau ketentuan dalam bentuk apa pun, baik tersurat maupun tersirat. Lihat lisensi untuk bahasa spesifik yang mengatur izin dan batasan di bawah lisensi.