forked from naoufal/react-native-speech
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SpeechSynthesizer.ios.js
110 lines (95 loc) · 2.8 KB
/
SpeechSynthesizer.ios.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/**
* @providesModule SpeechSynthesizer
* @flow
*/
'use strict';
var React = require('react-native');
var { NativeModules, NativeEventEmitter } = React;
var NativeSpeechSynthesizer = NativeModules.SpeechSynthesizer;
const { SpeechEventEmitter } = NativeModules;
/**
* High-level docs for the SpeechSynthesizer iOS API can be written here.
* To implement event emitter of didFinishSpeechUtterance event use in your code:
* componentWillMount() {
* if (Platform.OS === 'ios') {
* this.eventEmitter = new NativeEventEmitter(SpeechEventEmitter);
* this.unsubscribeSpeechEvents = this.eventEmitter.addListener(SpeechEventEmitter.SPEECH_FINISH_EVENT, (result) =>
* console.log('Speech Finished! Text spoken: ', result.payload)
* );
* }
* }
*
* componentWillUnmount() {
* // prevent leaking
* if (Platform.OS === 'ios') {this.unsubscribeSpeechEvents()}
*
* }
*
* The default pitch is 1.0. Allowed values are in the range from 0.5 (for lower pitch) to 2.0 (for higher pitch).
* Allowed values are in the range from 0.0 (silent) to 1.0 (loudest). The default volume is 1.0.
* beforeInterval and afterInterval are in seconds, e.g. afterInterval: 1, will wait after the speech before playing the next ßspeech.
* e.g.:
* options = {
* text: 'Hello World',
* voice: 'en-US',
* rate: 0.35,
* pitch: 1,
* beforeInterval: 0.5,
* afterInterval: 0.5,
* volume: 1
* }
*/
var SpeechSynthesizer = {
speak(options) {
return new Promise(function(resolve, reject) {
NativeSpeechSynthesizer.speakUtterance(options, function(error, success) {
if (error) {
return reject(error);
}
resolve(true);
});
});
},
stop: NativeSpeechSynthesizer.stopSpeakingAtBoundary,
pause: NativeSpeechSynthesizer.pauseSpeakingAtBoundary,
resume: NativeSpeechSynthesizer.continueSpeakingAtBoundary,
isPaused() {
return new Promise(function(resolve, reject) {
NativeSpeechSynthesizer.paused(function(error, paused) {
if (error) {
return reject(error);
}
if (paused === 1) {
resolve(true);
} else {
resolve(false);
}
});
});
},
isSpeaking() {
return new Promise(function(resolve, reject) {
NativeSpeechSynthesizer.speaking(function(error, speaking) {
if (error) {
return reject(error);
}
if (speaking === 1) {
resolve(true);
} else {
resolve(false);
}
});
});
},
supportedVoices() {
return new Promise(function(resolve, reject) {
NativeSpeechSynthesizer.speechVoices(function(error, locales) {
if (error) {
return reject(error);
}
resolve(locales);
});
});
}
};
module.exports = SpeechSynthesizer;