;; ----------------------------------------------------------------- ;; ;; The HMM-Based Speech Synthesis System (HTS) ;; ;; developed by HTS Working Group ;; ;; http://hts.sp.nitech.ac.jp/ ;; ;; ----------------------------------------------------------------- ;; ;; ;; ;; Copyright (c) 2001-2011 Nagoya Institute of Technology ;; ;; Department of Computer Science ;; ;; ;; ;; 2001-2008 Tokyo Institute of Technology ;; ;; Interdisciplinary Graduate School of ;; ;; Science and Engineering ;; ;; ;; ;; All rights reserved. ;; ;; ;; ;; Redistribution and use in source and binary forms, with or ;; ;; without modification, are permitted provided that the following ;; ;; conditions are met: ;; ;; ;; ;; - Redistributions of source code must retain the above copyright ;; ;; notice, this list of conditions and the following disclaimer. ;; ;; - Redistributions in binary form must reproduce the above ;; ;; copyright notice, this list of conditions and the following ;; ;; disclaimer in the documentation and/or other materials provided ;; ;; with the distribution. ;; ;; - Neither the name of the HTS working group nor the names of its ;; ;; contributors may be used to endorse or promote products derived ;; ;; from this software without specific prior written permission. ;; ;; ;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ;; ;; CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, ;; ;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ;; ;; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ;; ;; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS ;; ;; BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ;; ;; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;; ;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;; ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ;; ;; ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ;; ;; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ;; ;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ;; ;; POSSIBILITY OF SUCH DAMAGE. ;; ;; ----------------------------------------------------------------- ;; ;; ;; Extra features ;; From Segment items refer by ;; ;; R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase ;; R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase ;; lisp_total_words ;; lisp_total_syls ;; lisp_total_phrases ;; ;; The last three will act on any item (define (distance_to_p_content i) (let ((c 0) (rc 0 ) (w (item.relation.prev i "Phrase"))) (while w (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "contentp")) (begin (set! rc c) (set! w nil)) (set! w (item.prev w))) ) rc)) (define (distance_to_n_content i) (let ((c 0) (rc 0) (w (item.relation.next i "Phrase"))) (while w (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "contentp")) (begin (set! rc c) (set! w nil)) (set! w (item.next w))) ) rc)) (define (distance_to_p_accent i) (let ((c 0) (rc 0 ) (w (item.relation.prev i "Syllable"))) (while (and w (member_string (item.feat w "syl_break") '("0" "1"))) (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "accented")) (begin (set! rc c) (set! w nil)) (set! w (item.prev w))) ) rc)) (define (distance_to_n_accent i) (let ((c 0) (rc 0 ) (w (item.relation.next i "Syllable"))) (while (and w (member_string (item.feat w "p.syl_break") '("0" "1"))) (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "accented")) (begin (set! rc c) (set! w nil)) (set! w (item.next w))) ) rc)) (define (distance_to_p_stress i) (let ((c 0) (rc 0 ) (w (item.relation.prev i "Syllable"))) (while (and w (member_string (item.feat w "syl_break") '("0" "1"))) (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "stress")) (begin (set! rc c) (set! w nil)) (set! w (item.prev w))) ) rc)) (define (distance_to_n_stress i) (let ((c 0) (rc 0 ) (w (item.relation.next i "Syllable"))) (while (and w (member_string (item.feat w "p.syl_break") '("0" "1"))) (set! c (+ 1 c)) (if (string-equal "1" (item.feat w "stress")) (begin (set! rc c) (set! w nil)) (set! w (item.next w))) ) rc)) (define (num_syls_in_phrase i) (apply + (mapcar (lambda (w) (length (item.relation.daughters w 'SylStructure))) (item.relation.daughters i 'Phrase)))) (define (num_words_in_phrase i) (length (item.relation.daughters i 'Phrase))) (define (total_words w) (length (utt.relation.items (item.get_utt w) 'Word))) (define (total_syls s) (length (utt.relation.items (item.get_utt s) 'Syllable))) (define (total_phrases s) (length (utt.relation_tree (item.get_utt s) 'Phrase)))