A speech-to-text library for React Native.
npm i react-native-voice --save
Manually or automatically link the NativeModule
react-native link react-native-voice
- In
android/setting.gradle
...
include ':VoiceModule', ':app'
project(':VoiceModule').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-voice/android')
- In
android/app/build.gradle
...
dependencies {
...
compile project(':VoiceModule')
}
- In
MainApplication.java
import com.facebook.react.ReactApplication
import com.facebook.react.ReactPackage;
...
import com.wenkesj.voice.VoicePackage; // <------ Add this!
...
public class MainActivity extends ReactActivity {
...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VoicePackage() // <------ Add this!
);
}
}
-
Drag the Voice.xcodeproj from the react-native-voice/ios folder to the Libraries group on Xcode in your poject. Manual linking
-
Click on your main project file (the one that represents the .xcodeproj) select Build Phases and drag the static library, lib.Voice.a, from the Libraries/Voice.xcodeproj/Products folder to Link Binary With Libraries
Full example for Android and iOS.
import Voice from 'react-native-voice';
import React, {Component} from 'react';
class VoiceTest extends Component {
constructor(props) {
Voice.onSpeechStart = this.onSpeechStartHandler.bind(this);
Voice.onSpeechEnd = this.onSpeechEndHandler.bind(this);
Voice.onSpeechResults = this.onSpeechResultsHandler.bind(this);
}
onStartButtonPress(e){
const error = Voice.start('en');
}
...
}
Static access to the Voice API.
Method Name | Description | Platform |
---|---|---|
Voice.isAvailable(callback) | Checks whether a speech recognition service is available on the system. | Android, iOS |
Voice.start(locale) | Starts listening for speech for a specific locale. Returns null if no error occurs. | Android, iOS |
Voice.stop() | Stops listening for speech. Returns null if no error occurs. | Android, iOS |
Voice.cancel() | Cancels the speech recognition. Returns null if no error occurs. | Android, iOS |
Voice.destroy() | Destroys the current SpeechRecognizer instance. Returns null if no error occurs. | Android, iOS |
Voice.isRecognizing() | Return if the SpeechRecognizer is recognizing. | Android, iOS |
Callbacks that are invoked when a native event emitted.
Event Name | Description | Event | Platform |
---|---|---|---|
Voice.onSpeechStart(event) | Invoked when .start() is called without error. |
{ error: false } |
Android, iOS |
Voice.onSpeechRecognized(event) | Invoked when speech is recognized. | { error: false } |
Android, iOS |
Voice.onSpeechEnd(event) | Invoked when SpeechRecognizer stops recognition. | { error: false } |
Android, iOS |
Voice.onSpeechError(event) | Invoked when an error occurs. | { error: Description of error as string } |
Android, iOS |
Voice.onSpeechResults(event) | Invoked when SpeechRecognizer is finished recognizing. | { value: [..., 'Speech recognized'] } |
Android, iOS |
Voice.onSpeechPartialResults(event) | Invoked when any results are computed. | { value: [..., 'Partial speech recognized'] } |
Android, iOS |
Voice.onSpeechVolumeChanged(event) | Invoked when pitch that is recognized changed. | { value: pitch in dB } |
Android |
Arguably the most important part.
While the included VoiceTest
app works without explicit permissions checks and requests, it may be necessary to add a permission request for RECORD_AUDIO
for some configurations.
Need to include permissions for NSMicrophoneUsageDescription
and NSSpeechRecognitionUsageDescription
inside Info.plist for iOS. See the included VoiceTest
for how to handle these cases.
<dict>
...
<key>NSMicrophoneUsageDescription</key>
<string>Description of why you require the use of the microphone</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>Description of why you require the use of the speech recognition</string>
...
</dict>
Please see the documentation provided by ReactNative for this: PermissionsAndroid
- @BrendanFDMoore
- @brudny
- @rudiedev6
- @wenkesj