wiki2ssml
Advanced tools
Comparing version 0.2.2 to 0.2.3
{ | ||
"name": "wiki2ssml", | ||
"version": "0.2.2", | ||
"version": "0.2.3", | ||
"description": "Wiki2SSML provides the WikiVoice markup language used for fine-tuning synthesised voice.", | ||
@@ -17,6 +17,9 @@ "license": "Apache-2.0", | ||
"ssml", | ||
"markup language", | ||
"wikitext", | ||
"text-to-speech", | ||
"voice tuning", | ||
"wikitext" | ||
"amazon polly", | ||
"google cloud tts", | ||
"ibm watson tts", | ||
"microsoft azure tts" | ||
], | ||
@@ -23,0 +26,0 @@ "author": { |
@@ -38,3 +38,3 @@ # Wiki2SSML | ||
| [[type:TYPE,format:FORMAT,detail:DETAIL|TEXT]] | Type it should be said as | | ||
| [[mark:NAME|TEXT]] | Mark referencing a location | | ||
| [[mark:NAME]] | Mark referencing a location | | ||
@@ -45,12 +45,15 @@ # Supported Vendor-Specific Markups | ||
| [[amzWhispered|TEXT]] | Whispering | | ||
| [[amzPhonation:soft|TEXT]] | Speaking Softly | | ||
| [[amzPhonation:PHONATION|TEXT]] | Speaking Softly | | ||
| [[amzTimbre:SCALE|TEXT]] | Controlling Timbre | | ||
| [[amzDRC|TEXT]] | Dynamic Range Compression | | ||
| [[amzBreathDuration:SCALE,amzBreathVolume:SCALE]] | Breathing with duration and volume | | ||
| [[amzDefaultBreath]] | Default sound of breathing | | ||
| [[amzBreathDuration:SCALE,amzBreathVolume:SCALE]] | Breathing based on the manual model | | ||
| [[amzDefaultBreath]] | Default breathing based on the manual model | | ||
| [[amzAutoBreathsVolume:SCALE,amzAutoBreathsFrequency:SCALE,amzAutoBreathsDuration:SCALE|TEXT]] | Breathing based on the automated model | | ||
| [[amzDefaultAutoBreaths]] | Default breathing based on the automated model | | ||
| [[ibmExprType:TYPE|TEXT]] | Expressiveness type | | ||
| [[ibmTransType:TYPE,ibmStrength:SCALE|TEXT]] | Voice transformation | | ||
| [[ibmTransType:TYPE,ibmTransStrength:SCALE|TEXT]] | Voice transformation | | ||
| [[ibmTransBreathiness:SCALE,ibmTransPitchRange:SCALE,ibmTransTimbre:SCALE|TEXT]] | Voice custom transformation | | ||
More details on canonical attribute values can be found at [Speech Synthesis Markup Language (SSML)](https://www.w3.org/TR/speech-synthesis/). | ||
More details on canonical attribute values can be found at [Speech Synthesis Markup Language (SSML)](https://www.w3.org/TR/speech-synthesis/). For ranges of vendor-specific values please refer to their online documents. | ||
@@ -57,0 +60,0 @@ # Example |
@@ -26,7 +26,4 @@ "use strict"; | ||
describe("Test parser", () => { | ||
before(() => { | ||
describe("Speed, pitch and volume", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
}); | ||
describe("Speed, pitch and volume", () => { | ||
var happy = [ | ||
@@ -102,5 +99,5 @@ { expression: "[[speed:x-slow|TEXT]]", expected: HEAD + "<prosody rate=\"x-slow\">TEXT</prosody>" + TAIL }, | ||
var sad = [ | ||
{ expression: "[[speed:unknown|TEXT]]", expected: HEAD + "<prosody rate=\"x-slow\">TEXT</prosody>" + TAIL }, | ||
{ expression: "[[pitch:unknown|TEXT]]", expected: HEAD + "<prosody pitch=\"low\">TEXT</prosody>" + TAIL }, | ||
{ expression: "[[volume:unknown|TEXT]]", expected: HEAD + "<prosody volume=\"loud\">TEXT</prosody>" + TAIL } | ||
{ expression: "[[speed:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[pitch:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[volume:unknown|TEXT]]", expected: undertest.SyntaxError } | ||
]; | ||
@@ -113,2 +110,3 @@ | ||
describe("Emphasis level", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -126,3 +124,3 @@ { expression: "[[emphasis:strong|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL }, | ||
var sad = [ | ||
{ expression: "[[emphasis:unknown|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL } | ||
{ expression: "[[emphasis:unknown|TEXT]]", expected: undertest.SyntaxError } | ||
]; | ||
@@ -135,2 +133,3 @@ | ||
describe("Silence with duration", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -158,4 +157,4 @@ { expression: "[[strength:none]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL }, | ||
var sad = [ | ||
{ expression: "[[silence:unknown]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL }, | ||
{ expression: "[[strength:unknown]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL } | ||
{ expression: "[[silence:unknown]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[strength:unknown]]", expected: undertest.SyntaxError } | ||
]; | ||
@@ -168,2 +167,3 @@ | ||
describe("Substitution", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -180,2 +180,3 @@ { expression: "[[substitute:red color|red colour]]", expected: HEAD + "<sub alias=\"red color\">red colour</sub>" + TAIL }, | ||
describe("Embedded audio", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -190,2 +191,3 @@ { expression: "[[audio:https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL }, | ||
describe("Language code", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -200,2 +202,3 @@ { expression: "[[lang:en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL }, | ||
describe("Paragraph and senctence", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -212,2 +215,3 @@ { expression: "[[paragraph|TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL }, | ||
describe("Phoneme with alphabet and pronunciation", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -225,2 +229,3 @@ { expression: "[[pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL }, | ||
describe("Type for interpretation", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -306,5 +311,5 @@ { expression: "[[type:cardinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL }, | ||
var sad = [ | ||
{ expression: "[[type:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL }, | ||
{ expression: "[[type:date,format:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL }, | ||
{ expression: "[[type:time,format:hms24,detail:_|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL } | ||
{ expression: "[[type:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[type:date,format:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[type:time,format:hms24,detail:_|TEXT]]", expected: undertest.SyntaxError } | ||
]; | ||
@@ -317,2 +322,3 @@ | ||
describe("Voice name", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -327,2 +333,3 @@ { expression: "[[voice:NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL }, | ||
describe("Part of Speech", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -336,5 +343,6 @@ { expression: "[[pos:VB|TEXT]]", expected: HEAD + "<w role=\"VB\">TEXT</w>" + TAIL } | ||
describe("Mark with name", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
{ expression: "[[mark:NAME|TEXT]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL }, | ||
{ expression: "[[mar:NAME|TEXT]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL } | ||
{ expression: "[[mark:NAME]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL }, | ||
{ expression: "[[mar:NAME]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL } | ||
]; | ||
@@ -346,2 +354,3 @@ | ||
describe("Default speaking", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -355,2 +364,3 @@ { expression: "This is a test without markups", expected: HEAD + "This is a test without markups" + TAIL } | ||
describe("Vendor extensions", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -375,15 +385,126 @@ { expression: "[[amzWhispered|TEXT]]", expected: HEAD + "<amazon:effect name=\"whispered\">TEXT</amazon:effect>" + TAIL }, | ||
{ expression: "[[adb]]", expected: HEAD + "<amazon:breath/>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsVolume:medium,amzAutoBreathsFrequency:low,amzAutoBreathsDuration:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabv:medium,aabf:low,aabd:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsVolume:medium,amzAutoBreathsDuration:long,amzAutoBreathsFrequency:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabv:medium,aabd:long,aabf:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsDuration:long,amzAutoBreathsFrequency:low,amzAutoBreathsVolume:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabd:long,aabf:low,aabv:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsDuration:long,amzAutoBreathsVolume:medium,amzAutoBreathsFrequency:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabd:long,aabv:medium,aabf:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsFrequency:low,amzAutoBreathsVolume:medium,amzAutoBreathsDuration:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabf:low,aabv:medium,aabd:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsFrequency:low,amzAutoBreathsDuration:long,amzAutoBreathsVolume:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabf:low,aabd:long,aabv:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsVolume:medium,amzAutoBreathsFrequency:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabv:medium,aabf:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsFrequency:low,amzAutoBreathsVolume:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabf:low,aabv:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsDuration:long,amzAutoBreathsVolume:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabd:long,aabv:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsVolume:medium,amzAutoBreathsDuration:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabv:medium,aabd:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsFrequency:low,amzAutoBreathsDuration:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabf:low,aabd:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsDuration:long,amzAutoBreathsFrequency:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabd:long,aabf:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\" duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsVolume:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabv:medium|TEXT]]", expected: HEAD + "<amazon:auto-breaths volume=\"medium\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsFrequency:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabf:low|TEXT]]", expected: HEAD + "<amazon:auto-breaths frequency=\"low\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzAutoBreathsDuration:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[aabd:long|TEXT]]", expected: HEAD + "<amazon:auto-breaths duration=\"long\">TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[amzDefaultAutoBreaths|TEXT]]", expected: HEAD + "<amazon:auto-breaths>TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[adab|TEXT]]", expected: HEAD + "<amazon:auto-breaths>TEXT</amazon:auto-breaths>" + TAIL }, | ||
{ expression: "[[ibmExprType:GoodNews|TEXT]]", expected: HEAD + "<express-as type=\"GoodNews\">TEXT</express-as>" + TAIL }, | ||
{ expression: "[[iet:GoodNews|TEXT]]", expected: HEAD + "<express-as type=\"GoodNews\">TEXT</express-as>" + TAIL }, | ||
{ expression: "[[ibmTransType:Young,ibmStrength:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itt:Young,ist:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmStrength:80%,ibmTransType:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransType:Young,ibmTransStrength:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itt:Young,its:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransStrength:80%,ibmTransType:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransType:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itt:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\">TEXT</voice-transformation>" + TAIL } | ||
{ expression: "[[itt:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransBreathiness:high,ibmTransPitchRange:wide,ibmTransTimbre:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itb:high,itp:wide,itm:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransBreathiness:high,ibmTransTimbre:Sunrise,ibmTransPitchRange:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itb:high,itm:Sunrise,itp:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransPitchRange:wide,ibmTransTimbre:Sunrise,ibmTransBreathiness:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itp:wide,itm:Sunrise,itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransPitchRange:wide,ibmTransBreathiness:high,ibmTransTimbre:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itp:wide,itb:high,itm:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransTimbre:Sunrise,ibmTransBreathiness:high,ibmTransPitchRange:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itm:Sunrise,itp:wide,itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransTimbre:Sunrise,ibmTransPitchRange:wide,ibmTransBreathiness:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itm:Sunrise,itp:wide,itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransBreathiness:high,ibmTransPitchRange:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itb:high,itp:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransBreathiness:high,ibmTransTimbre:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itb:high,itm:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransPitchRange:wide,ibmTransTimbre:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itp:wide,itm:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransPitchRange:wide,ibmTransBreathiness:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itp:wide,itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransTimbre:Sunrise,ibmTransBreathiness:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itm:Sunrise,itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransTimbre:Sunrise,ibmTransPitchRange:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itm:Sunrise,itp:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransBreathiness:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itb:high|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" breathiness=\"high\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransPitchRange:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itp:wide|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" pitch_range=\"wide\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[ibmTransTimbre:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL }, | ||
{ expression: "[[itm:Sunrise|TEXT]]", expected: HEAD + "<voice-transformation type=\"Custom\" timbre=\"Sunrise\">TEXT</voice-transformation>" + TAIL } | ||
]; | ||
var sad = [ | ||
{ expression: "[[amzPhonation:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzTimbre:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzBreathVolume:unknown]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzBreathDuration:unknown]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzAutoBreathsVolume:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzAutoBreathsFrequency:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[amzAutoBreathsDuration:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmExprType:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmTransType:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmTransStrength:unknown,ibmTransType:Young|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmTransBreathiness:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmTransPitchRange:unknown|TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[ibmTransTimbre:unknown|TEXT]]",expected: undertest.SyntaxError } | ||
]; | ||
runHappyTests(happy); | ||
runSadTests(sad); | ||
}); | ||
describe("Combined markups", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
{ expression: "start [[volume:medium|TEXT]] middle [[silence:0.5s]] end", expected: HEAD + "start <prosody volume=\"medium\">TEXT</prosody> middle <break time=\"0.5s\"/> end" + TAIL }, | ||
{ expression: "[[volume:medium|TEXT]] middle [[silence:0.5s]] end", expected: HEAD + "<prosody volume=\"medium\">TEXT</prosody> middle <break time=\"0.5s\"/> end" + TAIL }, | ||
{ expression: "start [[volume:medium|TEXT]] middle [[silence:0.5s]]", expected: HEAD + "start <prosody volume=\"medium\">TEXT</prosody> middle <break time=\"0.5s\"/>" + TAIL }, | ||
{ expression: "[[volume:medium|TEXT]] middle [[silence:0.5s]]", expected: HEAD + "<prosody volume=\"medium\">TEXT</prosody> middle <break time=\"0.5s\"/>" + TAIL }, | ||
{ expression: "TEXT[[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]]TEXT", expected: HEAD + "TEXT<voice name=\"NAME\">TEXT<lang xml:lang=\"en-GB\">TEXT</lang>TEXT</voice>TEXT" + TAIL }, | ||
{ expression: "[[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]]TEXT", expected: HEAD + "<voice name=\"NAME\">TEXT<lang xml:lang=\"en-GB\">TEXT</lang>TEXT</voice>TEXT" + TAIL }, | ||
{ expression: "TEXT[[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]]", expected: HEAD + "TEXT<voice name=\"NAME\">TEXT<lang xml:lang=\"en-GB\">TEXT</lang>TEXT</voice>" + TAIL }, | ||
{ expression: "[[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT<lang xml:lang=\"en-GB\">TEXT</lang>TEXT</voice>" + TAIL }, | ||
{ expression: "[[voice:NAME|[[lang:en-GB|TEXT]]TEXT]]", expected: HEAD + "<voice name=\"NAME\"><lang xml:lang=\"en-GB\">TEXT</lang>TEXT</voice>" + TAIL }, | ||
{ expression: "[[voice:NAME|TEXT[[lang:en-GB|TEXT]]]]", expected: HEAD + "<voice name=\"NAME\">TEXT<lang xml:lang=\"en-GB\">TEXT</lang></voice>" + TAIL }, | ||
{ expression: "[[speed:medium,volume:+6dB,pitch:medium|TEXT[[type:time,format:hms24,detail:1|TEXT]]]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\" volume=\"+6dB\">TEXT<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as></prosody>" + TAIL } | ||
]; | ||
var sad = [ | ||
{ expression: "start [volume:medium|TEXT]] middle [[silence:0.5s]] end", expected: undertest.SyntaxError }, | ||
{ expression: "[[volume:medium|TEXT] middle [[silence:0.5s]] end", expected: undertest.SyntaxError }, | ||
{ expression: "start [[volume:medium|TEXT]] middle [silence:0.5s]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[volume:medium|TEXT]] middle [[silence:0.5s]", expected: undertest.SyntaxError }, | ||
{ expression: "TEXT[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]]TEXT", expected: undertest.SyntaxError }, | ||
{ expression: "[[voice:NAME|TEXT[lang:en-GB|TEXT]]TEXT]]TEXT", expected: undertest.SyntaxError }, | ||
{ expression: "TEXT[[voice:NAME|TEXT[[lang:en-GB|TEXT]TEXT]]", expected: undertest.SyntaxError }, | ||
{ expression: "[[voice:NAME|TEXT[[lang:en-GB|TEXT]]TEXT]", expected: undertest.SyntaxError } | ||
]; | ||
runHappyTests(happy); | ||
runSadTests(sad); | ||
}); | ||
it("should ignore whitespaces", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var happy = [ | ||
@@ -412,3 +533,11 @@ { expression: "[[ speed: medium ,volume: +6dB,pitch: medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\" volume=\"+6dB\">TEXT</prosody>" + TAIL }, | ||
it("should escape control characters", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var parsed = undertest.parseToSsml("[[volume:+6dB|\"a\" + 'b' & c <> d]]", "en-GB"); | ||
expect(parsed).to.be.a("string"); | ||
expect(parsed).to.equal(HEAD + "<prosody volume=\"+6dB\">"a" + 'b' & c <> d</prosody>" + TAIL); | ||
}); | ||
it("should return original input which dose not have markups", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var text_without_markup = "This is a test without markups"; | ||
@@ -421,2 +550,3 @@ var parsed = undertest.parseToSsml(text_without_markup, "en-GB"); | ||
it("should use a specific SSML version parsed in", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var parsed = undertest.parseToSsml("[[volume:+6dB|TEXT]]", "en-GB", "1.0"); | ||
@@ -428,2 +558,3 @@ expect(parsed).to.be.a("string"); | ||
it("should detect and validate markups", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
expect(undertest.hasValidMarkups("[[volume:medium|TEXT]] and [[silence:0.5s]] and [[substitute:substitute|original]] are markups")).to.be.true; | ||
@@ -435,2 +566,3 @@ expect(undertest.hasValidMarkups("This is a test without valid [[markups]]")).to.be.false; | ||
it("should strip markups and output plain text", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
var parsed = undertest.parseToPlainText("[[volume:medium|TEXT]] and [[silence:0.5s]] and [[substitute:substitute|original]] are present"); | ||
@@ -443,2 +575,3 @@ expect(parsed).to.be.a("string"); | ||
it("should throw SyntaxError on incorrect grammar", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
try { | ||
@@ -454,2 +587,3 @@ undertest.reloadGrammar("incorrect"); | ||
it("should throw ArgumentError on missing language code", () => { | ||
undertest = require("../src/wiki2ssml"); | ||
try { | ||
@@ -484,3 +618,3 @@ undertest.parseToSsml("[[volume:+6dB|TEXT]]"); | ||
} catch (e) { | ||
expect(e instanceof undertest.SyntaxError).to.be.true; | ||
expect(e instanceof test.expected).to.be.true; | ||
expect(e.message).to.have.string("Expected"); | ||
@@ -487,0 +621,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
137827
675
82