Pustaka ucapan-ke-teks untuk React Native.
benang tambahkan @react-native-voice/voice# ornpm i @react-native-voice/voice --save
Tautkan paket iOS
npx instalasi pod
Menghubungkan
Tautkan Android secara manual
Tautkan iOS secara manual
Plugin Pra-bangun
Penggunaan
Contoh
API
Acara
Izin
Android
iOS
Kontributor
Tautkan NativeModule secara manual atau otomatis
tautan reaksi-asli @react-native-voice/voice
Di android/setting.gradle
... termasuk ':@react-native-voice_voice', ':app'project(':@react-native-voice_voice').projectDir = File baru(rootProject.projectDir, '../node_modules/@react-native-voice/ suara/android')
Di android/app/build.gradle
...ketergantungan {... kompilasi proyek(':@react-native-voice_voice') }
Di MainApplication.java
impor android.app.Application;impor com.facebook.react.ReactApplication;impor com.facebook.react.ReactPackage; ...impor com.wenkesj.voice.VoicePackage; // <------ Tambahkan ini!...public class MainActivity extends Aktivitas mengimplementasikan ReactApplication { ...@Overrideprotected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList(new MainReactPackage(),new VoicePackage() // <------ Tambahkan ini!); } }
Seret Voice.xcodeproj dari folder @react-native-voice/voice/ios ke grup Libraries di Xcode di proyek Anda. Tautan manual
Klik pada file proyek utama Anda (yang mewakili .xcodeproj) pilih Build Phases dan seret perpustakaan statis, lib.Voice.a, dari folder Libraries/Voice.xcodeproj/Products ke Link Binary With Libraries
Paket ini tidak dapat digunakan di aplikasi "Expo Go" karena memerlukan kode asli khusus.
Setelah menginstal paket npm ini, tambahkan plugin config ke array plugins
app.json
atau app.config.js
Anda:
{ "expo": {"plugin": ["@react-native-voice/voice"] } }
Berikutnya, buat ulang aplikasi Anda seperti yang dijelaskan dalam panduan "Menambahkan kode asli khusus".
Plugin ini menyediakan alat peraga untuk penyesuaian ekstra. Setiap kali Anda mengubah props atau plugin, Anda harus membangun kembali (dan prebuild
) aplikasi asli. Jika tidak ada properti tambahan yang ditambahkan, default akan digunakan.
speechRecognition
( string | false ): Menyetel pesan untuk kunci NSSpeechRecognitionUsageDescription
di pesan Info.plist
. Jika tidak ditentukan, pesan izin default akan digunakan. Jika false
, izin akan dilewati.
microphone
( string | false ): Menyetel pesan untuk kunci NSMicrophoneUsageDescription
di Info.plist
. Jika tidak ditentukan, pesan izin default akan digunakan. Jika false
, android.permission.RECORD_AUDIO
tidak akan ditambahkan ke AndroidManifest.xml
dan izin iOS akan dilewati.
{ "plugin": [ ["@reaksi-asli-suara/suara", {"microphonePermission": "CUSTOM: Izinkan $(PRODUK_NAME) mengakses mikrofon","speechRecognitionPermission": "CUSTOM: Izinkan $(PRODUK_NAME) mengenali ucapan pengguna dengan aman" } ] ] }
Contoh lengkap untuk Android dan iOS.
import Suara dari '@react-native-voice/voice';impor React, {Component} dari 'react';class VoiceTest extends Component { konstruktor(alat peraga) {Voice.onSpeechStart = this.onSpeechStartHandler.bind(ini);Voice.onSpeechEnd = this.onSpeechEndHandler.bind(ini);Voice.onSpeechResults = this.onSpeechResultsHandler.bind(ini); } onStartButtonPress(e){Voice.start('en-US'); } ...}
Akses statis ke Voice API.
Semua metode sekarang mengembalikan new Promise
untuk kompatibilitas async/await
.
Nama Metode | Keterangan | Platform |
---|---|---|
Suara.Tersedia() | Memeriksa apakah layanan pengenalan suara tersedia di sistem. | Android, iOS |
Voice.start(lokal) | Mulai mendengarkan pidato untuk lokasi tertentu. Mengembalikan null jika tidak terjadi kesalahan. | Android, iOS |
Suara.berhenti() | Berhenti mendengarkan pidato. Mengembalikan null jika tidak terjadi kesalahan. | Android, iOS |
Suara.batal() | Membatalkan pengenalan ucapan. Mengembalikan null jika tidak terjadi kesalahan. | Android, iOS |
Suara.hancurkan() | Hancurkan instance SpeechRecognizer saat ini. Mengembalikan null jika tidak terjadi kesalahan. | Android, iOS |
Suara.removeAllListeners() | Membersihkan/membatalkan metode statis Voice yang diganti. | Android, iOS |
Suara.isRecognizing() | Kembali jika SpeechRecognizer mengenali. | Android, iOS |
Suara.getSpeechRecognitionServices() | Mengembalikan daftar mesin pengenalan suara yang tersedia di perangkat. (Contoh: ['com.google.android.googlequicksearchbox'] jika hanya Google yang tersedia.) | Android |
Callback yang dipanggil ketika peristiwa asli dipancarkan.
Nama Acara | Keterangan | Peristiwa | Platform |
---|---|---|---|
Voice.onSpeechStart(acara) | Dipanggil ketika .start() dipanggil tanpa kesalahan. | { error: false } | Android, iOS |
Voice.onSpeechRecognized (acara) | Dipanggil ketika ucapan dikenali. | { error: false } | Android, iOS |
Voice.onSpeechEnd(acara) | Dipanggil ketika SpeechRecognizer berhenti mengenali. | { error: false } | Android, iOS |
Voice.onSpeechError(acara) | Dipanggil ketika terjadi kesalahan. | { error: Description of error as string } | Android, iOS |
Voice.onSpeechResults (acara) | Dipanggil ketika SpeechRecognizer selesai mengenali. | { value: [..., 'Speech recognized'] } | Android, iOS |
Voice.onSpeechPartialResults(acara) | Dipanggil ketika hasil apa pun dihitung. | { value: [..., 'Partial speech recognized'] } | Android, iOS |
Voice.onSpeechVolumeChanged (acara) | Dipanggil ketika nada yang dikenali berubah. | { value: pitch in dB } | Android |
Bisa dibilang bagian yang paling penting.
Meskipun aplikasi VoiceTest
yang disertakan berfungsi tanpa pemeriksaan dan permintaan izin eksplisit, mungkin perlu menambahkan permintaan izin untuk RECORD_AUDIO
untuk beberapa konfigurasi. Sejak Android M (6.0), pengguna perlu memberikan izin saat runtime (dan bukan saat instalasi aplikasi). Secara default, memanggil metode startSpeech
akan memunculkan popup izin RECORD AUDIO
kepada pengguna. Ini dapat dinonaktifkan dengan meneruskan REQUEST_PERMISSIONS_AUTO: true
dalam argumen opsi.
Jika Anda menjalankan aplikasi expo/expokit yang dikeluarkan, Anda mungkin mengalami masalah dengan izin di Android dan mendapatkan kesalahan berikut host.exp.exponent.MainActivity cannot be cast to com.facebook.react.ReactActivity startSpeech
. Hal ini dapat diatasi dengan meminta izin menggunakan paket expo-permission
sebelum memulai pengenalan.
import { Izin } dari "expo";async komponenDidMount() {const { status, kadaluarsa, izin } = menunggu Izin.askAsync(Permissions.AUDIO_RECORDING);if (status !== "diberikan") {//Izin tidak diberikan. Jangan tampilkan tombol mulai merekam karena akan menimbulkan masalah jika ditekan.this.setState({showRecordButton: false});} else {this.setState({showRecordButton: true});}}
Catatan di Android
Bahkan setelah semua izin di Android sudah benar, ada satu hal lagi yang harus memastikan perpustakaan ini berfungsi dengan baik di Android. Pastikan perangkat memiliki Mesin Pengenalan Ucapan Google seperti com.google.android.googlequicksearchbox
dengan menelepon Voice.getSpeechRecognitionServices()
. Karena ponsel Android dapat dikonfigurasi dengan begitu banyak opsi, meskipun perangkat memiliki mesin googlequicksearchbox, perangkat tersebut dapat dikonfigurasi untuk menggunakan layanan lain. Anda dapat memeriksa layanan mana yang digunakan untuk Aplikasi Bantuan Suara dalam langkah-langkah berikut untuk sebagian besar ponsel Android:
Settings > App Management > Default App > Assistive App and Voice Input > Assistive App
Alur di atas dapat bervariasi tergantung pada model dan pabrikan Android. Untuk ponsel Huawei, ada kemungkinan perangkat tidak dapat menginstal Layanan Google.
Bagaimana saya bisa mendapatkan com.google.android.googlequicksearchbox
di perangkat?
Harap minta pengguna untuk memasang Aplikasi Google Penelusuran.
Perlu menyertakan izin untuk NSMicrophoneUsageDescription
dan NSSpeechRecognitionUsageDescription
di dalam Info.plist untuk iOS. Lihat VoiceTest
yang disertakan untuk mengetahui cara menangani kasus ini.
<diktekan> ... <key>Deskripsi Penggunaan NSMicrophone</key> <string>Deskripsi mengapa Anda memerlukan penggunaan mikrofon</string> <key>NSSpeechRecognitionUsageDescription</key> <string>Deskripsi mengapa Anda memerlukan penggunaan pengenalan suara</string> ... </dikt>
Silakan lihat dokumentasi yang disediakan oleh ReactNative untuk ini: PermissionsAndroid
@asafron
@BrendanFDMoore
@brudny
@chitezh
@jika salju
@jamsch
@misino
@Noitidart
@ohtangza & @hayanmind
@rudiedev6
@tdonia
@wenkesj