Фестиваль 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
из-за разного моделирования.
В результате мы получаем лучшее качество голоса (на основе статистической модели), но не можем напрямую изменять частоту.
Очень хорошее описание генерации трубопровода можно найти здесь.