ssml-builder-js 2.7.0 → 2.8.1

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/dist/elements.js CHANGED
@@ -74,7 +74,8 @@ var SSML_TAGS = {
74
74
  MSTTS_SILENCE: "mstts:silence",
75
75
  SILENCE: "silence",
76
76
  MSTTS_VISEME: "mstts:viseme",
77
- VISEME: "viseme"
77
+ VISEME: "viseme",
78
+ MSTTS_AUDIO_DURATION: "mstts:audioduration"
78
79
  };
79
80
  var SSML_ATTRS = {
80
81
  VERSION: "version",
@@ -201,6 +202,9 @@ function getAttributes(element) {
201
202
  case SSML_TAGS.VISEME:
202
203
  addAttribute(attributes, SSML_ATTRS.TYPE, element.typeValue ?? element.visemeType);
203
204
  break;
205
+ case SSML_TAGS.MSTTS_AUDIO_DURATION:
206
+ addAttribute(attributes, SSML_ATTRS.VALUE, element.value);
207
+ break;
204
208
  case SSML_TAGS.PARAGRAPH:
205
209
  case SSML_TAGS.SENTENCE:
206
210
  case SSML_TAGS.WORD:
@@ -225,6 +229,8 @@ function getTagName(element) {
225
229
  case SSML_TAGS.VISEME:
226
230
  case SSML_TAGS.MSTTS_VISEME:
227
231
  return SSML_TAGS.MSTTS_VISEME;
232
+ case SSML_TAGS.MSTTS_AUDIO_DURATION:
233
+ return SSML_TAGS.MSTTS_AUDIO_DURATION;
228
234
  case "element":
229
235
  case "custom":
230
236
  return element.name;
@@ -757,6 +763,12 @@ function convertElement(node) {
757
763
  if (typeValue !== void 0) element.typeValue = typeValue;
758
764
  return finishElement(element, node, attributes);
759
765
  }
766
+ case SSML_TAGS.MSTTS_AUDIO_DURATION: {
767
+ const element = { type: SSML_TAGS.MSTTS_AUDIO_DURATION };
768
+ const value = readAttribute(attributes, SSML_ATTRS.VALUE);
769
+ if (value !== void 0) element.value = value;
770
+ return finishElement(element, node, attributes);
771
+ }
760
772
  default: {
761
773
  const element = {
762
774
  name: node.name,
@@ -858,6 +870,7 @@ var INTRINSICALLY_EMPTY_ELEMENTS = /* @__PURE__ */ new Set([
858
870
  "lexicon",
859
871
  "mark",
860
872
  "mstts:silence",
873
+ "mstts:audioduration",
861
874
  "mstts:viseme",
862
875
  "silence",
863
876
  "viseme"
@@ -1516,6 +1529,8 @@ function updateEditableText(document2, value) {
1516
1529
  // packages/ssml-editor-react/src/constants/ssmlPresets.ts
1517
1530
  var ssmlPresets_exports = {};
1518
1531
  __export(ssmlPresets_exports, {
1532
+ AUDIO_DURATION_DESCRIPTIONS: () => AUDIO_DURATION_DESCRIPTIONS,
1533
+ AUDIO_DURATION_PRESETS: () => AUDIO_DURATION_PRESETS,
1519
1534
  BREAK_STRENGTH_PRESETS: () => BREAK_STRENGTH_PRESETS,
1520
1535
  BREAK_TIME_DESCRIPTIONS: () => BREAK_TIME_DESCRIPTIONS,
1521
1536
  BREAK_TIME_PRESETS: () => BREAK_TIME_PRESETS,
@@ -1548,6 +1563,103 @@ __export(ssmlPresets_exports, {
1548
1563
  getExpressAsStyleCategory: () => getExpressAsStyleCategory,
1549
1564
  resolveExpressAsStyles: () => resolveExpressAsStyles
1550
1565
  });
1566
+
1567
+ // packages/ssml-editor-react/src/constants/azureVoiceStyleMap.generated.ts
1568
+ var AZURE_VOICE_STYLE_MAP = {
1569
+ "de-DE-ConradNeural": ["cheerful", "sad"],
1570
+ "de-DE-KatjaNeural": ["cheerful", "sad"],
1571
+ "en-US-AndrewNeural": ["empathetic", "relieved"],
1572
+ "en-US-GuyNeural": [
1573
+ "angry",
1574
+ "cheerful",
1575
+ "excited",
1576
+ "friendly",
1577
+ "hopeful",
1578
+ "newscast",
1579
+ "sad",
1580
+ "shouting",
1581
+ "terrified",
1582
+ "unfriendly",
1583
+ "whispering"
1584
+ ],
1585
+ "en-US-JennyMultilingualNeural": [
1586
+ "cheerful",
1587
+ "empathetic",
1588
+ "excited",
1589
+ "friendly",
1590
+ "hopeful",
1591
+ "sad",
1592
+ "shouting",
1593
+ "terrified",
1594
+ "unfriendly",
1595
+ "whispering"
1596
+ ],
1597
+ "en-US-JennyNeural": [
1598
+ "assistant",
1599
+ "chat",
1600
+ "customerservice",
1601
+ "newscast",
1602
+ "cheerful",
1603
+ "empathetic",
1604
+ "excited",
1605
+ "friendly",
1606
+ "hopeful",
1607
+ "sad",
1608
+ "shouting",
1609
+ "terrified",
1610
+ "unfriendly",
1611
+ "whispering"
1612
+ ],
1613
+ "es-ES-ElviraNeural": [],
1614
+ "fil-PH-AngeloNeural": [],
1615
+ "fr-FR-DeniseNeural": ["cheerful", "sad"],
1616
+ "fr-FR-HenriNeural": ["cheerful", "sad"],
1617
+ "id-ID-GadisNeural": [],
1618
+ "it-IT-ElsaNeural": ["cheerful", "sad"],
1619
+ "ja-JP-KeitaNeural": ["chat"],
1620
+ "ja-JP-MayuNeural": ["calm", "cheerful", "sad"],
1621
+ "ja-JP-NanamiNeural": ["chat", "customerservice", "cheerful", "whispering", "sad"],
1622
+ "ko-KR-SunHiNeural": ["cheerful", "sad"],
1623
+ "ms-MY-YasminNeural": [],
1624
+ "pt-BR-FranciscaNeural": ["calm"],
1625
+ "ru-RU-SvetlanaNeural": ["cheerful", "sad", "angry", "disgruntled", "embarrassed", "fearful"],
1626
+ "th-TH-PremwadeeNeural": [],
1627
+ "vi-VN-HoaiMyNeural": [],
1628
+ "zh-CN-XiaoxiaoNeural": [
1629
+ "assistant",
1630
+ "chat",
1631
+ "customerservice",
1632
+ "newscast",
1633
+ "cheerful",
1634
+ "empathetic",
1635
+ "excited",
1636
+ "friendly",
1637
+ "hopeful",
1638
+ "sad",
1639
+ "terrified",
1640
+ "whispering",
1641
+ "poetry-reading",
1642
+ "sports_commentary",
1643
+ "sports_commentary_excited",
1644
+ "story"
1645
+ ],
1646
+ "zh-CN-YunxiNeural": [
1647
+ "narration-relaxed",
1648
+ "embarrassed",
1649
+ "fearful",
1650
+ "sad",
1651
+ "disgruntled",
1652
+ "serious",
1653
+ "angry",
1654
+ "depressed",
1655
+ "chat",
1656
+ "cheerful",
1657
+ "assistant"
1658
+ ],
1659
+ "zh-TW-HsiaoChenNeural": []
1660
+ };
1661
+
1662
+ // packages/ssml-editor-react/src/constants/ssmlPresets.ts
1551
1663
  var SSML_PRESETS = [
1552
1664
  {
1553
1665
  id: "basic",
@@ -1647,7 +1759,7 @@ function getExpressAsStyleCategory(style) {
1647
1759
  }
1648
1760
  return "other";
1649
1761
  }
1650
- var VOICE_STYLE_MAP = {
1762
+ var LEGACY_VOICE_STYLE_MAP = {
1651
1763
  "ja-JP-MayuNeural": ["calm", "cheerful", "sad"],
1652
1764
  "ja-JP-KeitaNeural": ["chat"],
1653
1765
  "ja-JP-NanamiNeural": ["chat", "customerservice", "cheerful", "whispering", "sad"],
@@ -1733,6 +1845,7 @@ var VOICE_STYLE_MAP = {
1733
1845
  "de-DE-ConradNeural": ["cheerful", "sad"],
1734
1846
  "ru-RU-SvetlanaNeural": ["cheerful", "sad", "angry", "disgruntled", "embarrassed", "fearful"]
1735
1847
  };
1848
+ var VOICE_STYLE_MAP = Object.keys(AZURE_VOICE_STYLE_MAP).length > 0 ? AZURE_VOICE_STYLE_MAP : LEGACY_VOICE_STYLE_MAP;
1736
1849
  var VOICE_STYLE_MAP_BY_NORMALIZED_NAME = new Map(
1737
1850
  Object.entries(VOICE_STYLE_MAP).map(([voiceName, styles]) => [voiceName.toLowerCase(), styles])
1738
1851
  );
@@ -1775,6 +1888,7 @@ var SAY_AS_PRESETS = [
1775
1888
  ];
1776
1889
  var LANGUAGE_PRESETS = ["ja-JP", "en-US", "de-DE", "fr-FR"];
1777
1890
  var SILENCE_VALUE_PRESETS = ["300ms", "500ms", "1s"];
1891
+ var AUDIO_DURATION_PRESETS = ["5s", "10s", "30s"];
1778
1892
  var SILENCE_TYPE_PRESETS = [
1779
1893
  "Leading",
1780
1894
  "Tailing",
@@ -1783,6 +1897,11 @@ var SILENCE_TYPE_PRESETS = [
1783
1897
  "Semicolon",
1784
1898
  "Enumerationcomma"
1785
1899
  ];
1900
+ var AUDIO_DURATION_DESCRIPTIONS = {
1901
+ "5s": { ja: "5\u79D2", en: "5 seconds" },
1902
+ "10s": { ja: "10\u79D2", en: "10 seconds" },
1903
+ "30s": { ja: "30\u79D2", en: "30 seconds" }
1904
+ };
1786
1905
  var PHONEME_ALPHABET_PRESETS = ["ipa", "sapi", "ups", "x-sampa"];
1787
1906
  var VISEME_TYPE_PRESETS = ["redlips_front", "FacialExpression"];
1788
1907
  var SSML_ATTRIBUTE_PRESETS = {
@@ -1826,6 +1945,9 @@ var SSML_ATTRIBUTE_PRESETS = {
1826
1945
  type: SILENCE_TYPE_PRESETS,
1827
1946
  value: SILENCE_VALUE_PRESETS
1828
1947
  },
1948
+ "mstts:audioduration": {
1949
+ value: AUDIO_DURATION_PRESETS
1950
+ },
1829
1951
  silence: {
1830
1952
  type: SILENCE_TYPE_PRESETS,
1831
1953
  value: SILENCE_VALUE_PRESETS
@@ -2313,6 +2435,10 @@ var SSML_COMPLETION_SNIPPETS = [
2313
2435
  label: "mstts:express-as",
2314
2436
  insertText: `<mstts:express-as style="cheerful">\${1:text}</mstts:express-as>`
2315
2437
  },
2438
+ {
2439
+ label: "mstts:audioduration",
2440
+ insertText: '<mstts:audioduration value="10s" />'
2441
+ },
2316
2442
  {
2317
2443
  label: "sub",
2318
2444
  insertText: `<sub alias="\${1:\u8AAD\u307F}">\${2:\u6F22\u5B57}</sub>`
@@ -2580,6 +2706,13 @@ var SSML_HOVER_COPY = {
2580
2706
  parameters: {
2581
2707
  type: { title: "type", description: "\u30D3\u30BC\u30FC\u30E0\u30A4\u30D9\u30F3\u30C8\u306E\u5F62\u5F0F\u3002" }
2582
2708
  }
2709
+ },
2710
+ "mstts:audioduration": {
2711
+ title: "\u97F3\u58F0\u9577",
2712
+ description: "\u5408\u6210\u97F3\u58F0\u306E\u76EE\u6A19\u6642\u9593\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002",
2713
+ parameters: {
2714
+ value: { title: "value", description: "\u76EE\u6A19\u6642\u9593\u3002\u4F8B: `10s`\u3001`5000ms`\u3001`00:00:10`\u3002" }
2715
+ }
2583
2716
  }
2584
2717
  }
2585
2718
  },
@@ -2737,6 +2870,13 @@ var SSML_HOVER_COPY = {
2737
2870
  parameters: {
2738
2871
  type: { title: "type", description: "The viseme event format." }
2739
2872
  }
2873
+ },
2874
+ "mstts:audioduration": {
2875
+ title: "Audio duration",
2876
+ description: "Sets the target duration of synthesized audio.",
2877
+ parameters: {
2878
+ value: { title: "value", description: "The target duration, such as `10s`, `5000ms`, or `00:00:10`." }
2879
+ }
2740
2880
  }
2741
2881
  }
2742
2882
  }
@@ -3033,6 +3173,17 @@ var SSML_TAG_DEFINITIONS = [
3033
3173
  values: VISEME_TYPE_PRESETS2
3034
3174
  }
3035
3175
  ]
3176
+ },
3177
+ {
3178
+ name: "mstts:audioduration",
3179
+ description: "Sets the target duration of synthesized audio.",
3180
+ parameters: [
3181
+ {
3182
+ name: "value",
3183
+ description: "The target duration, such as `10s`, `5000ms`, or `00:00:10`.",
3184
+ example: "10s"
3185
+ }
3186
+ ]
3036
3187
  }
3037
3188
  ];
3038
3189
  var definitionsByName = /* @__PURE__ */ new Map();
@@ -3574,13 +3725,34 @@ var SSML_INSERTIONS = [
3574
3725
  suffix: "",
3575
3726
  mode: "insert"
3576
3727
  })
3728
+ },
3729
+ {
3730
+ id: "mstts:audioduration",
3731
+ icon: "\u25F7",
3732
+ tagName: "mstts:audioduration",
3733
+ selfClosing: true,
3734
+ labels: { ja: "\u97F3\u58F0\u9577", en: "Audio duration" },
3735
+ descriptions: {
3736
+ ja: "\u5408\u6210\u97F3\u58F0\u306E\u76EE\u6A19\u6642\u9593\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002",
3737
+ en: "Sets the target duration of synthesized audio."
3738
+ },
3739
+ parameterDescription: {
3740
+ ja: "\u76EE\u6A19\u6642\u9593\u3092\u9078\u629E\u3057\u307E\u3059\u3002",
3741
+ en: "Selects the target duration."
3742
+ },
3743
+ options: createInsertionOptions(AUDIO_DURATION_PRESETS, AUDIO_DURATION_DESCRIPTIONS),
3744
+ createTemplate: (value) => ({
3745
+ prefix: `<mstts:audioduration value="${value}"/>`,
3746
+ suffix: "",
3747
+ mode: "insert"
3748
+ })
3577
3749
  }
3578
3750
  ];
3579
3751
  var DEFAULT_INSERTION_GROUPS = [
3580
3752
  {
3581
3753
  id: "pauses",
3582
3754
  labels: { ja: "\u9593\u30FB\u7121\u97F3", en: "Pauses" },
3583
- insertionIds: ["break", "mstts:silence"]
3755
+ insertionIds: ["break", "mstts:silence", "mstts:audioduration"]
3584
3756
  },
3585
3757
  {
3586
3758
  id: "prosody",