次のページ 前のページ 目次へ

5. 付録

5.1 A.1. /usr/lib/festival/lib/siteinit.scm 用のテンプレート

(警告:Scheme code が続きます;理解する必要はありません)


        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;  Site Initialisation file
        ;;;  This is loaded near the end of init.scm,
        ;;;  just before user initialisation file
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        ;;; ==========================
        ;;; Style Management Functions
        ;;; ==========================

        (defvar Styles '((default 140 22 1.0))
          "Available voice styles")

        (defvar style_default 'default
          "Default voice style")
        
        (defvar current_style 'none
          "Current voice style")
        
        (define (Style selected_style)
          "(Style DEFINED_STYLE)
           Sets the pitch, pitch variance, and speed of the current voice.
           Type 'Styles' for a list of defined styles."
          (let ((style (assoc selected_style Styles)))
            (if (not style)
                (set! style (assoc 'default Styles)))
            (let ((model_mean (cadr (assoc 'model_f0_mean  int_lr_params)))
                  (model_std  (cadr (assoc 'model_f0_std   int_lr_params)))
                  (new_mean (cadr style))
                  (new_std (cadr (cdr style)))
                  (new_stretch (cadr (cdr (cdr style)))))
              (set! int_lr_params
                    (list 
                     (list 'target_f0_mean new_mean)
                     (list 'target_f0_std  new_std)
                     (list 'model_f0_mean  model_mean)
                     (list 'model_f0_std   model_std)))
              (Parameter.set 'Duration_Stretch new_stretch)
              (set! current_style (car style))
              (list (car style) new_mean new_std new_stretch)
              )
            )
          )
        
        (define (NewStyle style_name mean std stretch)
          "(NewStyle STYLE_NAME MEAN STD STRETCH)
           Defines a new style; MEAN and STD refer to pitch mean and variance,
           while STRETCH refers to inverse speed, 1.0 being the standard."
          (set! Styles (cons (list style_name mean std stretch) Styles)))

        (if (probe_file "/etc/festival.conf")
            (load "/etc/festival.conf"))

5.2 A.2. /etc/festival.conf 用のテンプレート

        ;;; =================
        ;;; Style Definitions
        ;;; =================
        
        (NewStyle 'male_frozen      80 10 1.5 )
        (NewStyle 'male_slow       100 22 1.1 )
        (NewStyle 'male_tenor      140 60 1.0 )
        (NewStyle 'male_baritone   100 40 1.0 )
        (NewStyle 'male_bass        70 25 1.0 )
        (NewStyle 'male_relaxed    100 24 0.95)
        (NewStyle 'male_newscaster 140 32 0.85)
        (NewStyle 'male_hurried    117 22 0.80)
        (NewStyle 'male_stressed   150 30 0.70)
        (NewStyle 'male_fast       110 22 0.70)
        (NewStyle 'male_faster     110 22 0.60)
        (NewStyle 'male_panic      170 20 0.60)
        (NewStyle 'male_fastest    110 22 0.55)
        (NewStyle 'the_flash       110 22 0.45)

5.3 A.3. スタイルのサポートを追加したスクリプト

これは festival のテキスト読み上げのインターフェイスに声質の 「スタイル」のサポートを追加するスクリプトです。ほかの機能を追加 するためのテンプレートとしても使えます。何か追加したらぜひ教え てください。

スクリプト名を saytext として、ごく簡単に使い方を説明しておきましょう。

        saytext -h              # (なぞめいた)ヘルプメッセージがでます

        saytext [-s <スタイル>] [<ファイル名>]  # ファイルもしくは標準入力を読み上げます

<スタイル>は、存在するものなら何でもかまいません。<ファイル名 >が指定されない場合は、標準入力が使われます。

        例      saytext -s male_baritone myfile.txt

そしてこれがスクリプトのコードです:

        #!/usr/lib/festival/src/main/festival --script
        ;;;  Here is a Festival script that adds voice "style"
        ;;;  support to the text-to-speech command-line interface.
        ;;;
        ;;;  Type "saytext -h" for help, including a list of available styles.
        ;;;
        ;;;  User-defined "styles" can be declared in ~/.festivalrc like this:
        ;;;
        ;;;             (NewStyle <name> <mean_pitch> <pitch_SD> <speed>)
        ;;;  E.g:       (NewStyle 'mystyle 100 23 0.9)   ; Defines a baritone
        ;;;  
        ;;;  You can also set default styles:
        ;;;
        ;;;             (set! style_default 'my_style)
        ;;;
        ;;;  Styles may be selected within a script via:
        ;;;
        ;;;             (Style <name>)
        ;;;  E.g.:      (Style 'my_style)
        
        ;;; ==============
        ;;; INITIALIZATION
        ;;; ==============
        
        ;;; Because this is a --script type file I have to explicitly
        ;;; load the initfiles: init.scm and user's .festivalrc
        (load (string-append libdir "init.scm"))
        
        (if (probe_file (format nil "%s/.festivalrc" (getenv "HOME")))
            (load (format nil "%s/.festivalrc" (getenv "HOME"))))
        
        ;;; Clear rotten rendered speech from tmp
        (system "/bin/rm -f /tmp/est_*")
        
        ;;; Process command-line arguments
        
        (defvar TTS_Filename "-"
          "This variable stores the name of the file to be read,
          \"\" for stdin")
        
        (while argv
               (let ((option (car argv)))
                 (set! argv (cdr argv))
                 (cond
        
                  ((eq? option '-s)
                   (if (length argv)
                       (let ((style (car argv)))
                         (if (not (assoc style Styles))
                             (format t "No style '%s, " style))
                         (Style style)
                         ; (format t "Using style %s\n" current_style)
                         (set! argv (cdr argv))
                         )
                       (error "Syntax error in option: -s <style>" nil)))
        
                  ((eq? option '-h)
                   (format t "Usage: saytext [-s <style> | -h]\n")
                   (format t "Available styles are:\n")
                   (format t " %l\n" Styles)
                   (quit))
        
                  (t
                   (set! TTS_Filename (string-append "" option))))))
        
        
        (tts TTS_Filename nil)


次のページ 前のページ 目次へ