@capacitor-community/text-to-speech 4.0.1-dev.1d4e158.1717578191 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -41
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/getcapacitor/community/tts/SpeakResultCallback.java +6 -0
- package/android/src/main/java/com/getcapacitor/community/tts/TextToSpeech.java +13 -47
- package/android/src/main/java/com/getcapacitor/community/tts/TextToSpeechPlugin.java +6 -30
- package/dist/docs.json +0 -53
- package/dist/esm/definitions.d.ts +0 -22
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +0 -1
- package/dist/esm/web.js +0 -3
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +0 -3
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +0 -3
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/TextToSpeechPlugin.m +0 -1
- package/ios/Plugin/TextToSpeechPlugin.swift +0 -4
- package/package.json +1 -1
- package/android/src/main/java/com/getcapacitor/community/tts/Callback.java +0 -6
package/README.md
CHANGED
|
@@ -30,20 +30,6 @@ npm install @capacitor-community/text-to-speech
|
|
|
30
30
|
npx cap sync
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
### Android
|
|
34
|
-
|
|
35
|
-
According to the [Android documentation](https://developer.android.com/reference/android/speech/tts/TextToSpeech), apps targeting **Android 11** should declare [TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE](https://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine#INTENT_ACTION_TTS_SERVICE) in the queries elements of their manifest:
|
|
36
|
-
|
|
37
|
-
```xml
|
|
38
|
-
<queries>
|
|
39
|
-
<intent>
|
|
40
|
-
<action android:name="android.intent.action.TTS_SERVICE" />
|
|
41
|
-
</intent>
|
|
42
|
-
</queries>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
[Here](https://github.com/robingenz/capacitor-plugin-demo/commit/b7dc6c6d6652be9356d354df1faeb6a40e442797) you can find an example commit.
|
|
46
|
-
|
|
47
33
|
## Configuration
|
|
48
34
|
|
|
49
35
|
No configuration required for this plugin.
|
|
@@ -89,7 +75,6 @@ const isLanguageSupported = async (lang: string) => {
|
|
|
89
75
|
|
|
90
76
|
<docgen-index>
|
|
91
77
|
|
|
92
|
-
* [`initialize(...)`](#initialize)
|
|
93
78
|
* [`speak(...)`](#speak)
|
|
94
79
|
* [`stop()`](#stop)
|
|
95
80
|
* [`getSupportedLanguages()`](#getsupportedlanguages)
|
|
@@ -103,25 +88,6 @@ const isLanguageSupported = async (lang: string) => {
|
|
|
103
88
|
<docgen-api>
|
|
104
89
|
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->
|
|
105
90
|
|
|
106
|
-
### initialize(...)
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
initialize(options: InitializeOptions) => Promise<void>
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Initializes the TTS engine.
|
|
113
|
-
|
|
114
|
-
This method should be called before any other methods.
|
|
115
|
-
|
|
116
|
-
| Param | Type |
|
|
117
|
-
| ------------- | --------------------------------------------------------------- |
|
|
118
|
-
| **`options`** | <code><a href="#initializeoptions">InitializeOptions</a></code> |
|
|
119
|
-
|
|
120
|
-
**Since:** 4.1.0
|
|
121
|
-
|
|
122
|
-
--------------------
|
|
123
|
-
|
|
124
|
-
|
|
125
91
|
### speak(...)
|
|
126
92
|
|
|
127
93
|
```typescript
|
|
@@ -207,13 +173,6 @@ Only available for Android.
|
|
|
207
173
|
### Interfaces
|
|
208
174
|
|
|
209
175
|
|
|
210
|
-
#### InitializeOptions
|
|
211
|
-
|
|
212
|
-
| Prop | Type | Description | Since |
|
|
213
|
-
| ------------ | ------------------- | ------------------------------------------------------ | ----- |
|
|
214
|
-
| **`engine`** | <code>string</code> | The engine to use for TTS. Only available for Android. | 4.1.0 |
|
|
215
|
-
|
|
216
|
-
|
|
217
176
|
#### TTSOptions
|
|
218
177
|
|
|
219
178
|
| Prop | Type | Description | Default |
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
package com.getcapacitor.community.tts;
|
|
2
2
|
|
|
3
|
-
import static com.getcapacitor.community.tts.TextToSpeechPlugin.ERROR_INITIALIZATION_FAILED;
|
|
4
|
-
import static com.getcapacitor.community.tts.TextToSpeechPlugin.ERROR_UTTERANCE;
|
|
5
|
-
|
|
6
3
|
import android.content.Context;
|
|
7
4
|
import android.content.Intent;
|
|
8
5
|
import android.content.pm.PackageManager;
|
|
@@ -12,14 +9,10 @@ import android.os.Bundle;
|
|
|
12
9
|
import android.speech.tts.UtteranceProgressListener;
|
|
13
10
|
import android.speech.tts.Voice;
|
|
14
11
|
import android.util.Log;
|
|
15
|
-
|
|
16
|
-
import androidx.annotation.Nullable;
|
|
17
|
-
|
|
18
12
|
import com.getcapacitor.JSArray;
|
|
19
13
|
import com.getcapacitor.JSObject;
|
|
20
14
|
import java.util.ArrayList;
|
|
21
15
|
import java.util.Collections;
|
|
22
|
-
import java.util.Comparator;
|
|
23
16
|
import java.util.HashMap;
|
|
24
17
|
import java.util.Locale;
|
|
25
18
|
import java.util.Set;
|
|
@@ -33,12 +26,10 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
33
26
|
private int initializationStatus;
|
|
34
27
|
private JSObject[] supportedVoices = null;
|
|
35
28
|
|
|
36
|
-
private Callback initializeCallback;
|
|
37
|
-
|
|
38
29
|
TextToSpeech(Context context) {
|
|
39
30
|
this.context = context;
|
|
40
31
|
try {
|
|
41
|
-
|
|
32
|
+
tts = new android.speech.tts.TextToSpeech(context, this);
|
|
42
33
|
} catch (Exception ex) {
|
|
43
34
|
Log.d(LOG_TAG, ex.getLocalizedMessage());
|
|
44
35
|
}
|
|
@@ -47,21 +38,6 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
47
38
|
@Override
|
|
48
39
|
public void onInit(int status) {
|
|
49
40
|
this.initializationStatus = status;
|
|
50
|
-
if (initializeCallback != null) {
|
|
51
|
-
if (status == android.speech.tts.TextToSpeech.SUCCESS) {
|
|
52
|
-
initializeCallback.success();
|
|
53
|
-
} else {
|
|
54
|
-
Exception exception = new Exception(ERROR_INITIALIZATION_FAILED);
|
|
55
|
-
initializeCallback.error(exception);
|
|
56
|
-
}
|
|
57
|
-
initializeCallback = null;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public void initialize(@Nullable String engine, Callback callback) {
|
|
62
|
-
initializeCallback = callback;
|
|
63
|
-
destroyTextToSpeechInstance();
|
|
64
|
-
createTextToSpeechInstance(engine);
|
|
65
41
|
}
|
|
66
42
|
|
|
67
43
|
public void speak(
|
|
@@ -72,7 +48,7 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
72
48
|
float volume,
|
|
73
49
|
int voice,
|
|
74
50
|
String callbackId,
|
|
75
|
-
|
|
51
|
+
SpeakResultCallback resultCallback
|
|
76
52
|
) {
|
|
77
53
|
tts.stop();
|
|
78
54
|
tts.setOnUtteranceProgressListener(
|
|
@@ -82,13 +58,12 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
82
58
|
|
|
83
59
|
@Override
|
|
84
60
|
public void onDone(String utteranceId) {
|
|
85
|
-
|
|
61
|
+
resultCallback.onDone();
|
|
86
62
|
}
|
|
87
63
|
|
|
88
64
|
@Override
|
|
89
65
|
public void onError(String utteranceId) {
|
|
90
|
-
|
|
91
|
-
callback.error(exception);
|
|
66
|
+
resultCallback.onError();
|
|
92
67
|
}
|
|
93
68
|
}
|
|
94
69
|
);
|
|
@@ -140,6 +115,9 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
140
115
|
return result;
|
|
141
116
|
}
|
|
142
117
|
|
|
118
|
+
/**
|
|
119
|
+
* @return Ordered list of voices. The order is guaranteed to remain the same as long as the voices in tts.getVoices() do not change.
|
|
120
|
+
*/
|
|
143
121
|
public ArrayList<Voice> getSupportedVoicesOrdered() {
|
|
144
122
|
Set<Voice> supportedVoices = tts.getVoices();
|
|
145
123
|
ArrayList<Voice> orderedVoices = new ArrayList<Voice>();
|
|
@@ -147,7 +125,8 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
147
125
|
orderedVoices.add(supportedVoice);
|
|
148
126
|
}
|
|
149
127
|
|
|
150
|
-
|
|
128
|
+
//voice.getName() is guaranteed to be unique, so will be used for sorting.
|
|
129
|
+
Collections.sort(orderedVoices, (v1, v2) -> v1.getName().compareTo(v2.getName()));
|
|
151
130
|
|
|
152
131
|
return orderedVoices;
|
|
153
132
|
}
|
|
@@ -190,15 +169,11 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
190
169
|
}
|
|
191
170
|
|
|
192
171
|
public void onDestroy() {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
private void createTextToSpeechInstance(@Nullable String engine) {
|
|
197
|
-
if (engine == null) {
|
|
198
|
-
this.tts = new android.speech.tts.TextToSpeech(context, this);
|
|
199
|
-
} else {
|
|
200
|
-
this.tts = new android.speech.tts.TextToSpeech(context, this, engine);
|
|
172
|
+
if (tts == null) {
|
|
173
|
+
return;
|
|
201
174
|
}
|
|
175
|
+
tts.stop();
|
|
176
|
+
tts.shutdown();
|
|
202
177
|
}
|
|
203
178
|
|
|
204
179
|
private JSObject convertVoiceToJSObject(Voice voice) {
|
|
@@ -211,13 +186,4 @@ public class TextToSpeech implements android.speech.tts.TextToSpeech.OnInitListe
|
|
|
211
186
|
obj.put("default", false);
|
|
212
187
|
return obj;
|
|
213
188
|
}
|
|
214
|
-
|
|
215
|
-
private void destroyTextToSpeechInstance() {
|
|
216
|
-
if (tts == null) {
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
tts.stop();
|
|
220
|
-
tts.shutdown();
|
|
221
|
-
tts = null;
|
|
222
|
-
}
|
|
223
189
|
}
|
|
@@ -14,7 +14,6 @@ public class TextToSpeechPlugin extends Plugin {
|
|
|
14
14
|
|
|
15
15
|
public static final String ERROR_UTTERANCE = "Failed to read text.";
|
|
16
16
|
public static final String ERROR_UNSUPPORTED_LANGUAGE = "This language is not supported.";
|
|
17
|
-
public static final String ERROR_INITIALIZATION_FAILED = "Failed to initialize TextToSpeech.";
|
|
18
17
|
|
|
19
18
|
private TextToSpeech implementation;
|
|
20
19
|
|
|
@@ -23,29 +22,6 @@ public class TextToSpeechPlugin extends Plugin {
|
|
|
23
22
|
implementation = new TextToSpeech(getContext());
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
@PluginMethod
|
|
27
|
-
public void initialize(PluginCall call) {
|
|
28
|
-
try {
|
|
29
|
-
String engine = call.getString("engine");
|
|
30
|
-
|
|
31
|
-
Callback callback = new Callback() {
|
|
32
|
-
@Override
|
|
33
|
-
public void error(Exception exception) {
|
|
34
|
-
call.reject(exception.getLocalizedMessage());
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@Override
|
|
38
|
-
public void success() {
|
|
39
|
-
call.resolve();
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
implementation.initialize(engine, callback);
|
|
44
|
-
} catch (Exception ex) {
|
|
45
|
-
call.reject(ex.getLocalizedMessage());
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
25
|
@PluginMethod
|
|
50
26
|
public void speak(PluginCall call) {
|
|
51
27
|
boolean isAvailable = implementation.isAvailable();
|
|
@@ -67,20 +43,20 @@ public class TextToSpeechPlugin extends Plugin {
|
|
|
67
43
|
return;
|
|
68
44
|
}
|
|
69
45
|
|
|
70
|
-
|
|
46
|
+
SpeakResultCallback resultCallback = new SpeakResultCallback() {
|
|
71
47
|
@Override
|
|
72
|
-
public void
|
|
73
|
-
call.
|
|
48
|
+
public void onDone() {
|
|
49
|
+
call.resolve();
|
|
74
50
|
}
|
|
75
51
|
|
|
76
52
|
@Override
|
|
77
|
-
public void
|
|
78
|
-
call.
|
|
53
|
+
public void onError() {
|
|
54
|
+
call.reject(ERROR_UTTERANCE);
|
|
79
55
|
}
|
|
80
56
|
};
|
|
81
57
|
|
|
82
58
|
try {
|
|
83
|
-
implementation.speak(text, lang, rate, pitch, volume, voice, call.getCallbackId(),
|
|
59
|
+
implementation.speak(text, lang, rate, pitch, volume, voice, call.getCallbackId(), resultCallback);
|
|
84
60
|
} catch (Exception ex) {
|
|
85
61
|
call.reject(ex.getLocalizedMessage());
|
|
86
62
|
}
|
package/dist/docs.json
CHANGED
|
@@ -5,29 +5,6 @@
|
|
|
5
5
|
"docs": "",
|
|
6
6
|
"tags": [],
|
|
7
7
|
"methods": [
|
|
8
|
-
{
|
|
9
|
-
"name": "initialize",
|
|
10
|
-
"signature": "(options: InitializeOptions) => Promise<void>",
|
|
11
|
-
"parameters": [
|
|
12
|
-
{
|
|
13
|
-
"name": "options",
|
|
14
|
-
"docs": "",
|
|
15
|
-
"type": "InitializeOptions"
|
|
16
|
-
}
|
|
17
|
-
],
|
|
18
|
-
"returns": "Promise<void>",
|
|
19
|
-
"tags": [
|
|
20
|
-
{
|
|
21
|
-
"name": "since",
|
|
22
|
-
"text": "4.1.0"
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"docs": "Initializes the TTS engine.\n\nThis method should be called before any other methods.",
|
|
26
|
-
"complexTypes": [
|
|
27
|
-
"InitializeOptions"
|
|
28
|
-
],
|
|
29
|
-
"slug": "initialize"
|
|
30
|
-
},
|
|
31
8
|
{
|
|
32
9
|
"name": "speak",
|
|
33
10
|
"signature": "(options: TTSOptions) => Promise<void>",
|
|
@@ -108,36 +85,6 @@
|
|
|
108
85
|
"properties": []
|
|
109
86
|
},
|
|
110
87
|
"interfaces": [
|
|
111
|
-
{
|
|
112
|
-
"name": "InitializeOptions",
|
|
113
|
-
"slug": "initializeoptions",
|
|
114
|
-
"docs": "",
|
|
115
|
-
"tags": [
|
|
116
|
-
{
|
|
117
|
-
"text": "4.1.0",
|
|
118
|
-
"name": "since"
|
|
119
|
-
}
|
|
120
|
-
],
|
|
121
|
-
"methods": [],
|
|
122
|
-
"properties": [
|
|
123
|
-
{
|
|
124
|
-
"name": "engine",
|
|
125
|
-
"tags": [
|
|
126
|
-
{
|
|
127
|
-
"text": "\"com.google.android.tts\"",
|
|
128
|
-
"name": "example"
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"text": "4.1.0",
|
|
132
|
-
"name": "since"
|
|
133
|
-
}
|
|
134
|
-
],
|
|
135
|
-
"docs": "The engine to use for TTS.\n\nOnly available for Android.",
|
|
136
|
-
"complexTypes": [],
|
|
137
|
-
"type": "string | undefined"
|
|
138
|
-
}
|
|
139
|
-
]
|
|
140
|
-
},
|
|
141
88
|
{
|
|
142
89
|
"name": "TTSOptions",
|
|
143
90
|
"slug": "ttsoptions",
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
export interface TextToSpeechPlugin {
|
|
2
|
-
/**
|
|
3
|
-
* Initializes the TTS engine.
|
|
4
|
-
*
|
|
5
|
-
* This method should be called before any other methods.
|
|
6
|
-
*
|
|
7
|
-
* @since 4.1.0
|
|
8
|
-
*/
|
|
9
|
-
initialize(options: InitializeOptions): Promise<void>;
|
|
10
2
|
/**
|
|
11
3
|
* Starts the TTS engine and plays the desired text.
|
|
12
4
|
*/
|
|
@@ -42,20 +34,6 @@ export interface TextToSpeechPlugin {
|
|
|
42
34
|
*/
|
|
43
35
|
openInstall(): Promise<void>;
|
|
44
36
|
}
|
|
45
|
-
/**
|
|
46
|
-
* @since 4.1.0
|
|
47
|
-
*/
|
|
48
|
-
export interface InitializeOptions {
|
|
49
|
-
/**
|
|
50
|
-
* The engine to use for TTS.
|
|
51
|
-
*
|
|
52
|
-
* Only available for Android.
|
|
53
|
-
*
|
|
54
|
-
* @example "com.google.android.tts"
|
|
55
|
-
* @since 4.1.0
|
|
56
|
-
*/
|
|
57
|
-
engine?: string;
|
|
58
|
-
}
|
|
59
37
|
export interface TTSOptions {
|
|
60
38
|
/**
|
|
61
39
|
* The text that will be synthesised when the utterance is spoken.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface TextToSpeechPlugin {\n /**\n *
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface TextToSpeechPlugin {\n /**\n * Starts the TTS engine and plays the desired text.\n */\n speak(options: TTSOptions): Promise<void>;\n /**\n * Stops the TTS engine.\n */\n stop(): Promise<void>;\n /**\n * Returns a list of supported BCP 47 language tags.\n */\n getSupportedLanguages(): Promise<{ languages: string[] }>;\n /**\n * Returns a list of supported voices.\n */\n getSupportedVoices(): Promise<{ voices: SpeechSynthesisVoice[] }>;\n /**\n * Checks if a specific BCP 47 language tag is supported.\n */\n isLanguageSupported(options: {\n lang: string;\n }): Promise<{ supported: boolean }>;\n /**\n * Verifies proper installation and availability of resource files on the system.\n *\n * Only available for Android.\n */\n openInstall(): Promise<void>;\n}\n\nexport interface TTSOptions {\n /**\n * The text that will be synthesised when the utterance is spoken.\n *\n * @example \"Hello world\"\n */\n text: string;\n /**\n * The language of the utterance.\n * Possible languages can be queried using `getSupportedLanguages`.\n *\n * @default \"en-US\"\n */\n lang?: string;\n /**\n * The speed at which the utterance will be spoken at.\n *\n * @default 1.0\n */\n rate?: number;\n /**\n * The pitch at which the utterance will be spoken at.\n *\n * @default 1.0\n */\n pitch?: number;\n /**\n * The volume that the utterance will be spoken at.\n *\n * @default 1.0\n */\n volume?: number;\n /**\n * The index of the selected voice that will be used to speak the utterance.\n * Possible voices can be queried using `getSupportedVoices`.\n */\n voice?: number;\n /**\n * Select the iOS Audio session category.\n * Possible values: `ambient` and `playback`.\n * Use `playback` to play audio even when the app is in the background.\n *\n * Only available for iOS.\n *\n * @default \"ambient\"\n */\n category?: string;\n}\n\n/**\n * The SpeechSynthesisVoice interface represents a voice that the system supports.\n */\nexport interface SpeechSynthesisVoice {\n /**\n * Specifies whether the voice is the default voice for the current app (`true`) or not (`false`).\n *\n * @example false\n */\n default: boolean;\n /**\n * BCP 47 language tag indicating the language of the voice.\n *\n * @example \"en-US\"\n */\n lang: string;\n /**\n * Specifies whether the voice is supplied by a local (`true`) or remote (`false`) speech synthesizer service.\n *\n * @example true\n */\n localService: boolean;\n /**\n * Human-readable name that represents the voice.\n *\n * @example \"Microsoft Zira Desktop - English (United States)\"\n */\n name: string;\n /**\n * Type of URI and location of the speech synthesis service for this voice.\n *\n * @example \"urn:moz-tts:sapi:Microsoft Zira Desktop - English (United States)?en-US\"\n */\n voiceURI: string;\n}\n"]}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ export declare class TextToSpeechWeb extends WebPlugin implements TextToSpeechPl
|
|
|
4
4
|
private speechSynthesis;
|
|
5
5
|
private supportedVoices;
|
|
6
6
|
constructor();
|
|
7
|
-
initialize(): Promise<void>;
|
|
8
7
|
speak(options: TTSOptions): Promise<void>;
|
|
9
8
|
stop(): Promise<void>;
|
|
10
9
|
getSupportedLanguages(): Promise<{
|
package/dist/esm/web.js
CHANGED
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAI5C;QACE,KAAK,EAAE,CAAC;QAJF,oBAAe,GAA2B,IAAI,CAAC;QAKrD,IAAI,iBAAiB,IAAI,MAAM,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;gBAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEM,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type { TextToSpeechPlugin, TTSOptions } from './definitions';\n\nexport class TextToSpeechWeb extends WebPlugin implements TextToSpeechPlugin {\n private speechSynthesis: SpeechSynthesis | null = null;\n private supportedVoices: SpeechSynthesisVoice[] | undefined;\n\n constructor() {\n super();\n if ('speechSynthesis' in window) {\n this.speechSynthesis = window.speechSynthesis;\n window.addEventListener('beforeunload', () => {\n this.stop();\n });\n }\n }\n\n public async speak(options: TTSOptions): Promise<void> {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n await this.stop();\n const speechSynthesis = this.speechSynthesis;\n const utterance = this.createSpeechSynthesisUtterance(options);\n return new Promise((resolve, reject) => {\n utterance.onend = () => {\n resolve();\n };\n utterance.onerror = (event: any) => {\n reject(event);\n };\n speechSynthesis.speak(utterance);\n });\n }\n\n public async stop(): Promise<void> {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n this.speechSynthesis.cancel();\n }\n\n public async getSupportedLanguages(): Promise<{ languages: string[] }> {\n const voices = this.getSpeechSynthesisVoices();\n const languages = voices.map(voice => voice.lang);\n const filteredLanguages = languages.filter((v, i, a) => a.indexOf(v) == i);\n return { languages: filteredLanguages };\n }\n\n public async getSupportedVoices(): Promise<{\n voices: SpeechSynthesisVoice[];\n }> {\n const voices = this.getSpeechSynthesisVoices();\n return { voices };\n }\n\n public async isLanguageSupported(options: {\n lang: string;\n }): Promise<{ supported: boolean }> {\n const result = await this.getSupportedLanguages();\n const isLanguageSupported = result.languages.includes(options.lang);\n return { supported: isLanguageSupported };\n }\n\n public async openInstall(): Promise<void> {\n this.throwUnimplementedError();\n }\n\n private createSpeechSynthesisUtterance(\n options: TTSOptions,\n ): SpeechSynthesisUtterance {\n const voices = this.getSpeechSynthesisVoices();\n const utterance = new SpeechSynthesisUtterance();\n const { text, lang, rate, pitch, volume, voice } = options;\n if (voice) {\n utterance.voice = voices[voice];\n }\n if (volume) {\n utterance.volume = volume >= 0 && volume <= 1 ? volume : 1;\n }\n if (rate) {\n utterance.rate = rate >= 0.1 && rate <= 10 ? rate : 1;\n }\n if (pitch) {\n utterance.pitch = pitch >= 0 && pitch <= 2 ? pitch : 2;\n }\n if (lang) {\n utterance.lang = lang;\n }\n utterance.text = text;\n return utterance;\n }\n\n private getSpeechSynthesisVoices(): SpeechSynthesisVoice[] {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n if (!this.supportedVoices || this.supportedVoices.length < 1) {\n this.supportedVoices = this.speechSynthesis.getVoices();\n }\n return this.supportedVoices;\n }\n\n private throwUnsupportedError(): never {\n throw this.unavailable(\n 'SpeechSynthesis API not available in this browser.',\n );\n }\n\n private throwUnimplementedError(): never {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst TextToSpeech = registerPlugin('TextToSpeech', {\n web: () => import('./web').then(m => new m.TextToSpeechWeb()),\n});\n// Warm up\nif ('speechSynthesis' in window) {\n window.speechSynthesis;\n}\nexport * from './definitions';\nexport { TextToSpeech };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class TextToSpeechWeb extends WebPlugin {\n constructor() {\n super();\n this.speechSynthesis = null;\n if ('speechSynthesis' in window) {\n this.speechSynthesis = window.speechSynthesis;\n window.addEventListener('beforeunload', () => {\n this.stop();\n });\n }\n }\n async
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst TextToSpeech = registerPlugin('TextToSpeech', {\n web: () => import('./web').then(m => new m.TextToSpeechWeb()),\n});\n// Warm up\nif ('speechSynthesis' in window) {\n window.speechSynthesis;\n}\nexport * from './definitions';\nexport { TextToSpeech };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class TextToSpeechWeb extends WebPlugin {\n constructor() {\n super();\n this.speechSynthesis = null;\n if ('speechSynthesis' in window) {\n this.speechSynthesis = window.speechSynthesis;\n window.addEventListener('beforeunload', () => {\n this.stop();\n });\n }\n }\n async speak(options) {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n await this.stop();\n const speechSynthesis = this.speechSynthesis;\n const utterance = this.createSpeechSynthesisUtterance(options);\n return new Promise((resolve, reject) => {\n utterance.onend = () => {\n resolve();\n };\n utterance.onerror = (event) => {\n reject(event);\n };\n speechSynthesis.speak(utterance);\n });\n }\n async stop() {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n this.speechSynthesis.cancel();\n }\n async getSupportedLanguages() {\n const voices = this.getSpeechSynthesisVoices();\n const languages = voices.map(voice => voice.lang);\n const filteredLanguages = languages.filter((v, i, a) => a.indexOf(v) == i);\n return { languages: filteredLanguages };\n }\n async getSupportedVoices() {\n const voices = this.getSpeechSynthesisVoices();\n return { voices };\n }\n async isLanguageSupported(options) {\n const result = await this.getSupportedLanguages();\n const isLanguageSupported = result.languages.includes(options.lang);\n return { supported: isLanguageSupported };\n }\n async openInstall() {\n this.throwUnimplementedError();\n }\n createSpeechSynthesisUtterance(options) {\n const voices = this.getSpeechSynthesisVoices();\n const utterance = new SpeechSynthesisUtterance();\n const { text, lang, rate, pitch, volume, voice } = options;\n if (voice) {\n utterance.voice = voices[voice];\n }\n if (volume) {\n utterance.volume = volume >= 0 && volume <= 1 ? volume : 1;\n }\n if (rate) {\n utterance.rate = rate >= 0.1 && rate <= 10 ? rate : 1;\n }\n if (pitch) {\n utterance.pitch = pitch >= 0 && pitch <= 2 ? pitch : 2;\n }\n if (lang) {\n utterance.lang = lang;\n }\n utterance.text = text;\n return utterance;\n }\n getSpeechSynthesisVoices() {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n if (!this.supportedVoices || this.supportedVoices.length < 1) {\n this.supportedVoices = this.speechSynthesis.getVoices();\n }\n return this.supportedVoices;\n }\n throwUnsupportedError() {\n throw this.unavailable('SpeechSynthesis API not available in this browser.');\n }\n throwUnimplementedError() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst TextToSpeech = registerPlugin('TextToSpeech', {\n web: () => import('./web').then(m => new m.TextToSpeechWeb()),\n});\n// Warm up\nif ('speechSynthesis' in window) {\n window.speechSynthesis;\n}\nexport * from './definitions';\nexport { TextToSpeech };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class TextToSpeechWeb extends WebPlugin {\n constructor() {\n super();\n this.speechSynthesis = null;\n if ('speechSynthesis' in window) {\n this.speechSynthesis = window.speechSynthesis;\n window.addEventListener('beforeunload', () => {\n this.stop();\n });\n }\n }\n async
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst TextToSpeech = registerPlugin('TextToSpeech', {\n web: () => import('./web').then(m => new m.TextToSpeechWeb()),\n});\n// Warm up\nif ('speechSynthesis' in window) {\n window.speechSynthesis;\n}\nexport * from './definitions';\nexport { TextToSpeech };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class TextToSpeechWeb extends WebPlugin {\n constructor() {\n super();\n this.speechSynthesis = null;\n if ('speechSynthesis' in window) {\n this.speechSynthesis = window.speechSynthesis;\n window.addEventListener('beforeunload', () => {\n this.stop();\n });\n }\n }\n async speak(options) {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n await this.stop();\n const speechSynthesis = this.speechSynthesis;\n const utterance = this.createSpeechSynthesisUtterance(options);\n return new Promise((resolve, reject) => {\n utterance.onend = () => {\n resolve();\n };\n utterance.onerror = (event) => {\n reject(event);\n };\n speechSynthesis.speak(utterance);\n });\n }\n async stop() {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n this.speechSynthesis.cancel();\n }\n async getSupportedLanguages() {\n const voices = this.getSpeechSynthesisVoices();\n const languages = voices.map(voice => voice.lang);\n const filteredLanguages = languages.filter((v, i, a) => a.indexOf(v) == i);\n return { languages: filteredLanguages };\n }\n async getSupportedVoices() {\n const voices = this.getSpeechSynthesisVoices();\n return { voices };\n }\n async isLanguageSupported(options) {\n const result = await this.getSupportedLanguages();\n const isLanguageSupported = result.languages.includes(options.lang);\n return { supported: isLanguageSupported };\n }\n async openInstall() {\n this.throwUnimplementedError();\n }\n createSpeechSynthesisUtterance(options) {\n const voices = this.getSpeechSynthesisVoices();\n const utterance = new SpeechSynthesisUtterance();\n const { text, lang, rate, pitch, volume, voice } = options;\n if (voice) {\n utterance.voice = voices[voice];\n }\n if (volume) {\n utterance.volume = volume >= 0 && volume <= 1 ? volume : 1;\n }\n if (rate) {\n utterance.rate = rate >= 0.1 && rate <= 10 ? rate : 1;\n }\n if (pitch) {\n utterance.pitch = pitch >= 0 && pitch <= 2 ? pitch : 2;\n }\n if (lang) {\n utterance.lang = lang;\n }\n utterance.text = text;\n return utterance;\n }\n getSpeechSynthesisVoices() {\n if (!this.speechSynthesis) {\n this.throwUnsupportedError();\n }\n if (!this.supportedVoices || this.supportedVoices.length < 1) {\n this.supportedVoices = this.speechSynthesis.getVoices();\n }\n return this.supportedVoices;\n }\n throwUnsupportedError() {\n throw this.unavailable('SpeechSynthesis API not available in this browser.');\n }\n throwUnimplementedError() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
// Define the plugin using the CAP_PLUGIN Macro, and
|
|
5
5
|
// each method the plugin supports using the CAP_PLUGIN_METHOD macro.
|
|
6
6
|
CAP_PLUGIN(TextToSpeechPlugin, "TextToSpeech",
|
|
7
|
-
CAP_PLUGIN_METHOD(initialize, CAPPluginReturnPromise);
|
|
8
7
|
CAP_PLUGIN_METHOD(speak, CAPPluginReturnPromise);
|
|
9
8
|
CAP_PLUGIN_METHOD(stop, CAPPluginReturnPromise);
|
|
10
9
|
CAP_PLUGIN_METHOD(openInstall, CAPPluginReturnPromise);
|
|
@@ -12,10 +12,6 @@ public class TextToSpeechPlugin: CAPPlugin {
|
|
|
12
12
|
|
|
13
13
|
private let implementation = TextToSpeech()
|
|
14
14
|
|
|
15
|
-
@objc public func initialize(_ call: CAPPluginCall) {
|
|
16
|
-
call.resolve()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
15
|
@objc public func speak(_ call: CAPPluginCall) {
|
|
20
16
|
let text = call.getString("text") ?? ""
|
|
21
17
|
let lang = call.getString("lang") ?? "en-US"
|
package/package.json
CHANGED