- Halo semuanya, nama saya Roman Volkov. Hari ini kita akan berbicara tentang cara mengajarkan aplikasi seluler Anda untuk berkomunikasi dengan pengguna Anda.
Sebelum kita mulai, secara singkat tentang saya. Sebelum pengembangan iOS, saya terlibat dalam pengembangan sistem integrasi di sektor perbankan dan pengembangan sistem analitik di sektor minyak. Saya tahu secara langsung apa itu standar PCI DSS dan, misalnya, bagaimana insinyur memahami apa yang terjadi di dalam sumur selama pengeboran, hanya berdasarkan data suhu.
Saya telah melakukan pengembangan iOS sejak 2016. Saya memiliki pengalaman kerja lepas dan jarak jauh, pengalaman berpartisipasi dalam peluncuran beberapa startup. Saya juga membuat aplikasi bermerek untuk Rolls Royce.
Pada tahun 2018, saya bergabung dengan tim Prisma, mengembangkan aplikasi Prisma dan berpartisipasi dalam pengembangan dan peluncuran Lensa Photo Editor. Pada 2019, saya pindah ke Yandex sebagai pengembang iOS. Sejak tahun 2020, saya telah memimpin grup pengembangan seluler Yandex.Translator. Aplikasi Penerjemah tidak lagi hanya sebuah aplikasi untuk bekerja dengan teks. Kami memiliki banyak fitur keren seperti terjemahan foto, mode dialog, input suara, akting suara, dan lainnya.
Baru mulai menyelami topik bekerja dengan suara di iOS, saya tidak menemukan materi ringkas apa pun yang mencakup bekerja dengan sesi audio, dan dengan sintesis, dan dengan pengenalan suara. Itulah mengapa saya memutuskan untuk memberikan ceramah ini.
Ini akan menjadi empat bagian. Pertama, kita akan berbicara tentang apa itu sesi audio, bagaimana bekerja dengannya dengan benar, bagaimana hal itu mempengaruhi pengoperasian aplikasi Anda. Selanjutnya, mari beralih ke sintesis wicara. Mari pertimbangkan bagaimana Anda dapat menyuarakan teks kepada orang-orang dalam beberapa baris kode langsung di telepon. Selanjutnya, kita akan beralih ke pengenalan ucapan. Dan sebagai kesimpulan, mari kita lihat bagaimana semua kemungkinan ini dapat diberikan kepada pengguna dalam mode offline dan fitur apa yang dimilikinya.
Ada beberapa opsi untuk menggunakan akting suara dan pengenalan ucapan. Favorit saya adalah mengubah pesan audio orang lain menjadi teks. Dan saya senang, misalnya, tim Yandex. Messenger telah membuat fitur seperti itu. Mudah-mudahan, utusan lain akan menyusul dan melakukannya di rumah juga.
Kami dengan lancar beralih ke bagian pertama laporan, yaitu AVAudioSession.
Sesi audio adalah lapisan antara aplikasi kita dan sistem operasi. Lebih tepatnya, antara aplikasi Anda dan perangkat keras untuk bekerja dengan suara: speaker dan mikrofon. Di iOS, watchOS, dan tvOS, setiap aplikasi memiliki sesi audio default yang telah dikonfigurasi sebelumnya. Preset ini bervariasi dari satu OS ke OS lainnya.
Berbicara secara khusus tentang iOS, sesi audio secara default mendukung pemutaran audio, tetapi melarang perekaman apa pun. Jika sakelar dari mode hening diatur ke mode "diam", maka semua suara di dalam aplikasi Anda akan dibungkam. Dan ketiga, mengunci perangkat akan menghentikan semua suara di dalam aplikasi Anda agar tidak diputar.
Menyiapkan sesi audio terdiri dari tiga poin: ini adalah pilihan kategori, mode, dan opsi tambahan. Kami akan melihat masing-masing poin secara terpisah.
Mari kita mulai dengan kategorinya. Kategori adalah sekumpulan pengaturan untuk perilaku dasar sesi audio. Kategori adalah sekumpulan parameter yang memungkinkan sistem operasi untuk mencocokkan sebanyak mungkin, katakanlah, nama kategori ini. Oleh karena itu, Apple merekomendasikan memilih kategori untuk aplikasi Anda yang sedekat mungkin dengan yang tersedia. Saat ini ada enam kategori yang tersedia di iOS 13. Ada juga kategori ketujuh, tetapi itu ditandai sebagai usang dan tidak boleh digunakan.
Dalam pembicaraan ini kita akan melihat tiga kategori: pemutaran, rekam, dan playAndRecord. Mode ini memungkinkan Anda untuk menambah kemampuan kategori yang ditetapkan, karena beberapa mode hanya tersedia untuk kategori tertentu.
Misalnya, pada slide Anda melihat mode moviePlayback, dan itu hanya dapat diatur untuk kategori Playback.
Mengatur mode moviePlayback memungkinkan sesi audio secara otomatis meningkatkan kualitas suara pemutaran untuk speaker internal dan untuk headphone. Dalam pembicaraan ini, kami hanya akan menggunakan mode "default". Tetapi saya ingin mencatat bahwa jika Anda menggunakan pasangan kategori dan mode yang tidak kompatibel, maka Mode default akan digunakan.
Ketiga adalah opsi, pengaturan titik untuk sesi audio. Misalnya, Anda dapat menyesuaikan bagaimana audio dari aplikasi Anda bercampur dengan audio dari aplikasi lain, mengatur penonaktifan sesi audio yang tepat sehingga aplikasi lain dapat mengetahui bahwa aplikasi Anda telah selesai bekerja dengan audio.
Pertama, kita akan melihat pengaturan kategori untuk pemutaran, yaitu pemutaran. Ini adalah salah satu kategori audio saja. Jika sudah diatur, maka aktivasi sesi audio akan mengganggu pemutaran audio lainnya, misalnya, dari aplikasi lain.
Penting juga bahwa audio akan diputar meskipun tombol sunyi disetel ke sunyi.
Ada juga opsi untuk memutar dalam status latar belakang untuk kategori ini, tetapi untuk ini aplikasi Anda harus mengaktifkan Audio, AirPlay, dan Gambar dalam Gambar.
Pertimbangkan dua opsi yang terlihat di slide. Yang pertama adalah mixWithOthers. Jika Anda mengaktifkan sesi audio dengan opsi ini, maka pemutaran suara di dalam aplikasi Anda akan dicampur dengan suara yang diputar saat ini, misalnya, dengan musik, pada satu tingkat volume. Tetapi jika Anda ingin suara Anda lebih unggul dalam hal volume daripada pemutaran saat ini, Anda dapat menggunakan opsi duckOthers. Ini menurunkan volume suara yang diputar di latar belakang dan mengembalikannya kembali saat suara yang diputar di dalam aplikasi Anda telah selesai.
Misalnya, ini dapat diamati di aplikasi navigasi: untuk pengumuman rute, apa yang Anda dengarkan sekarang dibungkam, pengumuman diputar, dan kemudian semuanya kembali ke keadaan semula.
Mari pertimbangkan opsi untuk menyiapkan sesi audio untuk pengenalan dari mikrofon. Kategori Rekam mematikan semua audio yang diputar sementara sesi audio dengan kategori ini aktif dalam aplikasi. Rekaman tidak dapat mematikan suara sistem seperti panggilan, alarm - secara umum, suara standar yang memiliki prioritas lebih tinggi.
Anda juga dapat menambahkan opsi allowBluetoothA2DP, ini memungkinkan Anda menggunakan headset seperti AirPods untuk merekam suara dari mikrofon dan memutar suara di dalamnya. Ada opsi yang lebih lama untuk ini, yang terdengar seperti allowBluetooth, tetapi kualitas suaranya turun drastis.
Kami dulu menggunakan opsi lama, dan ada keluhan dari pengguna bahwa mereka tidak puas dengan kualitas suara yang diputar dan direkam di dalam aplikasi. Kami mengubah opsi, semuanya menjadi lebih baik.
Jika Anda ingin menggunakan pengenalan ucapan dan sintesis ucapan secara bersamaan, gunakan kategori playAndRecord. Kemudian, dalam sesi audio yang diaktifkan, Anda dapat menggunakan perekaman dan pemutaran suara.
Opsi notifyOthersOnDeactivation harus dipertimbangkan secara terpisah. Ini digunakan dalam metode untuk mengaktifkan sesi audio. Mengapa ini sangat penting?
Jika sesi audio dinonaktifkan dengan opsi ini, maka aplikasi lain akan menerima identifikasi AVAudioSessionInterruptionNotification dengan parameter AVAudioSessionInterruptionTypeEnded dengan parameter bahwa interupsi sesi audionya telah berakhir dan mereka dapat terus bekerja dengan suara, yang dimulai sebelum interupsi.
Skenario ini dimungkinkan jika Anda menggunakan kategori pemutaran dalam aplikasi tanpa opsi mixWithOthers, karena jika tidak, Anda tidak akan mengganggu suara aplikasi lain, audio Anda hanya akan tercampur dengan aplikasi lain.
Menggunakan opsi ini dan menangani modifikasi dengan benar memungkinkan Anda memberi pengguna pengalaman pengguna yang nyaman saat bekerja dengan aplikasi Anda.
Di slide, Anda dapat melihat contoh cara menangani notifikasi dengan benar bahwa aplikasi Anda diganggu oleh aplikasi lain dalam sesi audio, dan situasi saat interupsi berakhir. Yaitu, kami berlangganan pemberitahuan tertentu dan, mungkin, dari dua jenis: ketika interupsi baru saja dimulai dan kapan itu berakhir.
Dalam kasus pertama, Anda dapat menyimpan status, dan dalam kasus kedua, Anda dapat melanjutkan memutar suara yang diinterupsi oleh aplikasi lain.
Berikut adalah contoh cara kerjanya:
Video akan diputar dari saat contoh ditampilkan.Dalam
contoh ini, musik diputar di aplikasi lain, yaitu di VLC, kemudian saya memulai akting suara di dalam aplikasi kita. Musik diinterupsi, pidato yang disintesis dimainkan, kemudian musik secara otomatis dilanjutkan.
Saya ingin menunjukkan bahwa tidak semua aplikasi menangani situasi dengan benar ketika suara mereka terganggu. Misalnya, beberapa pesan instan populer tidak melanjutkan pemutaran audio.
Mari kita rangkum. Kami telah menganalisis prinsip sesi audio. Kami memeriksa kemungkinan mengonfigurasi sesi audio dengan persyaratan aplikasi Anda dan mempelajari cara mudah mengaktifkan dan menonaktifkan sesi audio untuk pengguna.
Berpindah. Sintesis pidato.
Slide tersebut menunjukkan diagram kelas yang terlibat dalam proses sintesis ucapan. Kelas utama adalah AVSpeechSynthesiser, AVSpeechUtterance dan AVSpeechSynthesisVoice dengan pengaturannya.
Secara terpisah, saya perhatikan bahwa ada AVSpeechSynthesizerDelegate yang memungkinkan Anda menerima pemberitahuan tentang siklus hidup seluruh permintaan. Karena suara teks memutar suara, AVAudioSession yang telah dibahas sebelumnya akan menjadi ketergantungan implisit di sini.
Anda dapat membuat permintaan untuk pengenalan tanpa menyiapkan sesi audio, tetapi untuk aplikasi produksi apa pun, penting untuk memahami cara menyiapkannya. Kami membicarakan hal ini sebelumnya.
Contoh terpendek tentang bagaimana Anda dapat dengan cepat membuat permintaan sintesis ucapan. Anda perlu membuat objek dari kelas AVSpeechUtterance, di mana Anda menentukan teks yang ingin Anda ucapkan, suara dan bahasa yang diinginkan. Jika Anda tidak menentukan lokal bahasa saat membuat suara, lokal default telepon Anda akan digunakan. Tapi kita akan berbicara tentang pilihan suara dan bagaimana bekerja dengannya di slide berikutnya.
Selanjutnya, Anda membuat objek kelas AVSpeechSynthesizer dan memanggil metode bicara. Semua. Setelah itu, teks akan disintesis dan diputar, Anda akan mendengar hasilnya.
Namun nyatanya, ini baru permulaan. Sintesis ucapan memiliki lebih banyak kemungkinan, yang sekarang akan kita bicarakan.
Pertama, Anda dapat mengatur kecepatan saat menerima suara. Kecepatan ditentukan sebagai bilangan real dalam kisaran dari nol hingga satu. Tarif sebenarnya berkisar dari nol hingga satu jika Anda menyetel properti tarif ke kisaran 0 hingga 0,5.
Jika Anda menetapkan nilai tarif dalam rentang 0,5 hingga 1, maka tarif berubah secara proporsional dalam nilai dari 1X hingga 4X.
Contoh bagaimana Anda bisa bekerja dengan kecepatan.
Dalam AVFoundation, ada AVSpeechUtteranceDefault yang konstan, yang sebenarnya 0,5, yang setara dengan kecepatan normal pemutaran audio.
Anda juga dapat menentukan kecepatan setengah biasa, Anda perlu menentukan nilai 0,25. Jika Anda menentukan 0,75, kecepatan akan dinaikkan 2,5 kali lipat kecepatan normal. Selain itu, untuk kenyamanan, ada konstanta untuk kecepatan minimum dan maksimum.
Sekarang saya akan memainkan beberapa contoh:
Video akan diputar dari saat contoh ditampilkan
Ini adalah contoh bagaimana Macintosh berbicara untuk pertama kalinya dengan suaranya sendiri pada presentasi Apple. Dan itu adalah contoh kecepatan bicara normal yang disintesis.
Ini 2 kali lebih lambat.
Ini 2,5 kali lebih cepat.
Secara terpisah, dengan baris terakhir, saya menampilkan properti preUtteranceDelay dan postUtteranceDelay. Ini adalah penundaan sebelum suara mulai diputar dan penundaan setelah selesai diputar. Ini nyaman digunakan ketika Anda mencampur aplikasi Anda dengan suara dari aplikasi lain dan ingin volume turun, setelah beberapa saat dan Anda kehilangan hasilnya. Kemudian mereka menunggu beberapa waktu lagi, dan hanya setelah itu volume di aplikasi lain kembali ke posisi semula.
Mari kita lihat parameter berikutnya - pemilihan suara. Suara untuk sintesis ucapan terutama dibagi berdasarkan lokal, bahasa, dan kualitas. AVFoundation menawarkan beberapa cara untuk membuat atau mendapatkan objek AVSpeechSynthesisVoice. Yang pertama adalah dengan ID suara. Setiap suara memiliki ID uniknya sendiri, dan daftar semua suara yang tersedia dapat ditemukan dengan mengakses properti statis SpeechVoice. Mendapatkan properti ini memiliki beberapa keanehan, kami akan membicarakannya lebih lanjut.
Perlu dicatat bahwa jika Anda meneruskan pengenal yang tidak valid ke konstruktor, konstruktor akan mengembalikan "no".
Pilihan kedua adalah mendapatkannya dengan bahasa atau kode lokal. Saya juga ingin mencatat bahwa Apple mengatakan bahwa suara Siri tidak tersedia, tetapi ini tidak sepenuhnya benar: kami berhasil mendapatkan ID dari beberapa suara yang digunakan di Siri pada beberapa perangkat. Mungkin ini bug.
Suara memiliki dua kualitas - default dan ditingkatkan. Untuk beberapa suara, Anda dapat mengunduh versi yang ditingkatkan, kami akan membicarakannya di bagian terakhir, kami akan membahas bagaimana Anda dapat mengunduh suara yang diperlukan.
Contoh bagaimana Anda dapat memilih suara tertentu. Cara pertama - dengan pengenal tertentu, yang kedua - dengan baris yang menunjukkan kode bahasa, yang ketiga - dengan lokal tertentu.
Sekarang saya ingin memainkan dua contoh dubbing teks yang sama dengan lokal yang berbeda.
Video akan diputar dari saat contoh didemonstrasikan.
Opsi kedua, menurut saya, lebih dekat ke pengucapan Rusia.
Jenis kelamin juga muncul di iOS 13. Dan properti ini hanya tersedia di iOS 13 ke atas, hanya berfungsi untuk suara yang ditambahkan di iOS 13. Oleh karena itu, Jenis Kelamin ditetapkan sebagai enum dan memiliki tiga properti: Wanita, Pria, dan Tidak Ditentukan.
Dalam aplikasi kami, Anda dapat memilih jenis kelamin suara yang akan dibaca teks tersebut. Untuk suara-suara lama, kami membuat daftar sendiri dan menyimpannya di aplikasi kami. Pemisahan suara mana yang kami anggap laki-laki dan mana yang perempuan untuk suara-suara yang dikembalikan sistem Tidak ditentukan.
Di iOS 13.1, daftar suara dapat mengembalikan daftar kosong pada panggilan pertama. Solusi: Anda dapat menanyakan ulang seluruh daftar sekali dalam beberapa detik. Segera setelah kembali tidak kosong, kami yakin bahwa kami akhirnya telah menerima daftar suara terbaru.
Bug ini telah diperbaiki di versi iOS berikutnya, tetapi jangan kaget jika Anda melihat ini di aplikasi Anda.
Hal menarik yang saya temui saat meneliti dokumentasi: ada properti statis AVSpeechSynthesisVoiceAlexIdentifier. Ini adalah pengenal yang sangat menarik, karena pertama-tama tidak semua perangkat dapat membuat suara dengan pengenal ini. Kedua, tidak jelas bagi saya mengapa letaknya terpisah. Ketiga, jika Anda mendapatkan suara dengan pengenal ini, maka suara ini memiliki kelas yang unik dan berbeda.
Pada saat yang sama, studi tentang tajuk kerangka kerja tidak memberi saya sesuatu yang berguna dan menarik. Jika Anda mengetahui informasi apa pun tentang pengenal ini - mengapa diperlukan, mengapa itu muncul, tolong beri tahu saya. Saya belum bisa menemukan jawaban untuk pertanyaan ini.
Di sini Anda dapat melihat contoh bagaimana kami membuat di antarmuka pilihan suara berdasarkan lokal, jenis kelamin, dan bagaimana kami memberikan kemampuan untuk menentukan kecepatan akting suara untuk bahasa tertentu.
Saya akan secara singkat berbicara tentang sistem tanda untuk merekam transkripsi berdasarkan bahasa Latin. Saat Anda memberikan teks untuk akting suara, Anda dapat menentukan pengucapan kata-kata tertentu di dalamnya. Di iOS, ini dilakukan melalui NSAttributedString, dengan kunci khusus. Pembangkitan pengucapan ini tersedia langsung di perangkat iOS di bagian Aksesibilitas. Tetapi untuk volume besar, menurut saya ini sangat merepotkan, dan Anda dapat mengotomatiskan pembuatan transkripsi fonetik dengan cara lain.
Misalnya, berikut adalah gudang untuk bahasa Inggris yang memiliki kamus besar tentang korelasi dan pengucapan kata.
Slide memperlihatkan contoh bagaimana Anda bisa mengganti pengucapan kata tertentu untuk satu lokal. Dalam hal ini, adalah | tษหmษหtษส |, tomat.
Video akan diputar dari saat contoh didemonstrasikan.
Sekarang opsi telah dimainkan dengan atribut disetel ke pengucapan dan tanpa.
Secara total, kami mencari cara untuk membuat permintaan sintesis ucapan. Belajar bekerja dengan suara. Kami melihat solusi untuk salah satu bug yang mungkin Anda temui, dan melihat transkripsi fonetik, bagaimana Anda dapat menggunakannya.
Mari beralih ke pengenalan ucapan. Ini disajikan di iOS sebagai kerangka kerja yang disebut Speech, dan memungkinkan pengenalan ucapan langsung di perangkat Anda.
Sekitar 50 bahasa dan dialek didukung, tersedia mulai dari iOS 10. Pengenalan ucapan biasanya memerlukan koneksi internet. Namun untuk beberapa perangkat dan untuk beberapa bahasa, pengenalan dapat bekerja secara offline. Kita akan membicarakan hal ini di bagian keempat dari ceramah saya.
Pengenalan ucapan tersedia dari mikrofon dan file audio. Jika Anda ingin memberi pengguna kemampuan untuk mengenali ucapan dari mikrofon, maka pengguna harus memberikan izin untuk dua izin. Yang pertama adalah untuk akses ke mikrofon, yang kedua untuk fakta bahwa ucapannya akan dikirim ke server Apple untuk dikenali.
Sayangnya, di mana Anda hanya dapat menggunakan pengenalan offline, tidak mungkin untuk tidak meminta izin ini. Bagaimanapun juga itu harus diminta.
Daftar tersebut diambil dari situs web Apple. Ini adalah bahasa dan lokal yang tersedia untuk pengenalan ucapan. Namun nyatanya, ini adalah daftar bahasa dan lokal yang tersedia untuk dikte pada keyboard standar. Dan API kerangka kerja Pidato di balik terpal mengacu pada implementasi dikte dari keyboard standar.
Pengenalan ucapan gratis bagi kami sebagai pengembang, tetapi penggunaannya terbatas. Yang pertama adalah batas perangkat dan permintaan per hari. Yang kedua adalah batas total untuk aplikasi tersebut. Dan ketiga - Anda dapat mengenali maksimal satu menit. Satu-satunya pengecualian adalah mode offline. Di dalamnya Anda bisa melakukan pengenalan pesan audio yang sudah lama direkam.
Apple, tentu saja, tidak menyebutkan angka spesifik untuk batasan tersebut, dan seperti yang tertulis atau dikatakan dalam laporan WWDC, Anda perlu bersiap untuk menangani kesalahan dan menulis kepada mereka jika Anda sering, katakanlah, tersandung pada batasan ini. Tapi kami tidak punya masalah seperti itu. Untuk bahasa Rusia, kami menggunakan SpeechKit sebagai mesin pengenalan suara. Dan sebagian besar pengguna kami berbahasa Rusia, jadi kami belum menemui batasannya.
Juga, pastikan untuk memikirkan tentang privasi. Jangan izinkan suara bertindak pada data - sandi, data kartu kredit. Setiap informasi sensitif atau pribadi tidak boleh tersedia untuk dikenali.
Di slide, Anda dapat melihat diagram kondisional dari kelas yang terlibat dalam proses pengenalan suara. Mirip dengan sintesis, bekerja dengan pengenalan bekerja dengan besi audio, jadi AVAudioSession juga merupakan ketergantungan eksplisit di sini.
Dukung. Untuk mendapatkan satu set semua lokal yang didukung, Anda perlu mengakses properti halaman supportLocales. Dukungan untuk lokal tertentu umumnya tidak menjamin bahwa pengenalan ucapan saat ini tersedia untuk lokal itu. Misalnya, koneksi persisten ke server Apple mungkin diperlukan.
Dukungan lokal untuk pengenalan cocok dengan daftar lokal untuk dikte di keyboard di iOS. Berikut daftar lengkapnya . Untuk memastikan bahwa lokal tertentu dapat ditangani sekarang, Anda dapat menggunakan properti isAvailable.
Dalam pengenalan ucapan di iOS, tidak ada prioritas lokal untuk setiap bahasa, tidak seperti sintesis. Oleh karena itu, jika kita mengambil lokal pertama dari bahasa tertentu dari daftar semua lokal, maka mungkin ada beberapa yang bukan bahasa lokal yang paling populer. Oleh karena itu, untuk beberapa bahasa di Translator, kami telah membuat prioritas lokal tertentu untuk bahasa tertentu.
Misalnya, untuk bahasa Inggris kami menggunakan en-US. Pertama kali pengguna mencoba mengenali sesuatu dalam bahasa Inggris, kami menggunakan bahasa lokal Amerika.
Permintaan pengakuan dari file. Semuanya sederhana di sini. Anda perlu mendapatkan dan menautkan ke file tersebut, membuat objek SFSpeechRecognizer yang menunjukkan lokal yang ingin Anda gunakan. Periksa apakah pengenalan tersedia saat ini. Buat SFSpeechURLRecognitionRequest menggunakan konstruksi tempat Anda meneruskan jalur file. Dan mulai tugas pengenalan.
Akibatnya, Anda akan menerima kesalahan pengenalan atau akibatnya. Hasilnya memiliki properti isFinal, yang berarti hasil ini final dan dapat digunakan lebih lanjut.
Berikut adalah contoh yang sedikit lebih kompleks - permintaan pengenalan dari mikrofon. Untuk melakukannya, kita juga membutuhkan objek AVAudioEngine, yang bertanggung jawab untuk bekerja dengan mikrofon. Kami tidak akan membahas secara rinci tentang cara kerjanya. Anda mengatur kategori yang Anda inginkan - baik .record atau .playRecord. Nyalakan sesi audio. Konfigurasi AudioEngine dan berlangganan untuk menerima buffer audio dari mikrofon. Anda menambahkan mereka ke permintaan pengenalan dan setelah selesai mengenali Anda dapat keluar dari mikrofon.
Perlu diperhatikan bahwa properti shouldReportP PartialResults, yang bertanggung jawab untuk mengeluarkan hasil pengenalan sementara, disetel ke true. Mari kita lihat opsinya: seperti apa tampilan aplikasi dengan dan tanpa flag shouldReportP PartialResults.
Video akan diputar dari saat contoh didemonstrasikan.
Dalam contoh di sebelah kiri, saya meninggalkan respons mikrofon terhadap suara, hingga mengubah volume. Terlihat bahwa saya sedang mengatakan sesuatu. Tetapi sampai saya selesai berbicara, Anda tidak melihat apa-apa. Butuh waktu lama bagi pengguna untuk mendapatkan hasil dari apa yang didiktekannya.
Jika Anda menyetel shouldReportP PartialResults ke true dan menanganinya dengan benar, pengguna akan melihat apa yang dia katakan saat berbicara. Ini sangat nyaman dan merupakan cara yang tepat untuk melakukan antarmuka dalam hal dikte.
Berikut adalah contoh bagaimana kami menangani pekerjaan dengan sesi audio. Di dalam Translator, kami menggunakan tidak hanya bekerja dengan suara yang kami tulis, tetapi juga kerangka kerja lain yang dapat melakukan sesuatu dengan sesi audio.
Kami menulis pengontrol yang, pertama, memeriksa bahwa pengaturan, kategori adalah yang kami butuhkan, dan kedua, itu tidak melakukan apa yang terus-menerus menghidupkan dan mematikan sesi audio.
Bahkan sebelum pengembangan mode dialog, input suara dan sulih suara kami sendiri mengaktifkan dan menonaktifkan sesi audio. Saat kami mulai membuat mode dialog, ternyata mode on-off ini menambah penundaan ekstra antara saat Anda mengatakan sesuatu dan mendapatkan akting suara.
Untuk permintaan pengenalan ucapan, Anda dapat menentukan petunjuk - jenis ucapan yang akan dikenali. Ini bisa tidak ditentukan, dikte, pencarian, atau konfirmasi singkat. Lebih sering daripada tidak, jika pengguna Anda akan mengatakan sesuatu yang panjang, dikte lebih baik.
Dimulai dengan iOS 13, analitik audio tersedia untuk kami. Slide tersebut menunjukkan parameter yang dapat diperoleh sebagai hasil dari ucapan yang dikenali. Artinya, Anda akan menerima sebagai hasil tidak hanya apa yang dikatakan pengguna, tetapi juga suara apa yang dia ucapkan.
Kami tidak akan memikirkan ini untuk waktu yang lama. Berikut adalah contoh bagaimana Anda bisa mendapatkan analitik sebagai hasil dari teks yang dikenali.
Secara total, kami mempelajari kapabilitas kerangka kerja Speech untuk pengenalan ucapan, mempelajari cara memberi petunjuk untuk pengenalan ucapan, dan dengan cepat melihat kemampuan analitik.
Dan yang tak kalah pentingnya: bekerja secara offline. Hal pertama yang ingin saya bicarakan adalah daftar bahasa offline untuk sintesis ucapan. Tidak ada di dokumentasi mana pun saya menemukan penyebutan tentang bagaimana Anda dapat mengunduh suara secara eksplisit untuk bekerja secara offline. Baik laporan maupun dokumentasinya mengatakan bahwa suara-suara ini dapat diunduh, tetapi tidak tertulis.
Saya mencari sistem dan menemukan bahwa jika Anda pergi ke Pengaturan, ke bagian Aksesibilitas, lalu "Konten lisan" dan "Suara", Anda akan melihat, pertama, daftar bahasa yang tersedia. Kedua, dengan beralih ke bahasa tertentu, Anda dapat mengunduh suara baru.
Dan daftar ini jelas cocok dengan apa yang dikembalikan AVSpeechSynthesisVoice.speechVoices di dalam aplikasi. Ini berarti Anda dapat mengajari pengguna Anda bahwa mereka dapat mengunduh bahasa yang mereka butuhkan untuk menggunakan text-to-speech secara offline.
Daftar bahasa offline untuk pengenalan. Ini tidak secara eksplisit ditunjukkan di mana pun dalam dokumentasi, tetapi dilihat dari forum yang berbeda dan dari apa yang kami temukan, ini adalah daftar bahasa dan lokal untuk mereka yang dapat bekerja secara offline tanpa akses Internet.
Perlu dicatat bahwa pengenalan offline tersedia di perangkat dengan chip A9 dan yang lebih lama.
Sekarang tiba bagian menyenangkan. Daftar bahasa offline untuk pengenalan ucapan. Tidak seperti sintesis, pada umumnya tidak ada cara untuk mengunduh bahasa untuk Anda sendiri secara eksplisit. Jika Anda menambahkan bahasa ke keyboard standar, paket offline dapat diunduh untuk itu. Sayangnya, ini bukan deterministik. Buka Pengaturan> Umum> Keyboard> Dikte. Misalnya, saya menambahkan bahasa Spanyol. Setelah itu, di bawah "Dikte" muncul petunjuk kecil bahwa dikte mungkin tersedia untuk bahasa-bahasa ini. Bahasa Spanyol muncul di sana.
Kemudian saya membuka aplikasi kami, mematikan internet, dan saya senang karena pengenalan offline dalam bahasa Spanyol berhasil.
Sayangnya, ini hanya dapat dipengaruhi secara tidak langsung, satu-satunya cara adalah menambahkan bahasa ke keyboard standar. Tetapi ini tidak menjamin bahwa paket pengenalan luring akan diunduh.
Di iOS, bahkan jika Anda memiliki akses ke Internet di ponsel Anda, Anda dapat menyalakan perangkat dan melakukan pengenalan ucapan di atasnya, jika pengenalan tersedia, tentunya.
Ada properti supportOnDeviceRecognition, ini tersedia sejak iOS 13. Tetapi properti ini tidak berfungsi dengan benar, saya menunjukkan tangkapan layar kesalahan di kanan bawah. Bug hanya diperbaiki di 13.2. Properti selalu mengembalikan nilai salah pada permintaan pertama. Menurut Apple, itu akan mengembalikan nilai yang benar setelah beberapa detik.
Selain itu, properti ini bisa memberikan nilai salah, tetapi pada saat yang sama menyetel tanda requireOnDeviceRecognition ke true berhasil. Ini berarti bahwa pengenalan tersebut berfungsi sepenuhnya di perangkat, meskipun flag pengujian ini menampilkan false.
Mungkin ada beberapa solusi di sini. Pertama, Anda hanya dapat melakukan pengenalan offline di iOS 13.2. Kedua, Anda dapat memilih jumlah detik tertentu untuk meminta ulang properti ini dan memperbarui antarmuka pengguna. Dan ketiga, Anda bisa melupakan properti ini: coba kenali suara itu secara offline, dan jika terjadi kesalahan, tunjukkan saja kepada pengguna.
Kami melihat bagaimana Anda dapat secara eksplisit mengunduh paket sintesis ucapan offline, dan menemukan cara untuk mencoba memaksa iOS mengunduh paket pengenalan ucapan offline.
Sekarang Anda tahu cara menambahkan sintesis dan pengenalan ucapan dengan cepat ke aplikasi Anda. Saya memiliki segalanya, terima kasih atas perhatian Anda.