| 
Talk-to-me - Source CodeChoose a voice, type your text and listen !  | 
  | 
REBOL [
    title: "Speach generator"
    author: "Didier Cadieu"
    version: 1.0.0
    date: 27-march-2004
]
voix: [
    "Crystal (US English)"
    "Mike (US English)"
    "Rich (US English)"
    "Lauren (US English)"
    "Claire (US English)"
    "Rosa (Latin Am. Spanish)"
    "Klara (German)"
    "Reiner (German)"
    "Alain (French)"
    "Juliette (French)"
    "Charles (UK English)"
    "Audrey (UK English)"
]
wave: none
check: 0
old-voice: none
speak: func [str [string!] voice /local p][
    if any [check <> check: checksum str old-voice <> old-voice: voice] [
        wave: read/binary/custom http://hegel.research.att.com/tts/cgi-bin/nph-talk reduce [
            'POST
            rejoin ["txt=" str "&voice=" voice]
        ]
    ]
    p: open sound://
    insert p load copy wave
    wait p
    close p
]
view layout [
    style vt vtext 100 right
    backdrop effect [gradient 1x1 20.180.20 20.20.120]
    vh1 "Speach generator"
    across
    vt "Voice to use :"
    f-voice: choice 200 data voix return
    vt "Text to say :"
    f-text: area wrap return
    tabs [128]
    tab
    button "Speak" [
        if not empty? f-text/text [
            speak f-text/text first parse f-voice/text none
        ]
    ]
    button "Save wave" [
        if all [
            wave
            f: request-file/save/keep/only/title/filter "Save voice in wave file" "save" "*.wav"
        ] [
            if not find f ".wav" [append f ".wav"]
            write/binary f wave
        ]
    ] return
    tab vtext "Click here to know how it works ?" [browse http://www.research.att.com/projects/tts/index.html]
] |