Фестиваль 2.4: почему некоторые голоса не работают в режиме пения?

voice_kal_diphone а также voice_ral_diphone работать правильно в режиме пения (есть вокальный вывод и высоты звука, соответствующие указанным нотам).

voice_cmu_us_ahw_cg и другие голоса CMU не работают правильно - есть голосовой вывод, но высота тона не изменяется в соответствии с указанными нотами.

Можно ли получить правильный вывод с более высоким качеством голоса CMU?

Командная строка для работы (зависит от высоты тона):

text2wave -mode singing -eval "(voice_kal_diphone)" -o song.wav song.xml

Командная строка для нерабочего (без изменения высоты тона) вывода:

text2wave -mode singing -eval "(voice_cmu_us_ahw_cg)" -o song.wav song.xml

Вот song.xml:

<?xml version="1.0"?>
<!DOCTYPE SINGING PUBLIC "-//SINGING//DTD SINGING mark up//EN" "Singing.v0_1.dtd" []>
<SINGING BPM="60">
 <PITCH NOTE="A4,C4,C4"><DURATION BEATS="0.3,0.3,0.3">nationwide</DURATION></PITCH>
 <PITCH NOTE="C4"><DURATION BEATS="0.3">is</DURATION></PITCH>
 <PITCH NOTE="D4"><DURATION BEATS="0.3">on</DURATION></PITCH>
 <PITCH NOTE="F4"><DURATION BEATS="0.3">your</DURATION></PITCH>
 <PITCH NOTE="F4"><DURATION BEATS="0.3">side</DURATION></PITCH>
</SINGING>

Вам также может понадобиться этот патч для singing-mode.scm:

@@ -339,7 +339,9 @@
 (defvar singing-max-short-vowel-length 0.11)

 (define (singing_do_initial utt token)
-  (if (equal? (item.name token) "")
+  (if (and
+        (not (equal? nil token))
+        (equal? (item.name token) ""))
       (let ((restlen (car (item.feat token 'rest))))
         (if singing-debug
             (format t "restlen %l\n" restlen))

Для настройки моей среды я использовал скрипт http://festvox.org/fest_build. Вы также можете скачать voice_cmu_us_ahw_cg отдельно.

1 ответ

Решение

Похоже, проблема в поколении телефонов.

voice_kal_diphone использования UniSyn модель синтеза, в то время как voice_cmu_us_ahw_cg использования ClusterGen модель. Последний имеет собственную модель интонации и длительности (на основе состояния) вместо интонации / длительности телефона: возможно, вы заметили, что длительность не изменилась также в сгенерированной "песне".

singing-mode.scm пытается извлечь каждый слог и изменить его частоту. В случае ClusterGen генератор волновых моделей просто игнорирует частоты и длительности слогов, установленные в Target из-за разного моделирования.

В результате мы получаем лучшее качество голоса (на основе статистической модели), но не можем напрямую изменять частоту.

Очень хорошее описание генерации трубопровода можно найти здесь.

Другие вопросы по тегам