Eine Speech-to-Text-Bibliothek für React Native.
Yarn add @react-native-voice/voice# ornpm i @react-native-voice/voice --save
Verknüpfen Sie das iOS-Paket
Npx-Pod-Installation
Verlinkung
Android manuell verknüpfen
iOS manuell verknüpfen
Vorgefertigtes Plugin
Verwendung
Beispiel
API
Veranstaltungen
Berechtigungen
Android
iOS
Mitwirkende
Verknüpfen Sie das NativeModule manuell oder automatisch
React-Native-Link @react-native-voice/voice
In android/setting.gradle
... include ':@react-native-voice_voice', ':app'project(':@react-native-voice_voice').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-voice/ Stimme/Android‘)
In android/app/build.gradle
...Abhängigkeiten {... Projekt kompilieren(':@react-native-voice_voice') }
In MainApplication.java
import android.app.Application;import com.facebook.react.ReactApplication;import com.facebook.react.ReactPackage; ...import com.wenkesj.voice.VoicePackage; // <------ Füge dies hinzu!...public class MainActivity erweitert Activity implementiert ReactApplication { ...@Overrideprotected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList(new MainReactPackage(),new VoicePackage() // <------ Add this!); } }
Ziehen Sie Voice.xcodeproj aus dem Ordner @react-native-voice/voice/ios in die Gruppe „Bibliotheken“ auf Xcode in Ihrem Projekt. Manuelle Verlinkung
Klicken Sie auf Ihre Hauptprojektdatei (diejenige, die .xcodeproj darstellt), wählen Sie „Build Phases“ aus und ziehen Sie die statische Bibliothek lib.Voice.a aus dem Ordner „Libraries/Voice.xcodeproj/Products“ in „Link Binary With Libraries“.
Dieses Paket kann nicht in der „Expo Go“-App verwendet werden, da es benutzerdefinierten nativen Code erfordert.
Fügen Sie nach der Installation dieses npm-Pakets das Konfigurations-Plugin zum plugins
Array Ihrer app.json
oder app.config.js
hinzu:
{ "expo": {"plugins": ["@react-native-voice/voice"] } }
Erstellen Sie als Nächstes Ihre App neu, wie in der Anleitung „Hinzufügen von benutzerdefiniertem nativen Code“ beschrieben.
Das Plugin bietet Requisiten für zusätzliche Anpassungen. Jedes Mal, wenn Sie die Requisiten oder Plugins ändern, müssen Sie die native App neu erstellen (und prebuild
). Wenn keine zusätzlichen Eigenschaften hinzugefügt werden, werden Standardwerte verwendet.
speechRecognition
( string | false ): Legt die Nachricht für den NSSpeechRecognitionUsageDescription
-Schlüssel in der Info.plist
-Nachricht fest. Wenn es nicht definiert ist, wird eine Standard-Berechtigungsnachricht verwendet. Bei false
wird die Berechtigung übersprungen.
microphone
( Zeichenfolge | false ): Legt die Nachricht für den NSMicrophoneUsageDescription
-Schlüssel in der Info.plist
fest. Wenn es nicht definiert ist, wird eine Standard-Berechtigungsnachricht verwendet. Bei false
wird android.permission.RECORD_AUDIO
nicht zur AndroidManifest.xml
hinzugefügt und die iOS-Berechtigung wird übersprungen.
{ "Plugins": [ [ "@react-native-voice/voice", {"microphonePermission": "CUSTOM: Erlaube $(PRODUCT_NAME) den Zugriff auf das Mikrofon", "speechRecognitionPermission": "CUSTOM: Erlaube $(PRODUCT_NAME), die Sprache des Benutzers sicher zu erkennen" } ] ] }
Vollständiges Beispiel für Android und iOS.
Importiere Stimme aus '@react-native-voice/voice';importiere React, {Component} aus 'react';class VoiceTest erweitert Component { Konstruktor(props) {Voice.onSpeechStart = this.onSpeechStartHandler.bind(this);Voice.onSpeechEnd = this.onSpeechEndHandler.bind(this);Voice.onSpeechResults = this.onSpeechResultsHandler.bind(this); } onStartButtonPress(e){Voice.start('en-US'); } ...}
Statischer Zugriff auf die Voice-API.
Alle Methoden geben jetzt ein new Promise
für async/await
-Kompatibilität zurück.
Methodenname | Beschreibung | Plattform |
---|---|---|
Voice.isAvailable() | Überprüft, ob ein Spracherkennungsdienst auf dem System verfügbar ist. | Android, iOS |
Voice.start(Gebietsschema) | Beginnt mit dem Hören auf Sprache für ein bestimmtes Gebietsschema. Gibt null zurück, wenn kein Fehler auftritt. | Android, iOS |
Voice.stop() | Hört auf, auf Sprache zu hören. Gibt null zurück, wenn kein Fehler auftritt. | Android, iOS |
Voice.cancel() | Bricht die Spracherkennung ab. Gibt null zurück, wenn kein Fehler auftritt. | Android, iOS |
Voice.destroy() | Zerstört die aktuelle SpeechRecognizer-Instanz. Gibt null zurück, wenn kein Fehler auftritt. | Android, iOS |
Voice.removeAllListeners() | Bereinigt/nulliert überschriebene statische Voice -Methoden. | Android, iOS |
Voice.isRecognizing() | Gibt zurück, wenn der SpeechRecognizer erkennt. | Android, iOS |
Voice.getSpeechRecognitionServices() | Gibt eine Liste der auf dem Gerät verfügbaren Spracherkennungs-Engines zurück. (Beispiel: ['com.google.android.googlequicksearchbox'] wenn nur Google verfügbar ist.) | Android |
Rückrufe, die aufgerufen werden, wenn ein natives Ereignis ausgegeben wird.
Ereignisname | Beschreibung | Ereignis | Plattform |
---|---|---|---|
Voice.onSpeechStart(Ereignis) | Wird aufgerufen, wenn .start() ohne Fehler aufgerufen wird. | { error: false } | Android, iOS |
Voice.onSpeechRecognized(Ereignis) | Wird aufgerufen, wenn Sprache erkannt wird. | { error: false } | Android, iOS |
Voice.onSpeechEnd(Ereignis) | Wird aufgerufen, wenn SpeechRecognizer die Erkennung stoppt. | { error: false } | Android, iOS |
Voice.onSpeechError(Ereignis) | Wird aufgerufen, wenn ein Fehler auftritt. | { error: Description of error as string } | Android, iOS |
Voice.onSpeechResults(event) | Wird aufgerufen, wenn SpeechRecognizer die Erkennung abgeschlossen hat. | { value: [..., 'Speech recognized'] } | Android, iOS |
Voice.onSpeechPartialResults(event) | Wird aufgerufen, wenn Ergebnisse berechnet werden. | { value: [..., 'Partial speech recognized'] } | Android, iOS |
Voice.onSpeechVolumeChanged(Ereignis) | Wird aufgerufen, wenn sich die erkannte Tonhöhe geändert hat. | { value: pitch in dB } | Android |
Wohl der wichtigste Teil.
Während die mitgelieferte VoiceTest
App ohne explizite Berechtigungsprüfungen und -anfragen funktioniert, kann es für einige Konfigurationen erforderlich sein, eine Berechtigungsanfrage für RECORD_AUDIO
hinzuzufügen. Seit Android M (6.0) muss der Benutzer die Berechtigung zur Laufzeit erteilen (und nicht während der App-Installation). Standardmäßig ruft der Aufruf der startSpeech
-Methode das Popup-Fenster mit RECORD AUDIO
Berechtigung für den Benutzer auf. Dies kann durch Übergabe von REQUEST_PERMISSIONS_AUTO: true
im Optionsargument deaktiviert werden.
Wenn Sie eine ausgeworfene expo/expokit-App ausführen, können Probleme mit Berechtigungen auf Android auftreten und die folgende Fehlermeldung erhalten: host.exp.exponent.MainActivity cannot be cast to com.facebook.react.ReactActivity startSpeech
. Dies kann behoben werden, indem Sie vor Beginn der Erkennung mithilfe des expo-permission
-Pakets um eine Berechtigung bitten.
import { Permissions } from "expo";async ComponentDidMount() {const { Status, Expires, Permissions } = Wait Permissions.askAsync(Permissions.AUDIO_RECORDING);if (status !== "granted") {//Berechtigungen nicht gewährt. Die Schaltfläche zum Starten der Aufnahme wird nicht angezeigt, da es zu Problemen kommt, wenn sie gedrückt wird.this.setState({showRecordButton: false});} else {this.setState({showRecordButton: true});}}
Hinweise zu Android
Auch wenn alle Berechtigungen in Android korrekt sind, gibt es noch eine letzte Sache, um sicherzustellen, dass diese Bibliothek unter Android einwandfrei funktioniert. Bitte stellen Sie sicher, dass das Gerät über eine Google-Spracherkennungs-Engine wie com.google.android.googlequicksearchbox
verfügt, indem Sie Voice.getSpeechRecognitionServices()
aufrufen. Da Android-Telefone mit so vielen Optionen konfiguriert werden können, könnte ein Gerät, selbst wenn es über die GoogleQuickSearchBox-Engine verfügt, für die Verwendung anderer Dienste konfiguriert werden. Sie können für die meisten Android-Telefone in den folgenden Schritten überprüfen, welcher Dienst für die Voice Assistive App verwendet wird:
Settings > App Management > Default App > Assistive App and Voice Input > Assistive App
Der obige Ablauf kann je nach Android-Modell und Hersteller variieren. Bei Huawei-Telefonen besteht möglicherweise die Möglichkeit, dass das Gerät die Google-Dienste nicht installieren kann.
Wie kann ich com.google.android.googlequicksearchbox
auf dem Gerät installieren?
Bitten Sie die Nutzer, die Google Search App zu installieren.
Es müssen Berechtigungen für NSMicrophoneUsageDescription
und NSSpeechRecognitionUsageDescription
in Info.plist für iOS eingefügt werden. Informationen zum Umgang mit diesen Fällen finden Sie im mitgelieferten VoiceTest
.
<dict> ... <key>NSMicrophoneUsageDescription</key> <string>Beschreibung, warum Sie die Verwendung des Mikrofons benötigen</string> <key>NSSpeechRecognitionUsageDescription</key> <string>Beschreibung, warum Sie die Verwendung der Spracherkennung benötigen</string> ... </dict>
Weitere Informationen finden Sie in der von ReactNative bereitgestellten Dokumentation: PermissionsAndroid
@asafron
@BrendanFDMoore
@brudny
@chitezh
@ifsnow
@jamsch
@misino
@Noitidart
@ohtangza & @hayanmind
@rudiedev6
@tdonia
@wenkesj