Speech synthesis: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
(→‎{{header|C}}: Code was wrong. Must pass text to argv[1], not argv[0]. If execlp() fails, must _exit, not return. While here, add code to print error messages.)
Line 11: Line 11:


=={{header|C}}==
=={{header|C}}==
Following shining examples of <code>exec</code>ing external programs around here:<lang c>#include <unistd.h>
Following shining examples of <code>exec</code>ing external programs around here:
#include <sys/wait.h>


{{libheader|POSIX}}
int talk(char *s)
<lang c>#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void talk(char *s)
{
{
pid_t pid;
if (fork()) return wait(0);
int status;
execlp("espeak", s, (void*)0);

return -1;
pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
}

if (pid == 0) {
execlp("espeak", "espeak", s, (void*)0);
perror("espeak");
_exit(1);
}

waitpid(pid, &status, 0);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
exit(1);
}
}


int main()
int main()
{
{
talk("Blah blah");
talk("This is an example of speech synthesis.");
return 0;
return 0;
}</lang>
}</lang>

Revision as of 21:34, 6 September 2011

Task
Speech synthesis
You are encouraged to solve this task according to the task description, using any language you may know.

Render the text “This is an example of speech synthesis.” as speech.

AutoHotkey

Works with: AutoHotkey_L

<lang ahk> talk := ComObjCreate("sapi.spvoice") talk.Speak("This is an example of speech synthesis.") </lang>

C

Following shining examples of execing external programs around here:

Library: POSIX

<lang c>#include <sys/wait.h>

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <unistd.h>

void talk(char *s) { pid_t pid; int status;

pid = fork(); if (pid < 0) { perror("fork"); exit(1); }

if (pid == 0) { execlp("espeak", "espeak", s, (void*)0); perror("espeak"); _exit(1); }

waitpid(pid, &status, 0); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) exit(1); }

int main() { talk("This is an example of speech synthesis."); return 0; }</lang>

C#

You need to 'Add Reference' to the COM "Microsoft Speech Object Library" in your Preferences. <lang csharp>using SpeechLib;

namespace Speaking_Computer {

 public class Program
 {
   private static void Main()
   {
     var voice = new SpVoice();
     voice.Speak("This is an example of speech synthesis.");
   }
 }

}</lang>

Mathematica

<lang Mathematica>Speak["This is an example of speech synthesis."]</lang>


PicoLisp

<lang PicoLisp>(call 'espeak "This is an example of speech synthesis.")</lang>

Tcl

This just passes the string into the Festival system: <lang tcl>exec festival --tts << "This is an example of speech synthesis."</lang> Alternatively, on MacOS X, you'd use the system say program: <lang tcl>exec say << "This is an example of speech synthesis."</lang> On Windows, there is a service available by COM for speech synthesis:

Library: tcom

<lang tcl>package require tcom

set msg "This is an example of speech synthesis." set voice [::tcom::ref createobject Sapi.SpVoice] $voice Speak $msg 0</lang> Putting these together into a helper procedure, we get: <lang tcl>proc speak {msg} {

   global tcl_platform
   if {$tcl_platform(platform) eq "windows"} {
       package require tcom
       set voice [::tcom::ref createobject Sapi.SpVoice]
       $voice Speak $msg 0
   } elseif {$tcl_platform(os) eq "Darwin"} {
       exec say << $msg
   } else {
       exec festival --tts << $msg
   }

} speak "This is an example of speech synthesis."</lang>

UNIX Shell

Here we use the open source espeak tool:

Works with: Bourne Shell
Works with: bash

<lang bash>#!/bin/sh espeak "This is an example of speech synthesis."</lang>

VBScript

<lang vbs> Dim message, sapi message = "This is an example of speech synthesis." Set sapi = CreateObject("sapi.spvoice") sapi.Speak message </lang>

ZX Spectrum Basic

This example makes use of the Currah Speech Synthesizer peripheral device.

<lang zx basic>10 LET s$="(th)is is an exampul of sp(ee)(ch) sin(th)esis":PAUSE 1</lang>