Asked — Edited
Resolved Resolved by DJ Sures!

Speech Synthesis Markkup Language

I was wondering whether it is possible to use elements from the Speech Synthesis Markup Language to modify the speech output using EZ-script? Or if there are other markup options other than the ones already given in the Speech Settings Control?


ARC Pro

Upgrade to ARC Pro

ARC Pro is your gateway to a community of like-minded robot enthusiasts and professionals, all united by a passion for advanced robot programming.

#2  

Right, that's what I thought. Thanks for the speedy reply!

PRO
Synthiam
#3  

Also... You can add the speech synthesis settings control (https://synthiam.com/Tutorials/Help.aspx?id=156) and write your script like..


sayezbwait("Hello")

ControlCommand("Speech Settings", SetVoiceEmphasis, "Strong")

sayezbwait("I am speaking strong")

ControlCommand("Speech Settings", SetVoiceRate, "ExtraFast")

sayezbwait("Now i am speaking extra fast")

ControlCommand("Speech Settings", SetVoiceRate, "Slow")

sayezbwait("Now i am speaking super slow")

#4  

Yes I realize that. I was looking for a more fine-grained way with which to control the prosodic contours, and the breaks between strings. The method above is a bit too coarse for that. The SSML is a step in the right direction, so I was just wondering whether this is something that could be used in EZ-script.

However, using the SDK is perfectly fine, but thanks for the followup.

PRO
Synthiam
#5  

Great! Let me know if you have any questions about creating a plugin for this.

#6  

Based on my findings you can indeed use at least some SSML elements in ARC, it's been extremely useful when developing Dorian's voice!

@DJ Shame on you for not having more faith in your own amazing software! ;)

This works just fine if you're using either a Cepstral or CereProc voice:

#The </prosody> tag is only needed if you're going to make other changes mid-sentence, otherwise you can just use the first tag and don't need the second one after the string.

$VoiceStart = "<prosody pitch='-50%'><prosody rate='.40'>"
$VoiceEnd = "</prosody>"

SayWait($VoiceStart + "When I'm tired my voice gets very deep and I speak slowly" + $VoiceEnd)

Here's a video I made for those who prefer video format when learning:

PRO
Canada
#7  

Thanks for the tutorial @Sebediah!

I was thinking about purchasing a Cepstral voice just recently, this knowledge would definitely be handy when wanting to modify a voice with EZ-Script.

#8  

Sebediah, Thank you for your interesting tutorial. My robot Artamus uses a Cepstral voice, and I was able to alter his voice using your examples. Alexa has a hard time understanding him, maybe this will help. Either way this allows me to customize his voice. Steve S

#9  

@Sebediah - you are absolutely awesome! Thank you for sharing this.

#10  

Thanks @Sebediah this was indeed what I was looking for. Maybe the video could be moved into the tutorial section so that it does not becomes 'lost' in the forum.

PRO
Synthiam
#11  

larschrjensen - you can do that following the instructions in the top menu if you'd like :D

User-inserted image

#12  

Glad I could be of some assistance! Goodluck with your voices, everyone :)

PRO
Belgium
#13  

Sebediah&dorian

so cool and indeed very usefull.this going to be fun.

many thanks.

PRO
Belgium
#14  

oops it says averything like slach dot.and the pitch dont work.

User-inserted image

#17  

And what did Sebediah teach us about Microsoft voices like David? If we watch the video Sebediah teaches us that this type of tagging only works with voices from the vendors Cepstral or CereProc and will not work with Microsoft voices.

PRO
Belgium
#18  

ah .ok i have a few from cepstral.thanks justin.didn listen at the video good.

#19  

Cool, I'll be you'll be adding some cool voice effects to your projects in no time Patrick

PRO
Belgium
#20  

i just ad the cepstral voice .still same error.he says all kinds of stuf and no pitch. i also ad cepstral as default pc voice.is the pic correct? post #15

#21  

No Patrick, your code in your picture is not correct. Please watch the video that Sebediah made carefully because your answers are in there. Compare your code to his. One thing you'll see is you are missing = after pitch. Look at this code at time index 11:23

PRO
Belgium
#22  

i only notest the word ezb from sayEZBWAIT is in big letters. i try one line.it does not work.i added =.he also say something before, the actully line he must say.cant understand it.

#23  

Hello Patrick, there are a few problems with your code there. As Justin said, you're missing the = sign after pitch in both variables. Also I noticed you were trying to use the $VoiceStart variable on the first command. Unless you have created that variable somewhere else in ARC, it will not work because that was Dorian's default variable that I had created elsewhere in the program.

If you want to see that this really works, use the code I made on #7 and make modifications on that. But I encourage you to follow Justin's advice, stop the video where you can see my code, and make sure you write it exactly the same. But don't use the first $VoiceStart variable.

PRO
Belgium
#24  

sebediah

ah i made a screenchotfrom the wrong timing then.when i understand what you are saying in the first lines.i can make voices in swiftalker (cepstral ) and use that wiht the $voicestart.

thanks

PRO
Belgium
#25  

ok i got it.now i need to memorise it. eek haha i put some motion in there too.

User-inserted image

#26  

Nicely done Patrick! Thanks for the video mention:) Now you can give all your robots their own voices, you seem to have a little army of them there!

PRO
Belgium
#27  

yeach one of my robots talks dirty.i need to watsh him .lol i sold 30 robots allreddy.i sell them so more ez robots come in the world. here in belgium is not much. you learn me a few things,btw

sayWAIT=sound comming out pc speakers sayEZBWAIT=sound comming out ezbv4 pitch=low or high rate=speed

#28  

Haha, yeah you better keep an eye on that robot then. I'm glad you learned something new!

#29  

@DJ or @larschrjensen I'm not sure who created the tutorial but I noticed on the SSML tutorial page that the code window has errors in it. The tag mentioned in the comment is not there and there's no SSML tags within the strings. Just thought I'd point it out so that the code actually works if someone decides to try it out :)

Very nice to see this being turned into an actual tutorial though!

#30  

This is awesome info on voice adjustments! What I do for additional effects is using my old Apple I-phone 4s there is a Q-Neo voice changer App in the Apple store but can be downloaded a free version with a few free effects. The effect I use is deep Gold Cylon Command robot and when using the default "David" voice from EZB it changes David into Cylon Commander,totally Ominous sound effect for sure! Only thing is you need to use the Apple Guitar Rig Microphone/Amp connector to input EZB sound into Iphone and back out to main robot speaker Amp. It is really loud doing it like that because it is designed for Guitar effects going to real Amps. :D

PRO
Australia
#31  

The video has disappeared and the prosody strings do not work.  Has the SSML changed?

PRO
USA
#32  

This works with Microsoft voices

This works in EZB scripts, all you need

ControlCommand("Speech Settings", "SetVoiceRate", "slow") saywait("I am speaking slow")

ControlCommand("Speech Settings", "SetVoiceRate", "Fast") saywait("Now i am speaking fast")

#Too fast to hear #ControlCommand("Speech Settings", "SetVoiceRate", "ExtraFast") #saywait("Now i am speaking extrafast")

ControlCommand("Speech Settings", "SetVoiceRate", "ExtraSlow") saywait("Now i am speaking super slow")

EzAng