@happyvertical/smrt-voice 0.57.35 → 0.57.37

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.
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-voice",
5
- "packageVersion": "0.57.35",
5
+ "packageVersion": "0.57.37",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-voice:VoiceOutput": {
8
8
  "name": "voiceoutput",
@@ -40,7 +40,11 @@
40
40
  },
41
41
  "type": {
42
42
  "type": "text",
43
- "required": false
43
+ "required": false,
44
+ "description": "What kind of piece this is, such as an article or a document.",
45
+ "_meta": {
46
+ "description": "What kind of piece this is, such as an article or a document."
47
+ }
44
48
  },
45
49
  "variant": {
46
50
  "type": "text",
@@ -52,27 +56,45 @@
52
56
  },
53
57
  "author": {
54
58
  "type": "text",
55
- "required": false
59
+ "required": false,
60
+ "description": "Who wrote this piece.",
61
+ "_meta": {
62
+ "description": "Who wrote this piece."
63
+ }
56
64
  },
57
65
  "name": {
58
66
  "type": "text",
59
67
  "required": true,
60
68
  "default": "",
69
+ "description": "A short name used to find this piece in lists.",
61
70
  "_meta": {
62
- "required": true
71
+ "required": true,
72
+ "description": "A short name used to find this piece in lists."
63
73
  }
64
74
  },
65
75
  "title": {
66
76
  "type": "text",
67
- "required": false
77
+ "required": false,
78
+ "description": "The headline readers see.",
79
+ "_meta": {
80
+ "description": "The headline readers see."
81
+ }
68
82
  },
69
83
  "description": {
70
84
  "type": "text",
71
- "required": false
85
+ "required": false,
86
+ "description": "A one or two sentence summary of the piece.",
87
+ "_meta": {
88
+ "description": "A one or two sentence summary of the piece."
89
+ }
72
90
  },
73
91
  "body": {
74
92
  "type": "text",
75
- "required": false
93
+ "required": false,
94
+ "description": "The full text of the piece.",
95
+ "_meta": {
96
+ "description": "The full text of the piece."
97
+ }
76
98
  },
77
99
  "bodyFormat": {
78
100
  "type": "text",
@@ -84,7 +106,11 @@
84
106
  },
85
107
  "publish_date": {
86
108
  "type": "datetime",
87
- "required": false
109
+ "required": false,
110
+ "description": "The date the piece went out, or is due to go out.",
111
+ "_meta": {
112
+ "description": "The date the piece went out, or is due to go out."
113
+ }
88
114
  },
89
115
  "url": {
90
116
  "type": "text",
@@ -105,16 +131,28 @@
105
131
  "tags": {
106
132
  "type": "json",
107
133
  "required": false,
108
- "default": []
134
+ "default": [],
135
+ "description": "Words that group pieces by subject.",
136
+ "_meta": {
137
+ "description": "Words that group pieces by subject."
138
+ }
109
139
  },
110
140
  "category": {
111
141
  "type": "text",
112
- "required": false
142
+ "required": false,
143
+ "description": "The one section the piece belongs to, such as news or local.",
144
+ "_meta": {
145
+ "description": "The one section the piece belongs to, such as news or local."
146
+ }
113
147
  },
114
148
  "status": {
115
149
  "type": "text",
116
150
  "required": false,
117
151
  "default": "draft",
152
+ "description": "Where the piece stands: draft, in review, published or archived.",
153
+ "_meta": {
154
+ "description": "Where the piece stands: draft, in review, published or archived."
155
+ },
118
156
  "enum": [
119
157
  "published",
120
158
  "draft",
@@ -146,22 +184,38 @@
146
184
  "voiceProfileId": {
147
185
  "type": "foreignKey",
148
186
  "required": false,
149
- "related": "VoiceProfile"
187
+ "related": "VoiceProfile",
188
+ "description": "The voice that read the text.",
189
+ "_meta": {
190
+ "description": "The voice that read the text."
191
+ }
150
192
  },
151
193
  "sourceText": {
152
194
  "type": "text",
153
195
  "required": false,
154
- "default": ""
196
+ "default": "",
197
+ "description": "The text that was read aloud.",
198
+ "_meta": {
199
+ "description": "The text that was read aloud."
200
+ }
155
201
  },
156
202
  "audioAssetId": {
157
203
  "type": "crossPackageRef",
158
204
  "required": false,
159
- "related": "@happyvertical/smrt-assets:Asset"
205
+ "related": "@happyvertical/smrt-assets:Asset",
206
+ "description": "The audio file of the recording.",
207
+ "_meta": {
208
+ "description": "The audio file of the recording."
209
+ }
160
210
  },
161
211
  "duration": {
162
212
  "type": "integer",
163
213
  "required": false,
164
- "default": 0
214
+ "default": 0,
215
+ "description": "How long the recording runs, in seconds.",
216
+ "_meta": {
217
+ "description": "How long the recording runs, in seconds."
218
+ }
165
219
  },
166
220
  "wordTimings": {
167
221
  "type": "json",
@@ -1464,21 +1518,37 @@
1464
1518
  "name": {
1465
1519
  "type": "text",
1466
1520
  "required": false,
1467
- "default": ""
1521
+ "default": "",
1522
+ "description": "What you call this voice, such as \"Warm narrator\".",
1523
+ "_meta": {
1524
+ "description": "What you call this voice, such as \"Warm narrator\"."
1525
+ }
1468
1526
  },
1469
1527
  "description": {
1470
1528
  "type": "text",
1471
- "required": false
1529
+ "required": false,
1530
+ "description": "A note on how the voice sounds and what you use it for.",
1531
+ "_meta": {
1532
+ "description": "A note on how the voice sounds and what you use it for."
1533
+ }
1472
1534
  },
1473
1535
  "language": {
1474
1536
  "type": "text",
1475
1537
  "required": false,
1476
- "default": "en-US"
1538
+ "default": "en-US",
1539
+ "description": "The language the voice speaks.",
1540
+ "_meta": {
1541
+ "description": "The language the voice speaks."
1542
+ }
1477
1543
  },
1478
1544
  "gender": {
1479
1545
  "type": "text",
1480
1546
  "required": false,
1481
1547
  "default": "neutral",
1548
+ "description": "Whether the voice sounds male, female or neutral.",
1549
+ "_meta": {
1550
+ "description": "Whether the voice sounds male, female or neutral."
1551
+ },
1482
1552
  "enum": [
1483
1553
  "male",
1484
1554
  "female",
@@ -1487,12 +1557,20 @@
1487
1557
  },
1488
1558
  "designPrompt": {
1489
1559
  "type": "text",
1490
- "required": false
1560
+ "required": false,
1561
+ "description": "Describe the voice you want in your own words, when there is no clip to copy.",
1562
+ "_meta": {
1563
+ "description": "Describe the voice you want in your own words, when there is no clip to copy."
1564
+ }
1491
1565
  },
1492
1566
  "sampleAssetId": {
1493
1567
  "type": "crossPackageRef",
1494
1568
  "required": false,
1495
- "related": "@happyvertical/smrt-assets:Asset"
1569
+ "related": "@happyvertical/smrt-assets:Asset",
1570
+ "description": "The recorded clip the voice is copied from, when there is one. Leave it empty for a described voice.",
1571
+ "_meta": {
1572
+ "description": "The recorded clip the voice is copied from, when there is one. Leave it empty for a described voice."
1573
+ }
1496
1574
  },
1497
1575
  "voiceData": {
1498
1576
  "type": "json",
@@ -1513,6 +1591,10 @@
1513
1591
  "type": "text",
1514
1592
  "required": false,
1515
1593
  "default": "pending",
1594
+ "description": "Where the voice stands: waiting, being prepared, ready to use, or failed. The speech service updates it.",
1595
+ "_meta": {
1596
+ "description": "Where the voice stands: waiting, being prepared, ready to use, or failed. The speech service updates it."
1597
+ },
1516
1598
  "enum": [
1517
1599
  "pending",
1518
1600
  "processing",
@@ -1748,26 +1830,46 @@
1748
1830
  "voiceProfileId": {
1749
1831
  "type": "foreignKey",
1750
1832
  "required": false,
1751
- "related": "VoiceProfile"
1833
+ "related": "VoiceProfile",
1834
+ "description": "The voice this clip belongs to.",
1835
+ "_meta": {
1836
+ "description": "The voice this clip belongs to."
1837
+ }
1752
1838
  },
1753
1839
  "assetId": {
1754
1840
  "type": "crossPackageRef",
1755
1841
  "required": false,
1756
- "related": "@happyvertical/smrt-assets:Asset"
1842
+ "related": "@happyvertical/smrt-assets:Asset",
1843
+ "description": "The audio file of the recording.",
1844
+ "_meta": {
1845
+ "description": "The audio file of the recording."
1846
+ }
1757
1847
  },
1758
1848
  "duration": {
1759
1849
  "type": "integer",
1760
1850
  "required": false,
1761
- "default": 0
1851
+ "default": 0,
1852
+ "description": "How long the clip runs, in seconds. At least three is needed.",
1853
+ "_meta": {
1854
+ "description": "How long the clip runs, in seconds. At least three is needed."
1855
+ }
1762
1856
  },
1763
1857
  "transcription": {
1764
1858
  "type": "text",
1765
- "required": false
1859
+ "required": false,
1860
+ "description": "The words spoken in the clip, written out.",
1861
+ "_meta": {
1862
+ "description": "The words spoken in the clip, written out."
1863
+ }
1766
1864
  },
1767
1865
  "quality": {
1768
1866
  "type": "text",
1769
1867
  "required": false,
1770
1868
  "default": "medium",
1869
+ "description": "How clean the recording is: low, medium or high. A low one cannot be used to copy a voice.",
1870
+ "_meta": {
1871
+ "description": "How clean the recording is: low, medium or high. A low one cannot be used to copy a voice."
1872
+ },
1771
1873
  "enum": [
1772
1874
  "low",
1773
1875
  "medium",
@@ -1789,7 +1891,11 @@
1789
1891
  "isPrimary": {
1790
1892
  "type": "boolean",
1791
1893
  "required": false,
1792
- "default": false
1894
+ "default": false,
1895
+ "description": "Tick the one clip that best represents the voice.",
1896
+ "_meta": {
1897
+ "description": "Tick the one clip that best represents the voice."
1898
+ }
1793
1899
  }
1794
1900
  },
1795
1901
  "methods": {},
@@ -1957,6 +2063,263 @@
1957
2063
  }
1958
2064
  },
1959
2065
  "moduleType": "smrt",
2066
+ "recipes": [
2067
+ {
2068
+ "id": "voice.profiles",
2069
+ "className": "VoiceProfilesRecipe",
2070
+ "label": "Voice",
2071
+ "summary": "Set up the voices your app can speak in, from a description or a recorded clip, and keep the speech it generates.",
2072
+ "synonyms": [
2073
+ "voices",
2074
+ "text to speech",
2075
+ "read aloud",
2076
+ "voice cloning",
2077
+ "narration",
2078
+ "speech"
2079
+ ],
2080
+ "models": [
2081
+ "@happyvertical/smrt-voice:VoiceProfile",
2082
+ "@happyvertical/smrt-voice:VoiceSample",
2083
+ "@happyvertical/smrt-voice:VoiceOutput"
2084
+ ],
2085
+ "nav": [
2086
+ {
2087
+ "label": "Voices",
2088
+ "model": "@happyvertical/smrt-voice:VoiceProfile",
2089
+ "icon": "users",
2090
+ "description": "The voices your app can speak in, described in words or copied from a clip.",
2091
+ "noun": "voice"
2092
+ },
2093
+ {
2094
+ "label": "Samples",
2095
+ "model": "@happyvertical/smrt-voice:VoiceSample",
2096
+ "icon": "folder",
2097
+ "description": "The recorded clips a voice is copied from.",
2098
+ "noun": "sample"
2099
+ },
2100
+ {
2101
+ "label": "Generated speech",
2102
+ "model": "@happyvertical/smrt-voice:VoiceOutput",
2103
+ "icon": "fileText",
2104
+ "description": "Every recording the app has read aloud, with its text.",
2105
+ "noun": "recording"
2106
+ }
2107
+ ],
2108
+ "requires": [],
2109
+ "section": {
2110
+ "id": "publish",
2111
+ "label": "Publish",
2112
+ "icon": "fileText",
2113
+ "description": "What you write, record and put out."
2114
+ },
2115
+ "options": {
2116
+ "@happyvertical/smrt-voice:VoiceProfile": {
2117
+ "fields": {
2118
+ "name": {
2119
+ "order": 1
2120
+ },
2121
+ "description": {
2122
+ "order": 2
2123
+ },
2124
+ "language": {
2125
+ "order": 3
2126
+ },
2127
+ "gender": {
2128
+ "order": 4
2129
+ },
2130
+ "designPrompt": {
2131
+ "label": "Describe the voice",
2132
+ "order": 5
2133
+ },
2134
+ "sampleAssetId": {
2135
+ "label": "Sample clip",
2136
+ "order": 6
2137
+ },
2138
+ "status": {
2139
+ "order": 7
2140
+ },
2141
+ "defaultSpeed": {
2142
+ "label": "Speed",
2143
+ "visibility": "advanced"
2144
+ },
2145
+ "defaultPitch": {
2146
+ "label": "Pitch",
2147
+ "visibility": "advanced"
2148
+ },
2149
+ "provider": {
2150
+ "label": "Speech service",
2151
+ "visibility": "advanced"
2152
+ },
2153
+ "errorMessage": {
2154
+ "label": "What went wrong",
2155
+ "visibility": "advanced"
2156
+ },
2157
+ "voiceData": {
2158
+ "visibility": "hidden"
2159
+ },
2160
+ "tenantId": {
2161
+ "visibility": "hidden"
2162
+ }
2163
+ }
2164
+ },
2165
+ "@happyvertical/smrt-voice:VoiceSample": {
2166
+ "fields": {
2167
+ "voiceProfileId": {
2168
+ "label": "Voice",
2169
+ "order": 1
2170
+ },
2171
+ "assetId": {
2172
+ "label": "Audio file",
2173
+ "order": 2
2174
+ },
2175
+ "duration": {
2176
+ "label": "Length in seconds",
2177
+ "order": 3
2178
+ },
2179
+ "transcription": {
2180
+ "label": "What is said",
2181
+ "order": 4
2182
+ },
2183
+ "quality": {
2184
+ "order": 5
2185
+ },
2186
+ "isPrimary": {
2187
+ "label": "Main clip",
2188
+ "order": 6
2189
+ },
2190
+ "sampleRate": {
2191
+ "visibility": "advanced"
2192
+ },
2193
+ "channels": {
2194
+ "visibility": "advanced"
2195
+ },
2196
+ "format": {
2197
+ "visibility": "advanced"
2198
+ },
2199
+ "tenantId": {
2200
+ "visibility": "hidden"
2201
+ }
2202
+ }
2203
+ },
2204
+ "@happyvertical/smrt-voice:VoiceOutput": {
2205
+ "fields": {
2206
+ "name": {
2207
+ "label": "Title",
2208
+ "order": 1
2209
+ },
2210
+ "sourceText": {
2211
+ "label": "Text",
2212
+ "order": 2
2213
+ },
2214
+ "voiceProfileId": {
2215
+ "label": "Voice",
2216
+ "order": 3
2217
+ },
2218
+ "audioAssetId": {
2219
+ "label": "Audio file",
2220
+ "order": 4
2221
+ },
2222
+ "duration": {
2223
+ "label": "Length in seconds",
2224
+ "order": 5
2225
+ },
2226
+ "description": {
2227
+ "visibility": "advanced"
2228
+ },
2229
+ "author": {
2230
+ "visibility": "advanced"
2231
+ },
2232
+ "publish_date": {
2233
+ "label": "Date",
2234
+ "visibility": "advanced"
2235
+ },
2236
+ "language": {
2237
+ "visibility": "advanced"
2238
+ },
2239
+ "wordTimings": {
2240
+ "visibility": "hidden"
2241
+ },
2242
+ "audioMetadata": {
2243
+ "visibility": "hidden"
2244
+ },
2245
+ "type": {
2246
+ "visibility": "hidden"
2247
+ },
2248
+ "variant": {
2249
+ "visibility": "hidden"
2250
+ },
2251
+ "fileKey": {
2252
+ "visibility": "hidden"
2253
+ },
2254
+ "body": {
2255
+ "visibility": "hidden"
2256
+ },
2257
+ "bodyFormat": {
2258
+ "visibility": "hidden"
2259
+ },
2260
+ "url": {
2261
+ "visibility": "hidden"
2262
+ },
2263
+ "source": {
2264
+ "visibility": "hidden"
2265
+ },
2266
+ "original_url": {
2267
+ "visibility": "hidden"
2268
+ },
2269
+ "tags": {
2270
+ "visibility": "hidden"
2271
+ },
2272
+ "category": {
2273
+ "visibility": "hidden"
2274
+ },
2275
+ "status": {
2276
+ "visibility": "hidden"
2277
+ },
2278
+ "state": {
2279
+ "visibility": "hidden"
2280
+ },
2281
+ "metadata": {
2282
+ "visibility": "hidden"
2283
+ },
2284
+ "thumbnailAssetId": {
2285
+ "visibility": "hidden"
2286
+ },
2287
+ "tenantId": {
2288
+ "visibility": "hidden"
2289
+ }
2290
+ }
2291
+ }
2292
+ },
2293
+ "help": {
2294
+ "markdown": "## Overview\n\nVoice is where you set up the voices your app can speak in and keep the speech\nit has read aloud. A voice is either described in your own words, such as \"a\nwarm, unhurried narrator\", or copied from a recorded clip of a real person. The\nspeech service prepares the voice and shows where it stands, from waiting to\nready. Once a voice is ready, the app can read any text aloud in it, and each\nrecording it makes is kept here with the text it came from.\n\n## Tasks\n\n### Create a voice\n\n1. Open the list of voices and choose **New**.\n2. Give the voice a **{field:VoiceProfile.name}** your team will recognise.\n3. Pick the **{field:VoiceProfile.language}** it speaks and, if you like, the **{field:VoiceProfile.gender}** it should sound like.\n4. Do one of the following, not both: write what you want to hear in **{field:VoiceProfile.designPrompt}**, or pick a recorded clip in **{field:VoiceProfile.sampleAssetId}** to copy a real voice.\n5. Save. The **{field:VoiceProfile.status}** shows whether the speech service is still preparing the voice, has it ready, or could not make it. You do not set it yourself.\n\n### Add a sample clip\n\nA clip can only be used to copy a voice when it runs at least three seconds and\nits quality is not low. One clear speaker with no background noise works best.\n\n1. Open the list of samples and choose **New**.\n2. Pick the **{field:VoiceSample.voiceProfileId}** the clip is for and the **{field:VoiceSample.assetId}** holding the recording.\n3. Enter the **{field:VoiceSample.duration}** and, if you know it, the **{field:VoiceSample.quality}** of the recording.\n4. Write out **{field:VoiceSample.transcription}** so the words can be matched to the sound.\n5. Tick **{field:VoiceSample.isPrimary}** on the clip that best represents the voice.\n6. Save. To take a clip out, open it and remove it.\n\n### Find a recording the app has made\n\nRecordings are made by the speech service whenever the app reads text aloud in\none of your voices. The sound itself always comes from the service; here you\nfind, listen to and tidy up what it has made.\n\n1. Open the list of generated speech.\n2. Look at the **{field:VoiceOutput.name}** and the **{field:VoiceOutput.voiceProfileId}** to find the one you want.\n3. Open it to read the **{field:VoiceOutput.sourceText}** and play the **{field:VoiceOutput.audioAssetId}**; the **{field:VoiceOutput.duration}** tells you how long it runs.\n4. To clear out a recording you no longer need, open it and remove it.\n",
2295
+ "fieldRefs": [
2296
+ "VoiceOutput.audioAssetId",
2297
+ "VoiceOutput.duration",
2298
+ "VoiceOutput.name",
2299
+ "VoiceOutput.sourceText",
2300
+ "VoiceOutput.voiceProfileId",
2301
+ "VoiceProfile.designPrompt",
2302
+ "VoiceProfile.gender",
2303
+ "VoiceProfile.language",
2304
+ "VoiceProfile.name",
2305
+ "VoiceProfile.sampleAssetId",
2306
+ "VoiceProfile.status",
2307
+ "VoiceSample.assetId",
2308
+ "VoiceSample.duration",
2309
+ "VoiceSample.isPrimary",
2310
+ "VoiceSample.quality",
2311
+ "VoiceSample.transcription",
2312
+ "VoiceSample.voiceProfileId"
2313
+ ]
2314
+ },
2315
+ "demo": {
2316
+ "mode": "server",
2317
+ "reasons": [
2318
+ "Needs a server because its package does not build for a browser: documents/spider SDK graph; CJS parse error; and its package depends on @happyvertical/smrt-agents, @happyvertical/smrt-chat, @happyvertical/smrt-content, @happyvertical/smrt-images, @happyvertical/smrt-jobs, @happyvertical/smrt-profiles, @happyvertical/smrt-reports, @happyvertical/smrt-secrets, @happyvertical/smrt-tenancy, @happyvertical/smrt-users, which do not build for a browser (#3615, #3617, #3624, #3625, #3626, #3627, #3628)."
2319
+ ]
2320
+ }
2321
+ }
2322
+ ],
1960
2323
  "smrtDependencies": [
1961
2324
  "@happyvertical/smrt-assets",
1962
2325
  "@happyvertical/smrt-content",