Uma biblioteca de conversão de fala em texto para React Native.
fio adicionar @react-native-voice/voice# ornpm i @react-native-voice/voice --save
Vincule o pacote iOS
instalação de pod npx
Vinculando
Vincular manualmente o Android
Vincular iOS manualmente
Plug-in de pré-construção
Uso
Exemplo
API
Eventos
Permissões
Android
iOS
Colaboradores
Vincule manual ou automaticamente o NativeModule
link react-nativo @react-native-voice/voice
Em android/setting.gradle
... incluir ':@react-native-voice_voice', ':app'project(':@react-native-voice_voice').projectDir = novo arquivo(rootProject.projectDir, '../node_modules/@react-native-voice/ voz/android')
Em android/app/build.gradle
...dependências {... compilar projeto(':@react-native-voice_voice') }
Em MainApplication.java
importar android.app.Application;importar com.facebook.react.ReactApplication;importar com.facebook.react.ReactPackage; ...importar com.wenkesj.voice.VoicePackage; // <------ Adicione isto!...public class MainActivity estende Activity implements ReactApplication { ...@Overrideprotected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList(new MainReactPackage(),new VoicePackage() // <------ Adicione isto!); } }
Arraste Voice.xcodeproj da pasta @react-native-voice/voice/ios para o grupo Bibliotecas no Xcode em seu projeto. Vinculação manual
Clique no arquivo principal do seu projeto (aquele que representa o .xcodeproj), selecione Build Phases e arraste a biblioteca estática, lib.Voice.a, da pasta Libraries/Voice.xcodeproj/Products para vincular binário com bibliotecas
Este pacote não pode ser usado no aplicativo "Expo Go" porque requer código nativo personalizado.
Depois de instalar este pacote npm, adicione o plugin de configuração ao array plugins
do seu app.json
ou app.config.js
:
{ "expo": {"plugins": ["@react-native-voice/voice"] } }
Em seguida, reconstrua seu aplicativo conforme descrito no guia "Adicionando código nativo personalizado".
O plugin fornece acessórios para personalização extra. Cada vez que você alterar os acessórios ou plug-ins, precisará reconstruir (e prebuild
) o aplicativo nativo. Se nenhuma propriedade extra for adicionada, os padrões serão usados.
speechRecognition
( string | false ): define a mensagem para a chave NSSpeechRecognitionUsageDescription
na mensagem Info.plist
. Quando indefinido, uma mensagem de permissão padrão será usada. Quando false
, a permissão será ignorada.
microphone
( string | false ): Define a mensagem para a chave NSMicrophoneUsageDescription
no Info.plist
. Quando indefinido, uma mensagem de permissão padrão será usada. Quando false
, o android.permission.RECORD_AUDIO
não será adicionado ao AndroidManifest.xml
e a permissão do iOS será ignorada.
{ "plug-ins": [ [ "@react-native-voice/voz", {"microphonePermission": "CUSTOM: Permitir que $(PRODUCT_NAME) acesse o microfone","speechRecognitionPermission": "CUSTOM: Permitir que $(PRODUCT_NAME) reconheça com segurança a fala do usuário" } ] ] }
Exemplo completo para Android e iOS.
importar voz de '@react-native-voice/voice';importar React, {Component} de 'react';class VoiceTest estende componente { construtor(adereços) {Voice.onSpeechStart = this.onSpeechStartHandler.bind(this);Voice.onSpeechEnd = this.onSpeechEndHandler.bind(this);Voice.onSpeechResults = this.onSpeechResultsHandler.bind(this); } onStartButtonPress(e){Voice.start('en-US'); } ...}
Acesso estático à API Voice.
Todos os métodos agora retornam uma new Promise
para compatibilidade async/await
.
Nome do Método | Descrição | Plataforma |
---|---|---|
Voz.isAvailable() | Verifica se um serviço de reconhecimento de fala está disponível no sistema. | Android, iOS |
Voz.start(localidade) | Começa a ouvir a fala de uma localidade específica. Retorna nulo se nenhum erro ocorrer. | Android, iOS |
Voz.parar() | Pára de ouvir a fala. Retorna nulo se nenhum erro ocorrer. | Android, iOS |
Voz.cancelar() | Cancela o reconhecimento de fala. Retorna nulo se nenhum erro ocorrer. | Android, iOS |
Voz.destruir() | Destrói a instância atual do SpeechRecognizer. Retorna nulo se nenhum erro ocorrer. | Android, iOS |
Voice.removeAllListeners() | Limpa/anula métodos estáticos Voice substituídos. | Android, iOS |
Voice.isRecognizing() | Retorne se o SpeechRecognizer estiver reconhecendo. | Android, iOS |
Voice.getSpeechRecognitionServices() | Retorna uma lista dos mecanismos de reconhecimento de fala disponíveis no dispositivo. (Exemplo: ['com.google.android.googlequicksearchbox'] se o Google for o único disponível.) | Android |
Retornos de chamada invocados quando um evento nativo é emitido.
Nome do Evento | Descrição | Evento | Plataforma |
---|---|---|---|
Voice.onSpeechStart(evento) | Invocado quando .start() é chamado sem erros. | { error: false } | Android, iOS |
Voice.onSpeechRecognized(evento) | Invocado quando a fala é reconhecida. | { error: false } | Android, iOS |
Voice.onSpeechEnd(evento) | Invocado quando o SpeechRecognizer interrompe o reconhecimento. | { error: false } | Android, iOS |
Voice.onSpeechError(evento) | Invocado quando ocorre um erro. | { error: Description of error as string } | Android, iOS |
Voice.onSpeechResults(evento) | Invocado quando o SpeechRecognizer termina de reconhecer. | { value: [..., 'Speech recognized'] } | Android, iOS |
Voice.onSpeechPartialResults(evento) | Invocado quando qualquer resultado é computado. | { value: [..., 'Partial speech recognized'] } | Android, iOS |
Voice.onSpeechVolumeChanged(evento) | Invocado quando o tom reconhecido é alterado. | { value: pitch in dB } | Android |
Provavelmente a parte mais importante.
Embora o aplicativo VoiceTest
incluído funcione sem verificações e solicitações de permissões explícitas, pode ser necessário adicionar uma solicitação de permissão para RECORD_AUDIO
para algumas configurações. Desde o Android M (6.0), o usuário precisa conceder permissão em tempo de execução (e não durante a instalação do aplicativo). Por padrão, chamar o método startSpeech
invocará o pop-up de permissão RECORD AUDIO
para o usuário. Isso pode ser desabilitado passando REQUEST_PERMISSIONS_AUTO: true
no argumento de opções.
Se você estiver executando um aplicativo expo/expokit ejetado, poderá ter problemas com permissões no Android e obter o seguinte erro host.exp.exponent.MainActivity cannot be cast to com.facebook.react.ReactActivity startSpeech
. Isso pode ser resolvido solicitando permissão usando o pacote expo-permission
antes de iniciar o reconhecimento.
import { Permissions } from "expo";async componentDidMount() {const { status, expires, permissions } = await Permissions.askAsync(Permissions.AUDIO_RECORDING);if (status !== "granted") {//Permissões não concedidas. Não mostre o botão de início de gravação porque causará problemas se for pressionado.this.setState({showRecordButton: false});} else {this.setState({showRecordButton: true});}}
Notas no Android
Mesmo depois de todas as permissões estarem corretas no Android, há uma última coisa para garantir que esta biblioteca esteja funcionando bem no Android. Certifique-se de que o dispositivo tenha o mecanismo de reconhecimento de fala do Google, como com.google.android.googlequicksearchbox
chamando Voice.getSpeechRecognitionServices()
. Como os telefones Android podem ser configurados com tantas opções, mesmo que um dispositivo possua o mecanismo googlequicksearchbox, ele pode ser configurado para usar outros serviços. Você pode verificar qual serviço é usado para o aplicativo Voice Assistive nas etapas a seguir para a maioria dos telefones Android:
Settings > App Management > Default App > Assistive App and Voice Input > Assistive App
O fluxo acima pode variar dependendo dos modelos e fabricantes do Android. Para telefones Huawei, pode haver uma chance de o dispositivo não conseguir instalar os serviços do Google.
Como posso obter com.google.android.googlequicksearchbox
no dispositivo?
Peça aos usuários que instalem o aplicativo de pesquisa do Google.
É necessário incluir permissões para NSMicrophoneUsageDescription
e NSSpeechRecognitionUsageDescription
dentro do Info.plist para iOS. Consulte o VoiceTest
incluído para saber como lidar com esses casos.
<dict> ... <key>NSMicrophoneUsageDescription</key> <string>Descrição do motivo pelo qual você precisa do uso do microfone</string> <key>NSSpeechRecognitionUsageDescription</key> <string>Descrição do motivo pelo qual você precisa do uso do reconhecimento de fala</string> ... </dict>
Consulte a documentação fornecida pelo ReactNative para isso: PermissionsAndroid
@asafron
@BrendanFDMoore
@brudny
@chitezh
@ifsnow
@jamsch
@misino
@Noitidart
@ohtangza e @hayanmind
@rudiedev6
@tdonia
@wenkesj