home *** CD-ROM | disk | FTP | other *** search
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; ;;
- ;;; Centre for Speech Technology Research ;;
- ;;; University of Edinburgh, UK ;;
- ;;; Copyright (c) 1999 ;;
- ;;; All Rights Reserved. ;;
- ;;; ;;
- ;;; Permission is hereby granted, free of charge, to use and distribute ;;
- ;;; this software and its documentation without restriction, including ;;
- ;;; without limitation the rights to use, copy, modify, merge, publish, ;;
- ;;; distribute, sublicense, and/or sell copies of this work, and to ;;
- ;;; permit persons to whom this work is furnished to do so, subject to ;;
- ;;; the following conditions: ;;
- ;;; 1. The code must retain the above copyright notice, this list of ;;
- ;;; conditions and the following disclaimer. ;;
- ;;; 2. Any modifications must be clearly marked as such. ;;
- ;;; 3. Original authors' names are not deleted. ;;
- ;;; 4. The authors' names are not used to endorse or promote products ;;
- ;;; derived from this software without specific prior written ;;
- ;;; permission. ;;
- ;;; ;;
- ;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;;
- ;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;;
- ;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;;
- ;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;;
- ;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;;
- ;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;;
- ;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;;
- ;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;;
- ;;; THIS SOFTWARE. ;;
- ;;; ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Author: Alan W Black
- ;;; Date: April 1999
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; Support code for phone set definitions
- ;;;
-
- (defmac (defPhoneSet form)
- (list 'defPhoneSet_real
- (list 'quote (cadr form))
- (list 'quote (car (cddr form)))
- (list 'quote (cadr (cddr form)))))
-
- (define (defPhoneSet_real name featdefs phones)
- "(defPhoneSet NAME FEATTYPES PHONES)
- Define a phone set with given name, feature types and
- list of phones. This also selects name as the current phoneset."
- (let (info)
- (if (not (eq? 'Features (car featdefs)))
- (begin
- ;; Old format that has the same number of phone features for
- ;; all phones
- (set! info
- (mapcar
- (lambda (ph)
- (let ((fvs
- (mapcar
- list
- (mapcar car featdefs)
- (cdr ph))))
- (ps_check_fvals
- (cons (car ph) (cons (list 'type t) fvs))
- (cons t fvs))
- (list (car ph) fvs)))
- phones)))
- ;; else
- ;; New format where types are specified so phones may have
- ;; different features
- (set! info
- (mapcar
- (lambda (ph)
- (let ((fvs
- (cons
- (list 'type (cadr ph))
- (mapcar
- list
- (mapcar car (cdr (assoc (cadr ph) (cdr featdefs))))
- (cddr ph)))))
- (ps_check_fvals
- (cons (car ph) fvs)
- (assoc (cadr ph) (cdr featdefs)))
- (list (car ph) fvs)))
- (cdr phones))))
- (Param.set
- (string-append "phonesets." name)
- info)
- (PhoneSet.select name)
- (list name info)))
-
- (define (ps_check_fvals fvs featdefs)
- "(ps_check_fvals fvs featdefs)
- Check that feature values in a phone definition are in the defined
- set of possibles."
- (mapcar
- (lambda (fp)
- (let ((def (cdr (assoc (car fp) (cdr featdefs)))))
- (cond
- ((not def)
- (error "Phoneset definition: phone has no defined type" fvs))
- ((not (member_string (car (cdr fp)) def))
- (error
- (format nil "Phoneset definition: phone feature %l is undefined" fp) fvs)))))
- (cdr (cdr fvs))))
-
- (define (PhoneSet.select name)
- "(PhoneSet.select name)
- Select named phonset as current."
- (if (feats.present Param (string-append "phonesets." name))
- (Param.set "phoneset" (Param.get (string-append "phonesets." name)))
- (error "no phoneset defined: " name)))
-
- (define (PhoneSet.description name)
- "(PhoneSet.description)
- Return (lisp) representation of current phoneset."
- (feats.tolisp (Param.get "phoneset")))
-
- (define (PhoneSet.list)
- "(PhoneSet.list)
- List of the names of the currently defined phonesets."
- ;; This isn't a particularly efficient way to get the answer
- (mapcar car (feats.tolisp (Param.get "phonesets"))))
-
- (define (PhoneSet.silences sils)
- "(PhoneSet.silences SILLIST)
- Define the silence phones for the currently selected phoneset."
- (Param.set "phoneset.silences" sils))
-
- (provide 'phoneset)
-
-
-
-
-