echogarden 0.11.12 → 0.11.13

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.
Files changed (122) hide show
  1. package/data/schemas/options.json +16 -0
  2. package/dist/api/Alignment.js +2 -2
  3. package/dist/api/Alignment.js.map +1 -1
  4. package/dist/api/Recognition.js +2 -2
  5. package/dist/api/Recognition.js.map +1 -1
  6. package/dist/api/Synthesis.js +5 -4
  7. package/dist/api/Synthesis.js.map +1 -1
  8. package/dist/api/Translation.js +2 -2
  9. package/dist/api/Translation.js.map +1 -1
  10. package/dist/audio/AudioUtilities.d.ts +1 -0
  11. package/dist/audio/AudioUtilities.js +25 -7
  12. package/dist/audio/AudioUtilities.js.map +1 -1
  13. package/dist/cli/CLI.js +2 -2
  14. package/dist/cli/CLI.js.map +1 -1
  15. package/dist/recognition/WhisperSTT.js +2 -2
  16. package/dist/recognition/WhisperSTT.js.map +1 -1
  17. package/dist/subtitles/Subtitles.d.ts +10 -7
  18. package/dist/subtitles/Subtitles.js +268 -207
  19. package/dist/subtitles/Subtitles.js.map +1 -1
  20. package/docs/Options.md +4 -2
  21. package/package.json +7 -6
  22. package/src/alignment/DTWMfccSequenceAlignment.ts +43 -0
  23. package/src/alignment/DTWSequenceAlignment.ts +121 -0
  24. package/src/alignment/DTWSequenceAlignmentWindowed.ts +210 -0
  25. package/src/alignment/LevenshteinSequenceAlignment.ts +126 -0
  26. package/src/alignment/SpeechAlignment.ts +488 -0
  27. package/src/api/API.ts +12 -0
  28. package/src/api/APIOptions.ts +15 -0
  29. package/src/api/Alignment.ts +329 -0
  30. package/src/api/Common.ts +16 -0
  31. package/src/api/Denoising.ts +120 -0
  32. package/src/api/LanguageDetection.ts +286 -0
  33. package/src/api/Recognition.ts +344 -0
  34. package/src/api/Synthesis.ts +1735 -0
  35. package/src/api/Translation.ts +143 -0
  36. package/src/api/Vad.ts +172 -0
  37. package/src/audio/AudioBufferConversion.ts +248 -0
  38. package/src/audio/AudioPlayer.ts +358 -0
  39. package/src/audio/AudioRecorder.ts +91 -0
  40. package/src/audio/AudioUtilities.ts +392 -0
  41. package/src/audio/SoxPath.ts +24 -0
  42. package/src/cli/CLI.ts +1360 -0
  43. package/src/cli/CLIConfigFile.ts +91 -0
  44. package/src/cli/CLILauncher.ts +26 -0
  45. package/src/cli/CLIOptionsSchema.ts +54 -0
  46. package/src/cli/CLIParser.ts +41 -0
  47. package/src/cli/CLIStarter.ts +40 -0
  48. package/src/codecs/FFMpegTranscoder.ts +214 -0
  49. package/src/codecs/TIMITCodec.ts +17 -0
  50. package/src/codecs/WaveCodec.ts +260 -0
  51. package/src/denoising/RNNoise.ts +95 -0
  52. package/src/dsp/BiquadFilter.ts +488 -0
  53. package/src/dsp/FFT.ts +187 -0
  54. package/src/dsp/MFCC.ts +227 -0
  55. package/src/dsp/MelSpectogram.ts +145 -0
  56. package/src/dsp/Rubberband.ts +249 -0
  57. package/src/dsp/Sonic.ts +59 -0
  58. package/src/dsp/SpeexResampler.ts +79 -0
  59. package/src/math/VectorMath.ts +812 -0
  60. package/src/nlp/ChineseSegmentation.ts +68 -0
  61. package/src/nlp/CompromiseNLP.ts +113 -0
  62. package/src/nlp/EspeakPhonemizer.ts +168 -0
  63. package/src/nlp/IPA.ts +139 -0
  64. package/src/nlp/JapaneseSegmentation.ts +53 -0
  65. package/src/nlp/Lexicon.ts +119 -0
  66. package/src/nlp/PhoneConversion.ts +508 -0
  67. package/src/nlp/Segmentation.ts +237 -0
  68. package/src/nlp/TextNormalizer.ts +160 -0
  69. package/src/recognition/AmazonTranscribeSTT.ts +112 -0
  70. package/src/recognition/AzureCognitiveServicesSTT.ts +76 -0
  71. package/src/recognition/GoogleCloudSTT.ts +92 -0
  72. package/src/recognition/SileroSTT.ts +173 -0
  73. package/src/recognition/VoskSTT.ts +112 -0
  74. package/src/recognition/WhisperSTT.ts +1518 -0
  75. package/src/server/Client.ts +297 -0
  76. package/src/server/Server.ts +178 -0
  77. package/src/server/ServerStarter.ts +12 -0
  78. package/src/server/Worker.ts +400 -0
  79. package/src/server/WorkerStarter.ts +38 -0
  80. package/src/speech-language-detection/SileroLanguageDetection.ts +105 -0
  81. package/src/subtitles/Subtitles.ts +478 -0
  82. package/src/synthesis/AwsPollyTTS.ts +78 -0
  83. package/src/synthesis/AzureCognitiveServicesTTS.ts +146 -0
  84. package/src/synthesis/CoquiServerTTS.ts +29 -0
  85. package/src/synthesis/ElevenLabsTTS.ts +104 -0
  86. package/src/synthesis/EspeakTTS.ts +552 -0
  87. package/src/synthesis/FliteTTS.ts +387 -0
  88. package/src/synthesis/GoogleCloudTTS.ts +112 -0
  89. package/src/synthesis/GoogleTranslateTTS.ts +210 -0
  90. package/src/synthesis/MicrosoftEdgeTTS.ts +298 -0
  91. package/src/synthesis/SamTTS.ts +30 -0
  92. package/src/synthesis/SapiTTS.ts +222 -0
  93. package/src/synthesis/StreamlabsPollyTTS.ts +114 -0
  94. package/src/synthesis/SvoxPicoTTS.ts +318 -0
  95. package/src/synthesis/VitsTTS.ts +734 -0
  96. package/src/tests/Test.ts +24 -0
  97. package/src/text-language-detection/FastTextLanguageDetection.ts +53 -0
  98. package/src/text-language-detection/TinyLDLanguageDetection.ts +16 -0
  99. package/src/typings/Fillers.d.ts +41 -0
  100. package/src/utilities/BinaryArrayConversion.ts +159 -0
  101. package/src/utilities/Compression.ts +91 -0
  102. package/src/utilities/FileDownloader.ts +201 -0
  103. package/src/utilities/FileSystem.ts +265 -0
  104. package/src/utilities/Hashing.ts +230 -0
  105. package/src/utilities/Locale.ts +119 -0
  106. package/src/utilities/Logger.ts +72 -0
  107. package/src/utilities/NdArrayUtilities.ts +31 -0
  108. package/src/utilities/ObjectUtilities.ts +169 -0
  109. package/src/utilities/OpenPromise.ts +13 -0
  110. package/src/utilities/PackageManager.ts +97 -0
  111. package/src/utilities/Queue.ts +17 -0
  112. package/src/utilities/RandomGenerator.ts +237 -0
  113. package/src/utilities/SignalChannel.ts +22 -0
  114. package/src/utilities/TarballMaker.ts +68 -0
  115. package/src/utilities/Timeline.ts +231 -0
  116. package/src/utilities/Timer.ts +93 -0
  117. package/src/utilities/Utilities.ts +574 -0
  118. package/src/utilities/WasmMemoryManager.ts +516 -0
  119. package/src/utilities/WebReader.ts +55 -0
  120. package/src/utilities/WikipediaReader.ts +41 -0
  121. package/src/voice-activity-detection/SileroVAD.ts +86 -0
  122. package/src/voice-activity-detection/WebRtcVAD.ts +76 -0
@@ -0,0 +1,508 @@
1
+ export function ipaPhoneToKirshenbaum(ipaPhone: string) {
2
+ let result = ''
3
+
4
+ for (const char of ipaPhone) {
5
+ const convertedChar = ipaToKirshenbaum[char]
6
+
7
+ if (convertedChar == undefined) {
8
+ throw new Error(`Could not convert phone character '${char}' to Kirshenbaum encoding`)
9
+ }
10
+
11
+ result += convertedChar || '_'
12
+ }
13
+
14
+ return result
15
+ }
16
+
17
+ export function ipaWordToTimitTokens(ipaWord: string, subphoneCount = 0) {
18
+ let result: string[] = []
19
+
20
+ for (const ipaPhone of ipaWord) {
21
+ const convertedPhoneSequence = ipaPhoneToTimit(ipaPhone, subphoneCount)
22
+
23
+ if (convertedPhoneSequence == undefined) {
24
+ throw new Error(`Could not find a TIMIT equivalent for ipa phone '${ipaPhone}'`)
25
+ }
26
+
27
+ result = [...result, ...convertedPhoneSequence]
28
+ }
29
+
30
+ return result
31
+ }
32
+
33
+ export function ipaPhoneToTimit(ipaPhone: string, subphoneCount = 0) {
34
+ let tokens = ipaToTimit[ipaPhone]
35
+
36
+ if (!tokens) {
37
+ return undefined
38
+ }
39
+
40
+ if (subphoneCount > 0) {
41
+ tokens = splitTokensToSubphones(tokens, subphoneCount)
42
+ }
43
+
44
+ return tokens
45
+ }
46
+
47
+ export function arpabetPhoneToIpa(arpabetPhone: string) {
48
+ return arpabetToIPA[arpabetPhone.toUpperCase()]
49
+ }
50
+
51
+ export function timitPhoneToIpa(arpabetPhone: string) {
52
+ return timitToIPA[arpabetPhone.toUpperCase()]
53
+ }
54
+
55
+ export function splitTokensToSubphones(tokens: string[], subphoneCount = 3) {
56
+ const result: string[] = []
57
+
58
+ for (const token of tokens) {
59
+ if (token == 'pause') {
60
+ result.push(token)
61
+
62
+ continue
63
+ }
64
+
65
+ for (let i = 1; i <= subphoneCount; i++) {
66
+ result.push(`${token}/${i}`)
67
+ }
68
+ }
69
+
70
+ return result
71
+ }
72
+
73
+ // ARPABET was invented for English.
74
+ // The standard dictionary written in ARPABET is the CMU dictionary.
75
+ // TIMIT is written in a variant of ARPABET that includes a couple
76
+ // of non-standard allophones, and most significantly, includes
77
+ // separate symbols for the closure and release portions of each stop.
78
+ const arpabetToIPA: { [p: string]: string | undefined } = {
79
+ 'AA': 'ɑ',
80
+ 'AE': 'æ',
81
+ 'AH': 'ʌ',
82
+ 'AH0': 'ə',
83
+ 'AO': 'ɔ',
84
+ 'AW': 'aʊ',
85
+ 'AY': 'aɪ',
86
+ 'EH': 'ɛ',
87
+ 'ER': 'ɝ',
88
+ 'ER0': 'ɚ',
89
+ 'EY': 'eɪ',
90
+ 'IH': 'ɪ',
91
+ 'IH0': 'ɨ',
92
+ 'IY': 'i',
93
+ 'OW': 'oʊ',
94
+ 'OY': 'ɔɪ',
95
+ 'UH': 'ʊ',
96
+ 'UW': 'u',
97
+ 'B': 'b',
98
+ 'CH': 'tʃ',
99
+ 'D': 'd',
100
+ 'DH': 'ð',
101
+ 'EL': 'l̩ ',
102
+ 'EM': 'm̩',
103
+ 'EN': 'n̩',
104
+ 'F': 'f',
105
+ 'G': 'ɡ',
106
+ 'HH': 'h',
107
+ 'JH': 'dʒ',
108
+ 'K': 'k',
109
+ 'L': 'l',
110
+ 'M': 'm',
111
+ 'N': 'n',
112
+ 'NG': 'ŋ',
113
+ 'P': 'p',
114
+ 'Q': 'ʔ',
115
+ 'R': 'ɹ',
116
+ 'S': 's',
117
+ 'SH': 'ʃ',
118
+ 'T': 't',
119
+ 'TH': 'θ',
120
+ 'V': 'v',
121
+ 'W': 'w',
122
+ 'WH': 'ʍ',
123
+ 'Y': 'j',
124
+ 'Z': 'z',
125
+ 'ZH': 'ʒ'
126
+ }
127
+
128
+ const timitToIPA: { [p: string]: string | undefined } = {
129
+ ...arpabetToIPA,
130
+
131
+ 'AX': 'ə',
132
+ 'AX-H': 'ə̥',
133
+ 'AXR': 'ɚ',
134
+ 'B': '',
135
+ 'BCL': 'b',
136
+ 'D': '',
137
+ 'DCL': 'd',
138
+ 'DX': 'ɾ',
139
+ 'ENG': 'ŋ̍',
140
+ 'EPI': '',
141
+ 'G': '',
142
+ 'GCL': 'g',
143
+ 'HV': 'ɦ',
144
+ 'H//': '',
145
+ 'IX': 'ɨ',
146
+ 'KCL': 'k',
147
+ 'K': '',
148
+ 'NX': 'ɾ̃',
149
+ 'P': '',
150
+ 'PAU': '',
151
+ 'PCL': 'p',
152
+ 'T': '',
153
+ 'TCL': 't',
154
+ 'UX': 'ʉ',
155
+ }
156
+
157
+ const ipaToTimit: { [p: string]: string[] | undefined } = {
158
+ // Vowels
159
+ 'ɑ': ['aa'],
160
+ 'ɑː': ['aa'],
161
+ 'ɑːɹ': ['aa', 'r'], // ?
162
+ 'a': ['aa'], // ? UK English
163
+
164
+ 'aʊ': ['aw'],
165
+ 'aɪ': ['ay'],
166
+ 'aɪɚ': ['ay', 'r'], // ?
167
+ 'aɪə': ['ay', 'ax'], // ?
168
+
169
+ 'æ': ['ae'],
170
+ 'æʊ': ['ae', 'uh'], // ?
171
+
172
+ 'ʌ': ['ah'],
173
+ 'ɐ': ['ah'], // ?
174
+
175
+ 'ə': ['ax'],
176
+ 'ə̥': ['ax-h'],
177
+ 'əʊ': ['ax', 'uh'], // ? UK English
178
+ 'ɚ': ['axr'],
179
+ 'ᵻ': ['ax'], // ?
180
+
181
+ 'ɔ': ['ao'],
182
+ 'ɔː': ['ao'],
183
+ 'ɔːɹ': ['ao', 'r'], // ?
184
+ 'ɔɪ': ['oy'],
185
+ 'ɒ': ['ao'], // ? UK English
186
+
187
+ 'ɛ': ['eh'],
188
+ 'ɜː': ['eh'], // ?
189
+ 'ɝ': ['er'],
190
+ 'ɛɹ': ['er'], // ?
191
+
192
+ 'eɪ': ['ey'],
193
+ 'eə': ['ey', 'ax'], // ? UK English
194
+ 'eː': ['ey'], // ? UK English
195
+
196
+ 'ɪ': ['ih'],
197
+ 'ɪɹ': ['ih', 'r'], // ?
198
+
199
+ 'ɨ': ['ix'],
200
+
201
+ 'i': ['iy'],
202
+ 'iː': ['iy'], // ?
203
+ 'iə': ['iy', 'ax'], // ?
204
+
205
+ 'oʊ': ['ow'],
206
+ 'oː': ['ow'], // ?
207
+ 'oːɹ': ['ow', 'r'], // ?
208
+
209
+ 'ʊ': ['uh'],
210
+ 'ʊɹ': ['uh', 'r'], // ?
211
+ 'ʊə': ['uh', 'ax'], // ? UK English
212
+
213
+ 'u': ['uw'],
214
+ 'uː': ['uw'], // ?
215
+
216
+ // Consonants
217
+ 'b': ['bcl', 'b'],
218
+ 'tʃ': ['tcl', 'ch'],
219
+ 'd': ['dcl', 'd'],
220
+ 'ð': ['dh'],
221
+ 'l̩': ['el'],
222
+ 'əl': ['el'], // ?
223
+ 'm̩': ['em'],
224
+ 'n̩': ['en'],
225
+ 'f': ['f'],
226
+ 'ɡ': ['gcl', 'g'],
227
+ 'h': ['hh'],
228
+ 'dʒ': ['dcl', 'jh'],
229
+ 'k': ['kcl', 'k'],
230
+ 'l': ['l'],
231
+ 'm': ['m'],
232
+ 'n': ['n'],
233
+ 'ŋ': ['ng'],
234
+ 'p': ['pcl', 'p'],
235
+ 'ʔ': ['q'],
236
+ 'ɹ': ['r'],
237
+ 's': ['s'],
238
+ 'ʃ': ['sh'],
239
+ 't': ['tcl', 't'],
240
+ 'θ': ['th'],
241
+ 'v': ['v'],
242
+ 'w': ['w'],
243
+ 'ʍ': ['wh'],
244
+ 'j': ['y'],
245
+ 'z': ['z'],
246
+ 'ʒ': ['zh'],
247
+
248
+ 'ɾ̃': ['nx'],
249
+ 'ʉ': ['ux'],
250
+ 'ɦ': ['hv'],
251
+ 'ŋ̍': ['eng'],
252
+ 'ɾ': ['dx'],
253
+ }
254
+
255
+ // This is adapted from a lookup table on the eSpeak-ng source code
256
+ const ipaToKirshenbaum: { [p: string]: string | undefined } = {
257
+ '1': '1',
258
+ '2': '2',
259
+ '4': '4',
260
+ '5': '5',
261
+ '6': '6',
262
+ '7': '7',
263
+ '9': '9',
264
+ ' ': ' ',
265
+ '!': '!',
266
+ '\'': '\'',
267
+ 'ʰ': '#',
268
+ '$': '$',
269
+ '%': '%',
270
+ //'æ': '&',
271
+ 'æ': 'a',
272
+ 'ˈ': '\'',
273
+ '(': '(',
274
+ ')': ')',
275
+ 'ɾ': '*',
276
+ '+': '+',
277
+ 'ˌ': ',',
278
+ '-': '-',
279
+ '.': '.',
280
+ '/': '/',
281
+ 'ɒ': '0',
282
+ 'ɜ': '3',
283
+ 'ɵ': '8',
284
+ 'ː': ':',
285
+ 'ʲ': ';',
286
+ '<': '<',
287
+ '=': '=',
288
+ '>': '>',
289
+ 'ʔ': '?',
290
+ 'ə': '@',
291
+ 'ɑ': 'A',
292
+ 'β': 'B',
293
+ 'ç': 'C',
294
+ 'ð': 'D',
295
+ 'ɛ': 'E',
296
+ 'F': 'F',
297
+ 'ɢ': 'G',
298
+ 'ħ': 'H',
299
+ 'ɪ': 'I',
300
+ 'ɟ': 'J',
301
+ 'K': 'K',
302
+ 'ɫ': 'L',
303
+ 'ɱ': 'M',
304
+ 'ŋ': 'N',
305
+ 'ɔ': 'O',
306
+ 'Φ': 'P',
307
+ 'ɣ': 'Q',
308
+ 'ʀ': 'R',
309
+ 'ʃ': 'S',
310
+ 'θ': 'T',
311
+ 'ʊ': 'U',
312
+ 'ʌ': 'V',
313
+ 'œ': 'W',
314
+ 'χ': 'X',
315
+ 'ø': 'Y',
316
+ 'ʒ': 'Z',
317
+ '̪': '[',
318
+ '\\': '\\',
319
+ ']': ']',
320
+ '^': '^',
321
+ '_': '_',
322
+ '`': '`',
323
+ 'a': 'a',
324
+ 'b': 'b',
325
+ 'c': 'c',
326
+ 'd': 'd',
327
+ 'e': 'e',
328
+ 'f': 'f',
329
+ 'ɡ': 'g',
330
+ 'h': 'h',
331
+ 'i': 'i',
332
+ 'j': 'j',
333
+ 'k': 'k',
334
+ 'l': 'l',
335
+ 'm': 'm',
336
+ 'n': 'n',
337
+ 'o': 'o',
338
+ 'p': 'p',
339
+ 'q': 'q',
340
+ 'r': 'r',
341
+ 's': 's',
342
+ 't': 't',
343
+ 'u': 'u',
344
+ 'v': 'v',
345
+ 'w': 'w',
346
+ 'x': 'x',
347
+ 'y': 'y',
348
+ 'z': 'z',
349
+ '{': '{',
350
+ '|': '|',
351
+ '}': '}',
352
+ '̃': '~',
353
+ '': '',
354
+
355
+ // Extensions
356
+ 'ɚ': '3',
357
+ 'ɹ': 'r',
358
+ 'ɐ': 'a#',
359
+ 'ᵻ': 'i',
360
+ '̩': ','
361
+ }
362
+
363
+ /*
364
+ // Source: https://github.com/coruus/ascii-ipa/blob/master/kirshenbaum.py
365
+ // Conversion regex: \('.*?': '.*?'\)
366
+ // Replace: $2: $1
367
+ const ipaToKirshenbaum2: { [p: string]: string | undefined } = {
368
+ 'm': 'm',
369
+ 'p': 'p',
370
+ 'b': 'b',
371
+ 'Φ': 'P',
372
+ 'β': 'B',
373
+ 'ʙ': 'b<trl>',
374
+ 'pʼ': 'p`',
375
+ 'ɓ': 'b`',
376
+ 'ʘ': 'p!',
377
+ 'ɱ': 'M',
378
+ 'f': 'f',
379
+ 'v': 'v',
380
+ 'ʋ': 'r<lbd>',
381
+ 'n\u032a': 'n[',
382
+ 't\u032a': 't[',
383
+ 'θ': 'T',
384
+ 'ð': 'D',
385
+ 'r\u032a': 'r[',
386
+ 'l\u032a': 'l[',
387
+ 't\u032a\u02bc': 't[`',
388
+ 'ɗ': 'd`',
389
+ 'ʇ': 't!',
390
+ 'n': 'n',
391
+ 't': 't',
392
+ 'd': 'd',
393
+ 's': 's',
394
+ 'z': 'z',
395
+ 'ɬ': 's<lat>',
396
+ 'ɮ': 'z<lat>',
397
+ 'ɹ': 'r',
398
+ 'l': 'l',
399
+ 'ʀ': 'r<trl>',
400
+ 'ɾ': '*',
401
+ 'ɺ': '*<lat>',
402
+ 't\u02bc': 't`',
403
+ 'ʗ': 'c!',
404
+ 'ʖ': 'l!',
405
+ 'ɳ': 'n.',
406
+ 'ʈ': 't.',
407
+ 'ɖ': 'd.',
408
+ 'ʂ': 's.',
409
+ 'ʐ': 'z.',
410
+ //'ɖ': 'r.',
411
+ 'ɭ': 'l.',
412
+ 'ɽ': '*.',
413
+ 'ʃ': 'S',
414
+ 'ʒ': 'Z',
415
+ 'n^': 'n^',
416
+ 'c': 'c',
417
+ 'ɟ': 'J',
418
+ 'ç': 'C',
419
+ 'ʝ': 'C<vcd>',
420
+ 'j': 'j',
421
+ 'ɥ': 'j<rnd>',
422
+ 'ʎ': 'l^',
423
+ 'ʄ': 'J`',
424
+ 'ŋ': 'N',
425
+ 'k': 'k',
426
+ 'g': 'g',
427
+ 'x': 'x',
428
+ 'ɣ': 'Q',
429
+ 'ɰ': 'j<vel>',
430
+ 'ɫ': 'L',
431
+ //'ɬ': '{vls,alv,lat,frc}',
432
+ 'k\u02bc': 'k`',
433
+ 'g\u02bc': 'g`',
434
+ 'ʞ': 'k!',
435
+ 'n\u2030g': 'n<lbv>',
436
+ 'k\u2030p': 't<lbv>',
437
+ 'g\u2030b': 'n<lbv>',
438
+ 'ʍ': 'w<vls>',
439
+ 'w': 'w',
440
+ 'ɴ': 'n'',
441
+ 'q': 'q',
442
+ 'ɢ': 'G',
443
+ 'χ': 'X',
444
+ 'ʁ': 'g'',
445
+ //'ʀ': 'r'',
446
+ 'ʠ': 'q`',
447
+ 'ʛ': 'G`',
448
+ 'ħ': 'H',
449
+ 'ʕ': 'H<vcd>',
450
+ 'ʔ': '?',
451
+ 'h': 'h',
452
+ 'ɦ': 'h<?>',
453
+ 'i': 'i',
454
+ 'y': 'y',
455
+ 'ɪ': 'I',
456
+ 'ʏ': 'I.',
457
+ 'e': 'e',
458
+ 'ø': 'Y',
459
+ 'ɛ': 'E',
460
+ 'œ': 'W',
461
+ 'æ': '&',
462
+ 'ɶ': '&.',
463
+ 'ɨ': 'i'',
464
+ 'ʉ': 'u'',
465
+ 'ɘ': '@<umd>',
466
+ 'ɝ': 'R<umd>',
467
+ 'ə': '@',
468
+ 'ɚ': 'R',
469
+ 'ɵ': '@.',
470
+ //'ɜ': 'V'',
471
+ 'ɜ': '3',
472
+ 'ɞ': 'O'',
473
+ 'a': 'a',
474
+ 'ɯ': 'u-',
475
+ 'u': 'u',
476
+ 'ʊ': 'U',
477
+ 'ɤ': 'o-',
478
+ 'o': 'o',
479
+ 'ʌ': 'V',
480
+ 'ɔ': 'O',
481
+ 'ɑ': 'A',
482
+ 'ɒ': 'A.',
483
+
484
+ 'ː': ':',
485
+ '\u0322': '.',
486
+ '\u02bc': '`',
487
+ '\u032a': '[',
488
+ '\u02b2': ';',
489
+ ''': ''',
490
+ '^': '^',
491
+ '\u0334': '<H>',
492
+ '\u02b0': '<h>',
493
+ '\u02da': '<unx>',
494
+ '\u0325': '<vls>',
495
+ //'\u02da': '<o>',
496
+ '\u02b3': '<r>',
497
+ '\u02b7': '<w>',
498
+ '\u02b1': '<?>',
499
+
500
+ '\u0303': '~',
501
+ //'\u0334': '~'
502
+
503
+ 'ˈ': ''',
504
+ 'ˌ': ',',
505
+ ' ': ' ',
506
+ '\n': '\n'
507
+ }
508
+ */