Форум ReidS Soft

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум ReidS Soft » Flite+hts_engine » Demo scripts with MGE option for Windows


Demo scripts with MGE option for Windows

Сообщений 1 страница 10 из 10

1

Demo scripts with MGE option for Windows
Демонстрационные скрипты с опциями MGE для Windows.

На странице HMM-based Speech Synthesis System (HTS) - Extensions http://hts.sp.nitech.ac.jp/?Extensions
доступны демонстрационные скрипты для ОС Linux с опциями MGE для тренировки голоса на англоязычной базе ARCTIC.

Demo scripts with MGE option. This scripts support MGE training for HTS-demo_CMU-ARCTIC-SLT_STRAIGHT (ver.2.2).
Xingyu Na

Приятно удивил размер демонстрации - всего-навсего 190Мб. После чтения инструкциями стало понятно, что простые пользователи Windows идут лесом, а подготовленные идут запускатьть скрипты в среде Cygwin или на виртуальной машине Linux, но с моей точки зрения намного проще переписать конфигурационные файлы. Кстати, там нет половины файлов. 

Чтобы не делать лишнюю работу, я отправил письмо Xingyu Na с вопросом на эту тему.   
Но видимо, ждать придется долго.

Итак, см. файл INSTALL. Я приведу сокращенный перевод этого файла на русский язык.

Установка HTS-demo_CMU-ARCTIC-SLT_STRAIGHT

1.HTS-demo_CMU-ARCTIC-SLT_STRAIGHT требует Festival, SPTK-3.4.1, HTS-2.2, hts_engine API-1.05, STRAIGHTV40 и MATLAB.
   Пожалуйста, установите их перед запуском этой демонстрации.
   Вы можете загрузить часть из них со следующих вебсайтов:

   Festival: http://www.cstr.ed.ac.uk/projects/festival/
   SPTK: http://sp-tk.sourceforge.net/
   HTS: http://hts.sp.nitech.ac.jp/
   hts_engine API: http://hts-engine.sourceforge.net/
   STRAIGHT: http://www.wakayama-u.ac.jp/~kawahara/STRAIGHTtrial/

2. Установите HTS-demo_CMU-ARCTIC-SLT_STRAIGHT путем запуска скрипта конфигурации (configure):

   % cd HTS-demo_CMU-ARCTIC-SLT_STRAIGHT
   % ./configure --with-matlab-search-path=/usr/local/matlab/bin \
                 --with-straight-path=/usr/local/STRAIGHTV40 \
                 --with-fest-search-path=/usr/local/festival/examples \
                 --with-sptk-search-path=/usr/local/SPTK-3.4.1/bin \
                 --with-hts-search-path=/usr/local/HTS-2.2_for_HTK-3.4.1/bin \
                 --with-hts-engine-search-path=/usr/local/hts_engine_API-1.05/bin

Пожалуйста отредактируйте вышеуказанные директории для вашей среды.
    Обратите внимание, что вы должны указать каталог festival/examples вместо festival/bin.

Прим. В Windows нельзя запустить этот скрипт без установки и настройки Cygwin.
Следует создать каталоги с:\usr\local и установить или скопировать необходимые пакеты Festival, SPTK-3.4.1, HTS-2.2, hts_engine API-1.05, STRAIGHTV40 и MATLAB.
Продолжение следует...

0

2

Бонус для буржуев, тк русским ничего не надо. Можете попробовать, тк все-равно пока не работает.

my_config https://www.sendspace.com/file/fiexf8

Запуск:
perl scripts/Training.pl my_config

Примечание
Запуск скрипта  в  Makefile.in:

echo "Running a training/synthesis perl script (Training.pl) in background...."
@PERL@ scripts/Training.pl scripts/Config.pm > log 2>&1 &

0

3

Более простой способ эмуляции  линукс-среды описан в статье "Переносим функциональность bash в cmd.exe" http://habrahabr.ru/post/177033/

0

4

Информация для учащихся старших классов.
Скачали?
Теперь скачайте набор утилит  отсюда win-bash - bash port for Windows.htm
http://sourceforge.net/projects/win-bas … source=dlp

Нужно распаковать архив и скопировать все утилиты в каталог c:\usr\local\wbin
Указать путь к этим утилитам в переменной path (свойства компьютера, переменные окружения).
Нужно дописать ;c:\usr\local\wbin  к имеющимся путям, тк каждый путь отделяется точкой с запятой.

теперь можно перейти в каталог с:\HTS-demo_CMU-ARCTIC-SLT_STRAIGHT\data
и запустить командный файл для обработки базы звуковых файлов:
bash Makefile.in
pause

В ответ утилита bash выведет множество сообщений об ошибках (команда не найдена), те не может выполнить этот скрипт из-за неизвестного синтаксиса.

Решение можно найти вот здесь http://itman.in/bash-scripting/       Администрирование и веб-разработка

Подсказка.
Просмотрите всю страницу.
Знак "=" везде припечатан вплотную к переменной без пробелов.
f="path1/path2/file.ext"
pos=6
len=5
slice4="${f:${pos}:${len}}" # = "path2"

Короткий пример
f="path1/path2/file.ext"    # f=path1/path2/file.ext # можно так
echo ${f}
exit

Теперь см. файл Makefile.in
# setting
SPEAKER  =      @SPEAKER@
DATASET =      @DATASET@

можно вписать ниже
# setting
SPEAKER=slt #@SPEAKER@
DATASET="cmu_us_arctic" #@DATASET@
echo ${SPEAKER}
exit

Далее ручная правка по всему файлу. Нужно убрать лишние пробелы  и заменить $(подстановка) на
${подстановка}.
Если двигать exit дальше вниз до записи строк в файл скрипта extract.m, то станет понятно, что необходимо заменить конструкцию $$() ....

0

5

Кратко.
# setting  наименование диктора и базы голоса
SPEAKER=slt #@SPEAKER@
DATASET="cmu_us_arctic" #@DATASET@

# awk and perl    путь к исполняемым файлам perl и awk, полный путь не указывается, тк путь к каталогам указан в переменной paht
AWK=AWK
PERL=PERL

#echo ${PERL}    # проверка подстановки

# SPTK commands    путь к исполняемым файлам SPTK ( c:\usr\local\sptk\bin )
X2X=X2X # имя файла x2x.exe
MGCEP=MGCEP
#... и тд

# MATLAB and STRAIGHT
MATLAB=C:/MATLAB701/bin/win32/MATLAB.exe
STRAIGHT=C:\usr\local\STRAIGHTtrial\Resources\STRAIGHTV40pcode\STRAIGHTV40pcode

# dumpfeats to extract utterance information
DUMPFEATS=DUMPFEATS

# SOX to convert raw audio to RIFF wav
SOX=SOX/sox
SOXOPTION="b 16" #SOXOPTION

# speech analysis conditions эти значения переменных взяты из моего файла my_config
SAMPFREQ=48000 #@SAMPFREQ@   # Sampling frequency (48kHz)
FRAMESHIFT=240 #@FRAMESHIFT@ # Frame shift in point (240 = 48000 * 0.005)
FREQWARP=0.55 #@FREQWARP@   # frequency warping factor
GAMMA=0 #@GAMMA@      # pole/zero weight for mel-generalized cepstral (MGC) analysis
MGCORDER=49 #@MGCORDER@   # order of MGC analysis
LNGAIN=1 #@LNGAIN@     # use logarithmic gain rather than linear gain
LOWERF0=110 #@LOWERF0@    # lower limit for f0 extraction (Hz)
UPPERF0=280 #@UPPERF0@    # upper limit for f0 extraction (Hz)

# windows for calculating delta features
MGCWIN=win/mgc.win
LF0WIN=win/lf0.win
BAPWIN=win/bap.win
NMGCWIN=3 #@NMGCWIN@
NLF0WIN=3 #@NLF0WIN@
NBAPWIN=3 #@NBAPWIN@

# список меток

all: analysis labels

analysis: straight mgc lf0 bap cmp

labels: label mlf list scp

# генерация скрипта для матлаба и преобразование звуковых файлов из формата raw в формат wav .

straight:
# Extracting f0, aperiodicity, and spectra using STRAIGHT
mkdir -p wav sp ap f0
frameshift=`expr 1000 \* ${FRAMESHIFT} / ${SAMPFREQ}`; \
echo "path(path,'${STRAIGHT}');"                      >  scripts/extract.m; \
echo "prm.F0frameUpdateInterval=${frameshift};"      >> scripts/extract.m; \
echo "prm.F0searchUpperBound=${UPPERF0};"             >> scripts/extract.m; \
echo "prm.F0searchLowerBound=${LOWERF0};"             >> scripts/extract.m; \
echo "prm.spectralUpdateInterval=${frameshift};"     >> scripts/extract.m; \
echo ""                                               >> scripts/extract.m

for raw in raw/${DATASET}_${SPEAKER}_*.raw; do \
    base=`basename ${raw} .raw`; \
    echo ${base}; \
    min=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | head -n 1`; \
    max=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | tail -n 1`; \
    if [ -s ${raw} -a ${min} -gt -32768 -a ${max} -lt 32767 ]; then \
    wav=wav/${base}.wav; \
    f0=f0/${base}.f0; \
    ap=ap/${base}.ap; \
    sp=sp/${base}.sp; \
    echo -n "Converting ${raw} to ${wav} and generating MATLAB script..."; \
    ${SOX} -c 1 -s -${SOXOPTION} -t raw -r ${SAMPFREQ} ${raw} -c 1 -s -${SOXOPTION} -t wav -r ${SAMPFREQ} ${wav}; \
    echo "fprintf(1,'Processing ${wav}\n');"     >> scripts/extract.m; \
    echo "[x,fs]=wavread('${wav}');"             >> scripts/extract.m; \
    echo "[f0, ap] = exstraightsource(x,fs,prm);" >> scripts/extract.m; \
    echo "[sp] = exstraightspec(x, f0, fs, prm);" >> scripts/extract.m; \
    echo "ap = ap';"                              >> scripts/extract.m; \
    echo "sp = sp';"                              >> scripts/extract.m; \
    echo "save '${f0}' f0 -ascii;"               >> scripts/extract.m; \
    echo "save '${ap}' ap -ascii;"               >> scripts/extract.m; \
    echo "save '${sp}' sp -ascii;"               >> scripts/extract.m; \
    echo ""                                       >> scripts/extract.m; \
    echo "done"; \
    fi;  \
done; \
echo "quit;"                                          >> scripts/extract.m

exit; выход из скрипта без запуска MATLAB

${MATLAB} < scripts/extract.m     
#rm -f scripts/extract.m             #удаление файла скрипта

На моем компьютере Строка ${MATLAB} < scripts/extract.m  запускает только матлаб 7.
Здесь http://rebl0g.wordpress.com/2011/05/27/ … андной-ст/ описано как запускать скрипты матлаба из командной строки.  Но это не поможет, тк  матлаб вместо откомпилированных скриптов *.p  Straight-a будет искать неоткомпилированные скрипты (*.m), которые можно достать только у автора скрипта.
Решается просто, скрипт extract.m копируется в корневую директорию базы и оттуда кидается в командное окно матлаба.
Далее Матлабу нужен wavread. Находите wavread.m в Интернете и сохраняете рядом со скриптом.
Если ваш матлаб находит ошибки в скрипте, то приводите синтаксис скрипта в соответствие с требованиями вашего матлаба и запускаете. :)

Все остальные блоки скрипта Makefile.in выполняется без проблем до блока генерации меток
# Extracting monophone and fullcontext labels from utterance files
${DUMPFEATS} - скрипт DUMPFEATS.SH из папки примеров фестиваля. По всей видимости это скрипт на языке лисп.

Молодец, китаец из аккустического института.

0

6

Для генерации меток используются встроенный интерпретатор Festival-я. См. документацию на Festival.

1.Исходники SPTK можно скачать с ресурса  http://sourceforge.net/
2.sox, откомпилированный для windows:
http://sox-sound-exchange.soft112.com/
http://sox-sound-exchange.soft112.com/download.html
3. Festival, откомпилированный для Windows:
How to Build Festival on Windows
http://www.eguidedog.net/doc_build_win_festival.php

Построение SPTK в Windows
Необходимо выполнить командный файл в каталоге lib, а затем в bin:
nmake -f Makefile.mak
pause

Как правило, при компиляции SPTK в VC2008 выводятся ошибки:
неизвестный тип long long (я заменил на double, хотя это не совсем правильно),
где-то не определена константа M_PI, в x2x  не определены __LONG_MAX__, __LONG_LONG_MAX__, LLONG_MAX и тд

Константу M_PI можно скопировать из SPTK.h.

В файл x2x.c нужно добавить следующий код:

#ifndef __LONG_MAX__
#define __LONG_MAX__ 2147483647L
#endif
#ifndef __LONG_LONG_MAX__
#define __LONG_LONG_MAX__ 9223372036854775807LL
#endif

#ifndef LLONG_MAX
#define LLONG_MAX __LONG_MAX__
#define LLONG_MIN (-__LONG_MAX__-1)
/*#define ULLONG_MAX (__LONG_MAX__*2ULL+1) */
#define ULLONG_MAX (__LONG_MAX__*(unsigned long int)2+1)  //####### unsigned long long int
#endif

0

7

Определение __LONG_MAX__ найдено в интернете, в файле limits.h
ULL - на стр. c++ - ULL suffix on a numeric literal - Stack Overflow

0

8

Запуск скриптов фестиваля из командной строки
путь/festival --script путь_к_скриптам/saytime.sh
c:/usr/local/festival/bin/festival --script C:/usr/local/festival/examples/saytime.sh

Файл Makefile.in

# setting
SPEAKER=slt #@SPEAKER@
DATASET="cmu_us_arctic" #@DATASET@

# awk and perl
AWK=AWK
PERL=PERL

#echo ${PERL}

# SPTK commands
X2X=X2X
MGCEP=MGCEP
LPC2LSP=LPC2LSP
BCP=BCP
AVERAGE=AVERAGE
MERGE=MERGE
VSTAT=VSTAT
NAN=NAN
MINMAX=MINMAX

# MATLAB and STRAIGHT
MATLAB=E:/MATLAB701/bin/win32/MATLAB.exe
STRAIGHT=C:\usr\local\STRAIGHTtrial\Resources\STRAIGHTV40pcode\STRAIGHTV40pcode

# dumpfeats to extract utterance information
DUMPFEATS='C:/festival/bin/festival.exe --script c:/usr/local/festival/examples/dumpfeats.sh'

# SOX to convert raw audio to RIFF wav
SOX=SOX/sox
SOXOPTION="b 16" #SOXOPTION

# speech analysis conditions
SAMPFREQ=48000 #@SAMPFREQ@   # Sampling frequency (48kHz)
FRAMESHIFT=240 #@FRAMESHIFT@ # Frame shift in point (240 = 48000 * 0.005)
FREQWARP=0.55 #@FREQWARP@   # frequency warping factor
GAMMA=0 #@GAMMA@      # pole/zero weight for mel-generalized cepstral (MGC) analysis
MGCORDER=49 #@MGCORDER@   # order of MGC analysis
LNGAIN=1 #@LNGAIN@     # use logarithmic gain rather than linear gain
LOWERF0=110 #@LOWERF0@    # lower limit for f0 extraction (Hz)
UPPERF0=280 #@UPPERF0@    # upper limit for f0 extraction (Hz)

# windows for calculating delta features
MGCWIN=win/mgc.win
LF0WIN=win/lf0.win
BAPWIN=win/bap.win
NMGCWIN=3 #@NMGCWIN@
NLF0WIN=3 #@NLF0WIN@
NBAPWIN=3 #@NBAPWIN@

all: analysis labels

analysis: straight mgc lf0 bap cmp

labels: label mlf list scp


#${MATLAB} -r scripts\extract.m
# #rm -f scripts/extract.m
# exit;

label:
# Extracting monophone and fullcontext labels from utterance files
mkdir -p labels/mono
mkdir -p labels/full

for utt in utts/${DATASET}_${SPEAKER}_*.utt; do \
    base=`basename ${utt} .utt`; \
    if [ -s ${utt} ]; then \
    ${DUMPFEATS}  -eval    scripts/extra_feats.scm \
        -relation Segment \
        -feats    scripts/label.feats \
        -output   tmp \
        ${utt}; \
    fi; \
    #-eval \
${AWK} -f scripts/label-full.awk tmp > labels/full/${base}.lab; \
    ${AWK} -f scripts/label-mono.awk tmp > labels/mono/${base}.lab; \
done
#rm -f tmp

mlf:
# Generating monophone and fullcontext Master Label Files (MLF}
echo "#!MLF!#" > labels/mono.mlf
echo "\"*/${DATASET}_${SPEAKER}_*.lab\" -> \"PWD/data/labels/mono\"" >> labels/mono.mlf

echo "#!MLF!#" > labels/full.mlf
echo "\"*/${DATASET}_${SPEAKER}_*.lab\" -> \"PWD/data/labels/full\"" >> labels/full.mlf

## после выполнения можно удалить или закомментировать 2 верхних блока  и раскоментировать блок ниже
#list:
# # Generating a fullcontext model list file
# mkdir -p lists
#
# rm -f tmp
# for lab in labels/full/${DATASET}_${SPEAKER}_*.lab; do \
##    if [ -s ${lab} -a -s labels/mono/`basename ${lab}` -a -s cmp/`basename ${lab} .lab`.cmp ]; then \
#    sed -e "s/.* //g" ${lab} >> tmp; \
##    fi \
# done
# sort -u tmp > lists/full.list
#
# # Generating a fullcontext model list file which includes unseen models
# rm -f tmp
# cat lists/full.list > tmp
# for lab in labels/gen/*.lab; do \
#    sed -e "s/.* //g" ${lab} >> tmp; \
# done
# sort -u tmp > lists/full_all.list
# rm -f tmp
#
# # Generating a monophone list file
# rm -f tmp
# for lab in labels/mono/${DATASET}_${SPEAKER}_*.lab; do \
#    if [ -s ${lab} -a -s labels/full/`basename ${lab}` -a -s cmp/`basename ${lab} .lab`.cmp ]; then \
#    sed -e "s/.* //g" ${lab} >> tmp; \
#    fi \
# done
# sort -u tmp > lists/mono.list
# rm -f tmp
#

exit;

Слышали песню про Ладошко? Ладошка в ладошку
DUNE - Hand in hand (Video mix).MP3

0

9

Обратите внимание на то, что в windows скрипты на перле addhtkheader.pl, window.pl и freq2lfreq.pl работают с ошибками, конкретно, иногда добавляют мусор к данным.   В листинге hlist неправильные данные отображаются как огромные числа.
Варианты решения: подготовка данных в linux или написать их аналоги в др. языках программирования.

Скрипт для подготовки данных в Windows:

# ----------------------------------------------------------------- #
#           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.                                       #
# ----------------------------------------------------------------- #

# setting
SPEAKER=slt #@SPEAKER@
DATASET="cmu_us_arctic" #@DATASET@

# awk and perl
AWK=AWK
PERL='E:\MATLAB701\sys\perl\win32\bin\perl.exe' # PERL

SORT1='c:/usr/local/wbin/sort'

#echo ${PERL}

# SPTK commands
X2X=X2X
MGCEP=MGCEP
LPC2LSP=LPC2LSP
BCP='c:/usr/local/sptk/bin/bcp.exe'
AVERAGE=AVERAGE
MERGE=MERGE
VSTAT=VSTAT
NAN=NAN
MINMAX=MINMAX

# MATLAB and STRAIGHT
MATLAB=E:/MATLAB701/bin/win32/MATLAB.exe
STRAIGHT='C:/usr/local/STRAIGHTtrial/Resources/STRAIGHTV40pcode/STRAIGHTV40pcode'

# dumpfeats to extract utterance information
DUMPFEATS='C:/festival/bin/festival.exe --script c:/usr/local/festival/examples/dumpfeats.sh'

# SOX to convert raw audio to RIFF wav
SOX=SOX/sox
SOXOPTION="b 16" #SOXOPTION

# speech analysis conditions
SAMPFREQ2=48000 #@SAMPFREQ@   # Sampling frequency (48kHz)
SAMPFREQ=48000
FRAMESHIFT=240 #@FRAMESHIFT@ # Frame shift in point (80=16000*0.005, 240 = 48000 * 0.005)
FREQWARP=0.42 #@FREQWARP@   # frequency warping factor
GAMMA=0 #@GAMMA@      # pole/zero weight for mel-generalized cepstral (MGC) analysis
MGCORDER=34 #@MGCORDER@   # order of MGC analysis
LNGAIN=1 #@LNGAIN@     # use logarithmic gain rather than linear gain
LOWERF0=110 #@LOWERF0@    # lower limit for f0 extraction (Hz)
UPPERF0=280 #@UPPERF0@    # upper limit for f0 extraction (Hz)

FRAMELEN=400
FFTLEN=2048; #512

# windows for calculating delta features
MGCWIN=win/mgc.win
LF0WIN=win/lf0.win
BAPWIN=win/bap.win
NMGCWIN=3 #@NMGCWIN@
NLF0WIN=3 #@NLF0WIN@
NBAPWIN=3 #@NBAPWIN@

#all: analysis labels
#
#analysis: straight mgc lf0 bap cmp
#
#labels: label mlf list scp

#debug - window.pl и addhtkheader.pl неправильно пакуют данные.
#${PERL} scripts/window.pl 1 lf0/cmu_us_arctic_slt_a0001.lf0 win/lf0.win1 win/lf0.win2 win/lf0.win3 > cmp/tmp.lf0; \
#
#
#${PERL} scripts/window__.pl 1 lf0/cmu_us_arctic_slt_a0001.lf0 win/lf0.win1 win/lf0.win2 win/lf0.win3 >__lf0.txt ;
##> cmp/tmp.lf0; \
#exit;
#
#${PERL} scripts/window__.pl 1 mgc/cmu_us_arctic_slt_a0001.mgc win/lf0.win1 win/lf0.win2 win/lf0.win3 >__mgc.txt ;
#exit;
#

#${PERL} scripts/window__.pl 1 lf0/cmu_us_arctic_slt_a0001.lf0 win/lf0.win1 win/lf0.win2 win/lf0.win3 >__lf0.txt ;

#${PERL} scripts/_window.pl 1 lf0/cmu_us_arctic_slt_a0002.lf0 win/lf0.win1 win/lf0.win2 win/lf0.win3 >__lf0.txt ;

#${PERL} scripts/_window.pl 35 mgc/cmu_us_arctic_slt_a0002.mgc win/mgc.win1 win/mgc.win2 win/mgc.win3 >__mgc.txt ;
#exit;


            ############
    ##  start ##
            ############

straight:
# Extracting f0, aperiodicity, and spectra using STRAIGHT
mkdir -p wav sp ap f0
frameshift=`expr 1000 \* ${FRAMESHIFT} / ${SAMPFREQ}`; \
echo "path(path,'${STRAIGHT}');"                      >  scripts/extract.m; \
echo "prm.F0frameUpdateInterval=${frameshift};"      >> scripts/extract.m; \
echo "prm.F0searchUpperBound=${UPPERF0};"             >> scripts/extract.m; \
echo "prm.F0searchLowerBound=${LOWERF0};"             >> scripts/extract.m; \
echo "prm.spectralUpdateInterval=${frameshift};"     >> scripts/extract.m; \
echo ""                                               >> scripts/extract.m

for raw in raw/${DATASET}_${SPEAKER}_*.raw; do \
    base=`basename ${raw} .raw`; \
    echo ${base}; \
    min=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | head -n 1`; \
    max=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | tail -n 1`; \
    if [ -s ${raw} -a ${min} -gt -32768 -a ${max} -lt 32767 ]; then \
    wav=wav/${base}.wav; \
    f0=f0/${base}.f0; \
    ap=ap/${base}.ap; \
    sp=sp/${base}.sp; \
    echo -n "Converting ${raw} to ${wav} and generating MATLAB script..."; \
    ${SOX} -c 1 -s -${SOXOPTION} -t raw -r ${SAMPFREQ2} ${raw} -c 1 -s -${SOXOPTION} -t wav -r ${SAMPFREQ} ${wav}; \
    echo "fprintf(1,'Processing ${wav}\n');"     >> scripts/extract.m; \
    echo "[x,fs]=wavread('${wav}');"             >> scripts/extract.m; \
    echo "[f0, ap] = exstraightsource(x,fs,prm);" >> scripts/extract.m; \
    echo "[sp] = exstraightspec(x, f0, fs, prm);" >> scripts/extract.m; \

    echo "    for i=1:length(f0)"  >> scripts/extract.m; \
    echo "                  fprintf ('%d %f\n ',i, f0(i));" >> scripts/extract.m; \
    echo "    end;" >> scripts/extract.m; \

    echo "ap = ap';"                              >> scripts/extract.m; \
    echo "sp = sp';"                              >> scripts/extract.m; \
    echo "save '${f0}' f0 -ascii;"               >> scripts/extract.m; \
    echo "save '${ap}' ap -ascii;"               >> scripts/extract.m; \
    echo "save '${sp}' sp -ascii;"               >> scripts/extract.m; \
    echo ""                                       >> scripts/extract.m; \
    echo "done"; \
    fi;  \
done; \
echo "quit;"
copy  scripts/extract.m extract.m
${MATLAB} < extract.m
#rm -f scripts/extract.m
exit;

# ok
lf0:
# Converting f0 to log f0
mkdir -p lf0
for f0 in f0/${DATASET}_${SPEAKER}_*.f0; do \
    base=`basename ${f0} .f0`; \
    if [ -s ${f0} ]; then \
    echo "Converting F0 file ${f0} to log F0 file lf0/${base}.lf0"; \
    ${X2X} +af ${f0} > lf0/${base}.lf0; \
    #${X2X} +af ${f0} > tmp; \
    #${PERL} scripts/freq2lfreq.pl tmp > lf0/${base}.lf0; \
    if [ -n "`${NAN} lf0/${base}.lf0`" ]; then \
        echo " Failed to extract ${f0}"; \
        rm -f lf0/${base}.lf0; \
    fi; \
    fi; \
done
rm -f tmp

mgc:
# Extracting MGC or MGC-LSP coefficients from STRAIGHT spectra
mkdir -p mgc
for sp in sp/${DATASET}_${SPEAKER}_*.sp; do \
    base=`basename ${sp} .sp`; \
    #echo ${base}; \
    if [ -s ${sp} ]; then \
    if [ ${GAMMA} -eq 0 ]; then \
        echo "Extracting MGC coefficients from ${sp}"; \
        ${X2X} +af ${sp} | \
        ${MGCEP} -a ${FREQWARP} -m ${MGCORDER} -l 2048 -e 1.0E-08 -j 0 -f 0.0 -q 3 > mgc/${base}.mgc; \
    else \
        echo "Extracting MGC-LSP coefficients from ${sp}"; \
        SAMPKHZ=`expr ${SAMPFREQ} / 1000`; \
        if [ ${LNGAIN} -eq 1 ]; then \
        GAINOPT="-l"; \
        fi; \
        ${X2X} +af ${sp} | \
        ${MGCEP} -a ${FREQWARP} -c ${GAMMA} -m ${MGCORDER} -l 2048 -e 1.0E-08 -j 0 -f 0.0 -q 3 -o 4 | \
        ${LPC2LSP} -m ${MGCORDER} -s ${SAMPKHZ} ${GAINOPT} -n 2048 -p 8 -d 1.0E-08 > mgc/${base}.mgc; \
    fi; \
    if [ -n "`${NAN} mgc/${base}.mgc`" ]; then \
        echo " Failed to extract MGC coefficients from ${sp}"; \
        rm -f mgc/${base}.mgc; \
    fi; \
    fi; \
done

rm -f tmp

bap:
# #debug
#${X2X} +af ap/cmu_us_arctic_slt_a0001.ap | ${BCP} +f   -n 1024 -L   2 -s   0 -e    1 -S 0 | ${AVERAGE} -l   2 > bap01; \
#${X2X} +fa < bap01 > 111.txt
#exit;

# Converting aperiodicity to band aperiodicity
mkdir -p bap
for ap in ap/${DATASET}_${SPEAKER}_*.ap; do \
    base=`basename ${ap} .ap`; \
    if [ -s ${ap} ]; then \
    echo "Converting aperiodicity file ${ap} to band aperiodicity file bap/${base}.bap"; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   2 -s   0 -e    1 -S 0 | ${AVERAGE} -l   2 > bap01; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   3 -s   2 -e    4 -S 0 | ${AVERAGE} -l   3 > bap02; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   4 -s   5 -e    8 -S 0 | ${AVERAGE} -l   4 > bap03; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   4 -s   9 -e   12 -S 0 | ${AVERAGE} -l   4 > bap04; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   4 -s  13 -e   16 -S 0 | ${AVERAGE} -l   4 > bap05; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   5 -s  17 -e   21 -S 0 | ${AVERAGE} -l   5 > bap06; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   5 -s  22 -e   26 -S 0 | ${AVERAGE} -l   5 > bap07; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   6 -s  27 -e   32 -S 0 | ${AVERAGE} -l   6 > bap08; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   6 -s  33 -e   38 -S 0 | ${AVERAGE} -l   6 > bap09; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   7 -s  39 -e   45 -S 0 | ${AVERAGE} -l   7 > bap10; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   8 -s  46 -e   53 -S 0 | ${AVERAGE} -l   8 > bap11; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L   9 -s  54 -e   62 -S 0 | ${AVERAGE} -l   9 > bap12; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  10 -s  63 -e   72 -S 0 | ${AVERAGE} -l  10 > bap13; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  12 -s  73 -e   84 -S 0 | ${AVERAGE} -l  12 > bap14; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  14 -s  85 -e   98 -S 0 | ${AVERAGE} -l  14 > bap15; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  16 -s  99 -e  114 -S 0 | ${AVERAGE} -l  16 > bap16; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  19 -s 115 -e  133 -S 0 | ${AVERAGE} -l  19 > bap17; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  24 -s 134 -e  157 -S 0 | ${AVERAGE} -l  24 > bap18; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  29 -s 158 -e  186 -S 0 | ${AVERAGE} -l  29 > bap19; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  37 -s 187 -e  223 -S 0 | ${AVERAGE} -l  37 > bap20; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  49 -s 224 -e  272 -S 0 | ${AVERAGE} -l  49 > bap21; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  68 -s 273 -e  340 -S 0 | ${AVERAGE} -l  68 > bap22; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L  99 -s 341 -e  439 -S 0 | ${AVERAGE} -l  99 > bap23; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L 160 -s 440 -e  599 -S 0 | ${AVERAGE} -l 160 > bap24; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L 300 -s 600 -e  899 -S 0 | ${AVERAGE} -l 300 > bap25; \
    ${X2X} +af ${ap} | ${BCP} +f -n 1024 -L 125 -s 900 -e 1024 -S 0 | ${AVERAGE} -l 125 > bap26; \
    ${MERGE} -s  0 -l  1 -L 1 bap01 bap02 | \
    ${MERGE} -s  2 -l  2 -L 1 bap03 | \
    ${MERGE} -s  3 -l  3 -L 1 bap04 | \
    ${MERGE} -s  4 -l  4 -L 1 bap05 | \
    ${MERGE} -s  5 -l  5 -L 1 bap06 | \
    ${MERGE} -s  6 -l  6 -L 1 bap07 | \
    ${MERGE} -s  7 -l  7 -L 1 bap08 | \
    ${MERGE} -s  8 -l  8 -L 1 bap09 | \
    ${MERGE} -s  9 -l  9 -L 1 bap10 | \
    ${MERGE} -s 10 -l 10 -L 1 bap11 | \
    ${MERGE} -s 11 -l 11 -L 1 bap12 | \
    ${MERGE} -s 12 -l 12 -L 1 bap13 | \
    ${MERGE} -s 13 -l 13 -L 1 bap14 | \
    ${MERGE} -s 14 -l 14 -L 1 bap15 | \
    ${MERGE} -s 15 -l 15 -L 1 bap16 | \
    ${MERGE} -s 16 -l 16 -L 1 bap17 | \
    ${MERGE} -s 17 -l 17 -L 1 bap18 | \
    ${MERGE} -s 18 -l 18 -L 1 bap19 | \
    ${MERGE} -s 19 -l 19 -L 1 bap20 | \
    ${MERGE} -s 20 -l 20 -L 1 bap21 | \
    ${MERGE} -s 21 -l 21 -L 1 bap22 | \
    ${MERGE} -s 22 -l 22 -L 1 bap23 | \
    ${MERGE} -s 23 -l 23 -L 1 bap24 | \
    ${MERGE} -s 24 -l 24 -L 1 bap25 | \
    ${MERGE} -s 25 -l 25 -L 1 bap26 > bap/${base}.bap; \
    if [ -n "`${NAN} bap/${base}.bap`" ]; then \
        echo " Failed to extract aperiodicity coefficients ${ap}"; \
        rm -f bap/${base}.bap; \
    fi; \
    fi; \
done
rm -f bap{01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}

cmp:
# Composing training data files from mgc and lf0 files
mkdir -p cmp

for j in 1; do \
    MGCDIM=`expr ${MGCORDER} + 1`; \
    LF0DIM=1; \
    BAPDIM=26; \
    MGCWINDIM=`expr ${NMGCWIN} \* ${MGCDIM}`; \
    LF0WINDIM=`expr ${NLF0WIN} \* ${LF0DIM}`; \
    BAPWINDIM=`expr ${NBAPWIN} \* ${BAPDIM}`; \
    MGCLF0WINDIM=`expr ${MGCWINDIM} + ${LF0WINDIM}`; \
    BYTEPERFRAME=`expr 4 \* \( ${MGCWINDIM} + ${LF0WINDIM} + ${BAPWINDIM} \)`; \
    for mgc in mgc/${DATASET}_${SPEAKER}_*.mgc; do \
    base=`basename ${mgc} .mgc`; \
    MGCWINS=""; \
    LF0WINS=""; \
    BAPWINS=""; \
    if [ -s ${mgc} -a -s lf0/${base}.lf0 -a -s bap/${base}.bap ]; then \
        i=1; \
        echo "Composing training data for ${base}"; \
        while [ ${i} -le ${NMGCWIN} ]; do \
        eval MGCWINS=\"${MGCWINS} ${MGCWIN}${i}\"; \
        i=`expr ${i} + 1`; \
        done; \
        #exit; \
        #${PERL} scripts/window.pl ${MGCDIM} ${mgc} ${MGCWINS} > cmp/tmp.mgc; \
        scripts/window.exe ${MGCDIM} ${mgc} ${MGCWINS}  cmp/tmp.mgc; \
        i=1; \
        while [ ${i} -le ${NLF0WIN} ]; do \
        eval LF0WINS=\"${LF0WINS} ${LF0WIN}${i}\"; \
        i=`expr ${i} + 1`; \
        done; \
        #${PERL} scripts/window.pl ${LF0DIM} lf0/${base}.lf0 ${LF0WINS} > cmp/tmp.lf0; \
        scripts/window.exe ${LF0DIM} lf0/${base}.lf0 ${LF0WINS}  cmp/tmp.lf0; \
        i=1; \
        while [ ${i} -le ${NBAPWIN} ]; do \
        eval BAPWINS=\"${BAPWINS} ${BAPWIN}${i}\"; \
        i=`expr ${i} + 1`; \
        done; \
        #${PERL} scripts/window.pl ${BAPDIM} bap/${base}.bap ${BAPWINS} > cmp/tmp.bap; \
        scripts/window.exe ${BAPDIM} bap/${base}.bap ${BAPWINS}  cmp/tmp.bap; \
${MERGE} +f -s 0 -l ${LF0WINDIM} -L ${MGCWINDIM}     cmp/tmp.mgc     < cmp/tmp.lf0 > cmp/tmp.mgc+lf0; \
${MERGE} +f -s 0 -l ${BAPWINDIM} -L ${MGCLF0WINDIM}  cmp/tmp.mgc+lf0 < cmp/tmp.bap > cmp/tmp.cmp; \
${PERL} scripts/addhtkheader.pl ${SAMPFREQ} ${FRAMESHIFT} ${BYTEPERFRAME} 9 cmp/tmp.cmp > cmp/${base}.cmp0; \
scripts/addhtkheader.exe ${SAMPFREQ} ${FRAMESHIFT}  ${BYTEPERFRAME} 9 cmp/tmp.cmp  cmp/${base}.cmp; \
fi; \
    #exit;
    done; \

done
rm -f cmp/tmp*

label:
# Extracting monophone and fullcontext labels from utterance files
mkdir -p labels/mono
mkdir -p labels/full

for utt in utts/${DATASET}_${SPEAKER}_*.utt; do \
    base=`basename ${utt} .utt`; \
    if [ -s ${utt} ]; then \
    ${DUMPFEATS}    -eval     scripts/extra_feats.scm \
        -relation Segment \
        -feats    scripts/label.feats \
        -output   tmp \
        ${utt}; \
    fi; \
    ${AWK} -f scripts/label-full.awk tmp > labels/full/${base}.lab; \
    ${AWK} -f scripts/label-mono.awk tmp > labels/mono/${base}.lab; \
done
rm -f tmp

mlf:
# Generating monophone and fullcontext Master Label Files (MLF}
echo "#!MLF!#" > labels/mono.mlf
echo "\"*/${DATASET}_${SPEAKER}_*.lab\" -> \"PWD/data/labels/mono\"" >> labels/mono.mlf

echo "#!MLF!#" > labels/full.mlf
echo "\"*/${DATASET}_${SPEAKER}_*.lab\" -> \"PWD/data/labels/full\"" >> labels/full.mlf

list:
# Generating a fullcontext model list file
mkdir -p lists

rm -f tmp
for lab in labels/full/${DATASET}_${SPEAKER}_*.lab; do \
    if [ -s ${lab} -a -s labels/mono/`basename ${lab}` -a -s cmp/`basename ${lab} .lab`.cmp ]; then \
    c:/usr/local/wbin/sed -e "s/.* //g" ${lab} >> tmp; \
    fi \
done
c:/usr/local/wbin/sort -u tmp > lists/full.list
rm -f tmp

# Generating a fullcontext model list file which includes unseen models
rm -f tmp
cat lists/full.list > tmp
for lab in labels/gen/*.lab; do \
    c:/usr/local/wbin/sed -e "s/.* //g" ${lab} >> c:/usr/local/wbin/tmp; \
done
# иначе ошибка не найден файл tmp000000...
cd c:/usr/local/wbin/
c:/usr/local/wbin/sort -u c:/usr/local/wbin/tmp > full_all.list
cd .
cp c:/usr/local/wbin/full_all.list lists/full_all.list
rm -f c:/usr/local/wbin/tmp

# Generating a monophone list file
rm -f tmp
for lab in labels/mono/${DATASET}_${SPEAKER}_*.lab; do \
    if [ -s ${lab} -a -s labels/full/`basename ${lab}` -a -s cmp/`basename ${lab} .lab`.cmp ]; then \
    c:/usr/local/wbin/sed -e "s/.* //g" ${lab} >> tmp; \
    fi \
done
c:/usr/local/wbin/sort -u tmp > lists/mono.list
rm -f tmp

#scp:
# Generating a trainig data script
mkdir -p scp

rm -f scp/train.scp

echo "Generating a trainig data script";
for cmp in cmp/${DATASET}_${SPEAKER}_*.cmp; do \
    if [ -s ${cmp} -a -s labels/mono/`basename ${cmp} .cmp`.lab -a -s labels/full/`basename ${cmp} .cmp`.lab ]; then \
    echo "./data/"${cmp} >> scp/train.scp; \
    fi; \
done; \
    echo "Ok. Generating a trainig data script"; \

# Generating a generation label script
rm -f scp/gen.scp
echo "Generating a generation label script"; \
for lab in labels/gen/*.lab; do \
    echo "./data/"${lab} >> scp/gen.scp; \
done; \
    echo "Ok. Generating a generation label script"; \

clean: clean-straight clean-mgc clean-lf0 clean-bap clean-cmp clean-label clean-mlf clean-list clean-scp

clean-straight: clean-wav clean-sp clean-f0 clean-ap

clean-wav:
rm -rf wav

clean-sp:
rm -rf sp

clean-f0:
rm -rf f0

clean-ap:
rm -rf ap

clean-mgc:
rm -rf mgc

clean-lf0:
rm -rf lf0

clean-bap:
rm -rf bap

clean-cmp:
rm -rf cmp

clean-label:
rm -rf labels/mono
rm -rf labels/full

clean-mlf:
rm -f labels/*.mlf

clean-list:
rm -rf lists

clean-scp:
rm -rf scp

distclean: clean
rm -f Makefile

#.PHONY: all analysis labels mgc lf0 bap f0 wav sp ap cmp label mlf list scp clean

0

10

Пример addhtkheader.cpp на VC++ 6.0

// addhtkheader.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

char inf[] = "tmp.cmp";
char fout[] = "1.cmp";

char *infile;
char *outfile;

typedef struct HDR
{
DWORD nframe;
DWORD frameshift;
WORD byte;
WORD type;
} HDR;

int main(int argc, char* argv[])
{

HANDLE hIn, hOut;
           DWORD RW;
HDR hdr;
BYTE *inBuf;

if ( argc < 6 ) {
   printf ("Use:    addhtkheader.exe sampling_rate frame_shift byte_per_frame HTK_feature_type infile outfile\n");
   exit(0);
}

//unsigned int samprate   = 48000; //atoi(argv[1]);

//hdr.nframe=0;
//hdr.frameshift = 240; //atoi(argv[2]);
//hdr.byte = 432; //atoi(argv[3]);
//hdr.type = 9; //atoi(argv[4]);

           unsigned int samprate   = atoi(argv[1]);
hdr.nframe=0;
hdr.frameshift = atoi(argv[2]);
hdr.byte = atoi(argv[3]);
hdr.type = atoi(argv[4]);

infile     = argv[5];
outfile = argv[6];
ULONG size=0;


    hIn = CreateFile (infile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hIn == INVALID_HANDLE_VALUE)
       return FALSE;

size = GetFileSize(hIn,NULL);

inBuf = new BYTE [size];
ReadFile (hIn, inBuf, size, &RW, NULL);
CloseHandle(hIn);

    //printf ("size = %u", size);
hdr.nframe = size / hdr.byte;

    //frame shift in long
hdr.frameshift = 10000000 * hdr.frameshift / samprate;

hOut = CreateFile (outfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (hOut == INVALID_HANDLE_VALUE)
    return 0;

// Запиcать заголовок
WriteFile (hOut, &hdr, 12, &RW, NULL);

//Дописать файл
WriteFile (hOut, inBuf, size, &RW, NULL);

CloseHandle(hOut);

return 0;
}

0


Вы здесь » Форум ReidS Soft » Flite+hts_engine » Demo scripts with MGE option for Windows