ikarus/lab/cocoa-speak.ss

39 lines
982 B
Scheme
Executable File

#!/usr/bin/env ikarus --r6rs-script
(import (ikarus) (objc) (Cocoa helpers))
(define-class NSSpeechSynthesizer)
(define (get-voice-name)
(if (= 2 (length (command-line)))
(cadr (command-line))
#f))
(define (make-speaker voice)
(define base-string "com.apple.speech.synthesis.voice.")
(define (synthesizer x)
[$ [$ NSSpeechSynthesizer alloc]
initWithVoice:
(and x (nsstring (string-append base-string x)))])
(define (voice->synthesizer voice)
(or (synthesizer voice)
(begin
(printf "~a is not available\n" voice)
(synthesizer #f))
(error #f "cannot initialize voice")))
(let ([st (voice->synthesizer voice)])
(lambda (x)
[$ st startSpeakingString: (nsstring x)])))
(define speak (make-speaker (get-voice-name)))
(speak "may I help you?")
(let loop ()
(printf "> ")
(let ([x (get-line (current-input-port))])
(unless (eof-object? x)
(speak x)
(loop))))
(newline)