Библиотека преобразования речи в текст для React Native.
пряжа добавить @react-native-voice/voice# ornpm i @react-native-voice/voice --save
Свяжите пакет iOS
установка модуля npx
Связывание
Связать Android вручную
Связать iOS вручную
Предварительная сборка плагина
Использование
Пример
API
События
Разрешения
Андроид
iOS
Авторы
Вручную или автоматически свяжите NativeModule.
ссылка на реакцию @react-native-voice/voice
В android/setting.gradle
... include ':@react-native-voice_voice', ':app'project(':@react-native-voice_voice').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-voice/ голос/андроид')
В android/app/build.gradle
...зависимости {... скомпилировать проект(':@react-native-voice_voice') }
В MainApplication.java
импортировать android.app.Application;импортировать com.facebook.react.ReactApplication;импортировать com.facebook.react.ReactPackage; ... импортировать com.wenkesj.voice.VoicePackage; // <------ Добавьте это!...public class MainActivity расширяет Activity реализует ReactApplication { ...@Overrideprotected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList(new MainReactPackage(),new VoicePackage() // <------ Добавьте это!); } }
Перетащите Voice.xcodeproj из папки @react-native-voice/voice/ios в группу «Библиотеки» в Xcode вашего проекта. Ручное связывание
Щелкните основной файл проекта (тот, который представляет .xcodeproj), выберите «Фазы сборки» и перетащите статическую библиотеку lib.Voice.a из папки Libraries/Voice.xcodeproj/Products, чтобы связать двоичный файл с библиотеками.
Этот пакет нельзя использовать в приложении Expo Go, поскольку для него требуется собственный собственный код.
После установки этого пакета npm добавьте плагин конфигурации в массив plugins
вашего app.json
или app.config.js
:
{ "expo": {"plugins": ["@react-native-voice/voice"] } }
Затем перестройте приложение, как описано в руководстве «Добавление собственного собственного кода».
Плагин предоставляет возможности для дополнительной настройки. Каждый раз, когда вы меняете реквизиты или плагины, вам нужно будет пересобрать (и prebuild
) собственное приложение. Если дополнительные свойства не добавлены, будут использоваться значения по умолчанию.
speechRecognition
( string | false ): устанавливает сообщение для ключа NSSpeechRecognitionUsageDescription
в сообщении Info.plist
. Если значение не определено, будет использоваться сообщение о разрешении по умолчанию. Если false
, разрешение будет пропущено.
microphone
( строка | false ): устанавливает сообщение для ключа NSMicrophoneUsageDescription
в Info.plist
. Если значение не определено, будет использоваться сообщение о разрешении по умолчанию. Если false
, android.permission.RECORD_AUDIO
не будет добавлен в AndroidManifest.xml
, а разрешение iOS будет пропущено.
{ "плагины": [ [ "@react-native-voice/voice", {"microphonePermission": "CUSTOM: разрешите $(PRODUCT_NAME) доступ к микрофону", "speechRecognitionPermission": "CUSTOM: разрешите $(PRODUCT_NAME) безопасно распознавать речь пользователя" } ] ] }
Полный пример для Android и iOS.
импортировать голос из «@react-native-voice/voice»; импортировать React, {Component} из «реагировать»; класс VoiceTest расширяет компонент { конструктор (реквизит) {Voice.onSpeechStart = this.onSpeechStartHandler.bind(this);Voice.onSpeechEnd = this.onSpeechEndHandler.bind(this);Voice.onSpeechResults = this.onSpeechResultsHandler.bind(this); } onStartButtonPress(e){Voice.start('en-US'); } ...}
Статический доступ к Voice API.
Все методы теперь возвращают new Promise
для совместимости async/await
.
Имя метода | Описание | Платформа |
---|---|---|
Голос.isAvailable() | Проверяет, доступна ли в системе служба распознавания речи. | Андроид, iOS |
Voice.start(локаль) | Начинает прослушивать речь для определенной локали. Возвращает ноль, если ошибок не происходит. | Андроид, iOS |
Голос.стоп() | Перестает прислушиваться к речи. Возвращает ноль, если ошибок не происходит. | Андроид, iOS |
Голос.отмена() | Отменяет распознавание речи. Возвращает ноль, если ошибок не происходит. | Андроид, iOS |
Голос.уничтожить() | Уничтожает текущий экземпляр SpeechRecouncer. Возвращает ноль, если ошибок не происходит. | Андроид, iOS |
Voice.removeAllListeners() | Очищает/обнуляет переопределенные статические методы Voice . | Андроид, iOS |
Voice.isRecogniting() | Возврат, если SpeechRecouncer распознает. | Андроид, iOS |
Voice.getSpeechRecognitionServices() | Возвращает список механизмов распознавания речи, доступных на устройстве. (Пример: ['com.google.android.googlequicksearchbox'] если доступен только Google.) | Андроид |
Обратные вызовы, которые вызываются при возникновении собственного события.
Название события | Описание | Событие | Платформа |
---|---|---|---|
Voice.onSpeechStart(событие) | Вызывается, когда .start() вызывается без ошибки. | { error: false } | Андроид, iOS |
Voice.onSpeechRecounced(событие) | Вызывается при распознавании речи. | { error: false } | Андроид, iOS |
Voice.onSpeechEnd(событие) | Вызывается, когда SpeechRecouncer прекращает распознавание. | { error: false } | Андроид, iOS |
Voice.onSpeechError(событие) | Вызывается при возникновении ошибки. | { error: Description of error as string } | Андроид, iOS |
Voice.onSpeechResults(событие) | Вызывается, когда SpeechRecouncer завершает распознавание. | { value: [..., 'Speech recognized'] } | Андроид, iOS |
Voice.onSpeechPartialResults(событие) | Вызывается при вычислении каких-либо результатов. | { value: [..., 'Partial speech recognized'] } | Андроид, iOS |
Voice.onSpeechVolumeChanged(событие) | Вызывается, когда распознанная высота звука изменилась. | { value: pitch in dB } | Андроид |
Пожалуй, самая важная часть.
Хотя включенное приложение VoiceTest
работает без явных проверок и запросов разрешений, для некоторых конфигураций может потребоваться добавить запрос разрешения для RECORD_AUDIO
. Начиная с Android M (6.0), пользователю необходимо предоставить разрешение во время выполнения (а не во время установки приложения). По умолчанию вызов метода startSpeech
вызывает всплывающее окно разрешения RECORD AUDIO
для пользователя. Это можно отключить, передав REQUEST_PERMISSIONS_AUTO: true
в аргументе параметров.
Если вы используете удаленное приложение expo/expokit, вы можете столкнуться с проблемами с разрешениями на Android и получить следующую ошибку: host.exp.exponent.MainActivity cannot be cast to com.facebook.react.ReactActivity startSpeech
. Эту проблему можно решить, запросив разрешение с помощью пакета expo-permission
перед началом распознавания.
import { Разрешения } from "expo";async компонентDidMount() {const {status, expires, Permissions } = await Permissions.askAsync(Permissions.AUDIO_RECORDING);if (статус !== "предоставлено") {//Разрешения не предоставлены. Не показывайте кнопку начала записи, поскольку при ее нажатии возникнут проблемы.this.setState({showRecordButton: false});} else {this.setState({showRecordButton: true});}}
Заметки на Android
Даже после того, как все разрешения в Android заданы правильно, остается еще одна вещь, позволяющая убедиться, что эта библиотека работает нормально на Android. Убедитесь, что на устройстве установлена система распознавания речи Google, например com.google.android.googlequicksearchbox
вызвав Voice.getSpeechRecognitionServices()
. Поскольку в телефонах Android можно настроить множество опций, даже если на устройстве есть механизм Googlequicksearchbox, его можно настроить на использование других сервисов. Вы можете проверить, какая служба используется для приложения Voice Assistive, выполнив следующие действия для большинства телефонов Android:
Settings > App Management > Default App > Assistive App and Voice Input > Assistive App
Вышеуказанный поток может варьироваться в зависимости от модели и производителя Android. На телефонах Huawei может возникнуть вероятность того, что на устройство не удастся установить службы Google.
Как я могу получить com.google.android.googlequicksearchbox
на устройстве?
Попросите пользователей установить приложение Google Search.
Необходимо включить разрешения для NSMicrophoneUsageDescription
и NSSpeechRecognitionUsageDescription
внутри Info.plist для iOS. См. прилагаемый VoiceTest
, чтобы узнать, как действовать в таких случаях.
<диктат> ... <key>NSMicrophoneUsageDescription</key> <string>Описание того, почему вам необходимо использовать микрофон</string> <key>NSSpeechRecognitionUsageDescription</key> <string>Описание того, почему вам необходимо использовать распознавание речи</string> ... </dict>
Для этого ознакомьтесь с документацией, предоставленной ReactNative: PermissionsAndroid.
@asafron
@BrendanFDMoore
@brudny
@chitezh
@ifsnow
@jamsch
@misino
@Noitidart
@ohtangza и @hayanmind
@rudiedev6
@tdonia
@wenkesj