TTS Monitor (XML)
Simple example:
<message command="play"><part>text</part></message>
For TTS Monitor to speak in different voices, you must have text-to-speech voices installed on your operating system and Addon must submit game character name (example: "Marshal McBride" ) and/or gender ("Male" , "Female" , "Neutral" ) values. Example:
<message name="Marshal McBride" gender="Male" command="play"><part>text</part></message>
If submited name is name of text-to-speech voice, like "IVONA 2 Amy" , it is not necessary to submit gender value .
If name value is not submitted, text-to-speech voice with highest value (of specified gender , if gender value is submitted) in TTS Monitor > [ Voices ] tab will be used.
If gender value is not submitted or submitted value is not "Male" , "Female" or "Neutral" , selected in TTS Monitor > [ Voices ] tab > [ Default · My Gender ] drop-down box will be used.
Submited values have priority over local settings. If you will submit values , TTS Monitor will use submited values and will ignore local (default) settings.
Advanced example:
<message name="Marshal McBride" gender="Male" effect="Humanoid" group="Quest" pitch="-5" rate="1" volume="100" command="play"><part>texttext</part></message>
text -- In Monitor will be replaced with SAPI XML <pitch absmiddle=" 8 -8" />text<pitch absmiddle="" /> .
name -- Can be text-to-specch voice name, like "IVONA 2 Brian" - TTS Monitor will use it. Can be game character name, like "Marshal McBride" - TTS Monitor will assign text-to-speech voice to this character name.
gender -- Voice gender... "Male" , "Female" or "Neutral" .
pitch -- Voice pitch... value from "-10" to "10" .
rate -- Voice speed... value from "-10" to "10" .
volume -- Voice volume... value from "0" to "100" .
effect -- Voice (sound card) effects... "Dragon" , "Undead" , "Mechanical" , etc.. You can add, edit and delete sound card effects in TTS Monitor.
group -- Message in TTS Monitor will be assigned to specific group, if group value is submitted ("Quest" , "Whisper" , "RaidLeader" , etc...).
language -- Will select specific language voices... "de-DE" , "en-GB" , "en-US" , "es-ES" , "fr-FR" , "ko-KR" , "ru-RU" or "809" , "409" , etc..
command -- "add" , "play" , "stop" , "sound" , "save" . Examples:
You can play splitted message (if there is 255 character limitation in game) with command ="add" and command ="play" .
<message command="add"><part>text</part></message> -- First part of message.
<message command="add<part>text</part></message> -- Second part of message.
<message command="play"><part>text</part></message> -- Third-last part of message.
Stop text-to-speech and remove message(s) from TTS Monitor’s playlist with command ="stop" .
<message command="stop" /> -- Stop text-to-speech and remove all messages from TTS Monitor’s playlist.
<message command="stop" group="Quest" /> -- Stop text-to-speech and remove all "Quest" group messages from TTS Monitor’s playlist.
Play (intro) audio sound with command ="sound" and group value . Sound must be listed and enabled in TTS Monitor > [ Intro Sounds ] tab.
<message command="sound" /> -- Audio, selected in [ Default Intro Sound ] drop-down box, will be played.
<message command="sound" group="Whisper" /> -- Audio, assigned to "Whisper" group, will be played.
Included in Monitor sound names are listed in TTS Monitor > [ Default Intro Sound ] drop-down box.
Also, you can specify custom paths to WAV files, like
You can save name , gender and effect values in TTS Monitor > [ Voice Defaults ] tab with command ="save" .
<message command="save" name="Thomas Miller" gender="Male" effect="Humanoid" />
TTS Monitor settings directory:
Port numbers for “Network“ mode
3724 -- World of Warcraft.
Acronyms
Key-Regex values are .NET Framework Regular Expressions.
WoW Addon Example · Download 1.0 (2019-10-20)
|
|
 |
JocysCom0AsPixelSpace.ttf |
 |
JocysCom0AsPixel.ttf |
|
Disable “Jocys.com Text to Speech WoW”
“JocysCom Text to Speech WoW Example”

WoW Addon (*.TOC)
## Author: Jocys.com
## Interface: 80205
## Notes: Jocys.com TTS WoW AddOn Example
## Title: |cff77ccffJocys.com|r TTS Example
## Version: 8.2.5
JocysCom-TextToSpeech-WoW-Example.xml
JocysCom-TextToSpeech-WoW-Example.lua
WoW Addon (*.LUA)
local messagePrefixPixels = "|cff220000·|r|cff002200·|r|cff000022·|r|cff220000·|r|cff002200·|r|cff000022·|r"
local messageTable = {}
local messageChanged = math.random(10, 80)
local messageInterval = 0.5
function JocysCom_PlayButton_OnClick()
local sendMessage = "Hello World!"
if #JocysCom_MessageEditBox:GetText() > 0 then
sendMessage = JocysCom_MessageEditBox:GetText()
end
JocysCom_MessageEditBox:SetText(sendMessage)
JocysCom_AddMessageToTable("<message command=\"play\"><part>" .. sendMessage .. "</part></message>")
end
function JocysCom_StopButton_OnClick()
JocysCom_AddMessageToTable("<message command=\"stop\" />")
end
function JocysCom_AddMessageToTable(messageText)
table.insert(messageTable, messageText)
end
function JocysCom_SendMessageFromTable()
local messageBytes = messageTable[1]:gsub(".", function(v) return string.format("%02x", string.byte(v)) end)
local messageLen = #messageBytes / 2
local messageLenBytes = string.format("%06x", messageLen)
local messageLenPixel = "|cff" .. messageLenBytes .. "·|r"
local ungroupedBytes = math.fmod(messageLen, 3)
if ungroupedBytes > 0 then
messageBytes = messageBytes .. string.rep("00", 3 - ungroupedBytes)
end
local messagePixels = messageBytes:gsub("(..)(..)(..)", "|cff" .. "%3%2%1" .. "·|r")
messageChanged = messageChanged + 1
if messageChanged > 80 then messageChanged = 10 end
local messageChangedPixel = "|cff" .. string.rep(messageChanged, 3) .. "·|r"
local message = messagePrefixPixels .. messageChangedPixel .. messageLenPixel .. messagePixels
JocysCom_ColorMessageEditBox:SetText(message)
table.remove(messageTable, 1)
end
function JocysCom_SendMessageTimer()
if #messageTable > 0 then JocysCom_SendMessageFromTable() end
C_Timer.After(messageInterval, JocysCom_SendMessageTimer)
end
JocysCom_SendMessageTimer()
WoW Addon (*.XML)
<EditBox name="JocysCom_ColorMessageEditBox" parent="WorldFrame" frameStrata="HIGH" ignoreParentScale="true" movable="false" enableMouse="false" letters="0" multiLine="true" autoFocus="false" ignoreArrows="true" clampedToScreen="false">
<Size y="2" />
<Anchors>
<Anchor point="TOPLEFT" />
<Anchor point="TOPRIGHT" />
</Anchors>
<Layers>
<Layer>
<Texture>
<Color a="1" r="0" g="0" b="0" />
</Texture>
</Layer>
</Layers>
<FontString justifyH="LEFT" font="" wordwrap="true" spacing="0" nonspacewrap="true" ignoreParentScale="true">
<FontHeight val="1" />
</FontString>
</EditBox>
<Frame name="JocysCom_ColorMessageFrame" inherits="BasicFrameTemplate" parent="UIParent" movable="true" frameStrata="HIGH">
<Size x="400" y="87" />
<Anchors>
<Anchor point="CENTER" />
</Anchors>
<Frames>
<EditBox name="JocysCom_MessageEditBox" inherits="InputBoxTemplate" letters="0" autofocus="false">
<Size x="375" y="20" />
<Anchors>
<Anchor point="BOTTOM" x="1" y="38" />
</Anchors>
<Scripts>
<OnLoad>
self:SetText("Hello World!")
</OnLoad>
</Scripts>
</EditBox>
<Button inherits="UIPanelButtonTemplate" text="PLAY">
<Size x="50" y="22" />
<Anchors>
<Anchor point="BOTTOMRIGHT" relativePoint="BOTTOM" y="10" />
</Anchors>
<Scripts>
<OnClick>
JocysCom_PlayButton_OnClick();
JocysCom_MessageEditBox:ClearFocus();
</OnClick>
</Scripts>
</Button>
<Button inherits="UIPanelButtonTemplate" text="STOP">
<Size x="50" y="22" />
<Anchors>
<Anchor point="BOTTOMLEFT" relativePoint="BOTTOM" y="10" />
</Anchors>
<Scripts>
<OnClick>
JocysCom_StopButton_OnClick();
JocysCom_MessageEditBox:ClearFocus();
</OnClick>
</Scripts>
</Button>
</Frames>
<Scripts>
<OnLoad>
self:RegisterForDrag("LeftButton");
self.TitleText:SetText("Jocys.Com Text to Speech Example 1.0 (2019-10-20)")
</OnLoad>
<OnDragStart>
self:StartMoving();
</OnDragStart>
<OnDragStop>
self:StopMovingOrSizing();
</OnDragStop>
</Scripts>
</Frame>
|