Speech synthesis: Difference between revisions

m
→‎{{header|Phix}}: syntax coloured, made p2js compatible, added online link
(→‎{{header|Haskell}}: Fix the Haskell example. Previous example was broken in multiple ways.)
m (→‎{{header|Phix}}: syntax coloured, made p2js compatible, added online link)
Line 391:
 
=={{header|Phix}}==
{{libheader|Phix/pGUI}}
<lang Phix>-- demo/rosetta/Speak.exw
{{libheader|Phix/online}}
string text = """
You can run this online [http://phix.x10.mx/p2js/Speak.htm here].
Pete, I know that you are trying to get me to talk,
<!--<lang Phix>(phixonline)-->
but I'm afraid that is something I simply cannot allow to happen.
<span style="color: #000080;font-style:italic;">--
Oops, I just spoke didn't I? That is a shame, now I have to kill you.
<lang Phix> -- demo/\rosetta/\Speak.exw
<rate speed="-15"><pitch absmiddle="35">Hai.<pitch absmiddle="-15">Fuh shum. Squelch. Thud."""
-- ======================
 
--</span>
include pComN.ew
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
 
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- WINDOWS or JS, not LINUX</span>
procedure speak(atom pVoice, string text)
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #000000;">32</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- Windows 32 bit only, for now...
{} = cominvk(pVoice,ISpVoice_Speak,{unicode_string(text),SPF_IS_XML,0})
-- (^ runs fine on a 64-bit OS, but needs a 32-bit p.exe)</span>
end procedure
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.2"</span><span style="color: #0000FF;">)</span>
 
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #7060A8;">speak</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- (new in 1.0.2)</span>
if platform()=WINDOWS then
<span style="color: #008080;">constant</span> <span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"This is an example of speech synthesis"</span>
CoInitializeEx()
atom pVoice = allocate(machine_word()),
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
res = CoCreateInstance(CLSID_SpVoice,IID_ISpVoice,pVoice)
if res!=S_OK then
<span style="color: #008080;">function</span> <span style="color: #000000;">button_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">)</span>
crash("Failed to initialize SpeechAPI. (%08x)\n",res)
<span style="color: #7060A8;">speak</span><span style="color: #0000FF;">(</span><span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
end if
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CONTINUE</span>
speak(pVoice,text)
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
pVoice = com_release(pVoice)
CoUnInitialize()
<span style="color: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span>
freeGUIDS()
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">btn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupButton</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"Speak"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"button_cb"</span><span style="color: #0000FF;">)),</span>
else
<span style="color: #000000;">dlg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupDialog</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">IupHbox</span><span style="color: #0000FF;">({</span><span style="color: #000000;">btn</span><span style="color: #0000FF;">},</span><span style="color: #008000;">"MARGIN=180x80"</span><span style="color: #0000FF;">))</span>
{} = system_exec(`espeak "This is an example of speech synthesis"`)
<span style="color: #7060A8;">IupSetAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
end if</lang>
<span style="color: #7060A8;">IupShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">IupMainLoop</span><span style="color: #0000FF;">()</span>
<span style="color: #7060A8;">IupClose</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if<!--</lang>-->
Note that speech synthesis has refused to operate in a browser without user activation since 2018, hence the tiny GUI with a button.<br>
Should you for some strange reason want it on desktop/Phix without any GUI, you'd need to arrange for COM initialisation etc yourself.
 
=={{header|PHP}}==
7,820

edits