<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3672648</guid>
        <pubDate>Thu, 02 Jun 2016 16:21:31 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3672648</link>
        <description><![CDATA[nsh: английская]]></description>
        <author>nsh</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3672525</guid>
        <pubDate>Wed, 01 Jun 2016 07:34:52 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3672525</link>
        <description><![CDATA[webcoder88: <strong class='tag-b'>nsh</strong> <br>
Спасибо. Это руссская или английская база?]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3662046</guid>
        <pubDate>Mon, 28 Mar 2016 14:29:53 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3662046</link>
        <description><![CDATA[nsh: <strong class='tag-b'>webcoder88</strong>, я Вам выложил <a class='tag-url' href='http://alphacephei.com/test/tts/db-tts.zip' target='_blank'>http://alphacephei.com/test/tts/db-tts.zip</a> базу sense&amp;sensibility 10 часов речи (1Gb размер), попробуйте из неё лучше натренировать голос, гораздо лучше должен быть по качеству.]]></description>
        <author>nsh</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3661913</guid>
        <pubDate>Sun, 27 Mar 2016 07:12:26 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3661913</link>
        <description><![CDATA[webcoder88: Обновление для голоса SLT  голосового движка RHVoice доступно на <a class='tag-url' href='https://github.com/webcoder88/arctic_slt_voice/' target='_blank'>https://github.com/webcoder88/arctic_slt_voice/</a><br>
После обработки значений means и variances в lf0.pdf голос стал ближе к оригиналу.]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3657758</guid>
        <pubDate>Mon, 07 Mar 2016 02:15:53 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3657758</link>
        <description><![CDATA[webcoder88: Исходники и архив проекта hts_engine для отладки доступен на <a class='tag-url' href='https://github.com/webcoder88/HTS_Engine/' target='_blank'>https://github.com/webcoder88/HTS_Engine/</a>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3652289</guid>
        <pubDate>Wed, 10 Feb 2016 08:02:54 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3652289</link>
        <description><![CDATA[webcoder88: Треск в hts_engine.exe убирается путем увеличения аудиобуфера с 1600 до 4800 байт или больше. Размер буфера задается ключем -z (-z 4800)<br>В flite+hts_engine размер аудиобуфера задается и меняется в исходнике. Требуется правка и перекомпиляция.]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3650726</guid>
        <pubDate>Tue, 02 Feb 2016 12:33:43 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3650726</link>
        <description><![CDATA[webcoder88: Треск исчезает при снижении параметра частоты дескритизациидо 32000 или 16000 (кратно изменяется параметр фпериод 160 или 80), но основной тон голоса изменяется.<br>Просьба протестировать на своих системах и отписать результаты. Пока выход один - использовать обучающие файлы с частотой дискр 16000 (32000)Гц.<br><br>hts_engine.exe -td elena/tree-dur.inf -tf elena/tree-lf0.inf -tm elena/tree-mgc.inf -md elena/dur.pdf -mf elena/lf0.pdf -mm elena/mgc.pdf -dm elena/mgc.win1 -dm elena/mgc.win2 -dm elena/mgc.win3 -df elena/lf0.win1 -df elena/lf0.win2 -df elena/lf0.win3 -s 32000 -p 160 -a 0.42 -g 0 -l -b 0 -ow elena_label.wav -ot elena_label.trace -om __label.sp -of __label.f0 __label.txt]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3650025</guid>
        <pubDate>Fri, 29 Jan 2016 06:29:50 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3650025</link>
        <description><![CDATA[webcoder88: Ольга Яковлева писала, что модель длительности не реализована.<br>
Файл меток, сгенерированный в RHVoice 0.4. Искажения устраняются  в коде RHVoice  путем корректировки длительности lf0<br>
См функцию static void fix_f0(cst_utterance *u,HTS_Engine *e) {}<br>
<br>
С др. стороны, я тренировал голос Елены в HTS, смысл слов улавливается с трудом, но модель длительности правильная. :)<br>
<span class="b-attach" data-size="3328" data-hits="221" data-attach-id="48645" data-attach-post-id="3650025">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3650025&amp;attach_id=48645' title='Скачать файл' target='_blank'>lab.rar</a> (, : 221)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-01-29T06:35:59+00:00">29.01.16, 06:35</time></span></span><br>
командные файлы, нормальный темп<br>
hts_engine.exe -td elena/tree-dur.inf -tf elena/tree-lf0.inf -tm elena/tree-mgc.inf  -md elena/dur.pdf -mf elena/lf0.pdf -mm elena/mgc.pdf  -dm elena/mgc.win1 -dm elena/mgc.win2 -dm elena/mgc.win3 -df elena/lf0.win1 -df elena/lf0.win2 -df elena/lf0.win3 -s 16000 -p 80 -a 0.42 -g 0 -l -b 0  -ow elena_label.wav -ot elena_label.trace    -om __label.sp -of __label.f0   __label.txt<br>
<br>
командные файлы, замедленный темп (у диктора немного язык заплетается)<br>
hts_engine.exe -td elena/tree-dur.inf -tf elena/tree-lf0.inf -tm elena/tree-mgc.inf  -md elena/dur.pdf -mf elena/lf0.pdf -mm elena/mgc.pdf  -dm elena/mgc.win1 -dm elena/mgc.win2 -dm elena/mgc.win3 -df elena/lf0.win1 -df elena/lf0.win2 -df elena/lf0.win3 -s 16000 -p 160 -a 0.42 -g 0 -l -b 0  -ow elena_label.wav -ot elena_label.trace    -om __label.sp -of __label.f0   __label.txt <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-01-29T06:40:53+00:00">29.01.16, 06:40</time></span></span><br>
В моем тренированном голосе HTS-demo_CMU-ARCTIC-SLT во время синтеза присутствует посторонний шума в виде треска. При воспроизведении сохраненного звукового файла треск не слышен.  Когда фильтровать сигнал? Тренировочные данные или кепстры, сохраненные в базе голоса? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-01-29T06:47:48+00:00">29.01.16, 06:47</time></span></span><br>
Тренированный голос. При синтезе обучающего предложения, полученная речь очень похожа на оригинал. Остается убрать треск.<br>
<a class='tag-url' href='https://www.sendspace.com/file/qer3vn' target='_blank'>https://www.sendspace.com/file/qer3vn</a>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3645653</guid>
        <pubDate>Wed, 06 Jan 2016 11:42:43 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3645653</link>
        <description><![CDATA[webcoder88: Команды для создания файла основного логарифма тона и спектра из любого файла с частотой дискретизации 48кГц.<br>
<br>
Создание файла логарифма основного тона:<br>
<br>
x2x +sf &lt; cmu_us_arctic_slt_a0001.raw &gt; data.float<br>
pitch -a 0 -s 48 -p 240 -L 60 -H 240 -o 2 data.float &gt; __label2.f0<br>
pause<br>
<br>
Создание файла мел-кепстральных коэффициентов спектра:<br>
x2x +sf &lt; cmu_us_arctic_slt_a0001.raw | frame -l 512 -p 240 | window -l 512 -L 512 | mcep -l 512 -m 24 -a 0.52 &gt; __label2.sp<br>
pause<br>
<br>
Для команды вуказанном формате основная тонкость состоит в следующем: для правильного синтеза речи в программе hts_vokoder параметр -l должен быть равен параметру -L.<br>
Значение должно быть кратно 256 и может быть равно n*256. Если указать разные парамеры, то появятся ошибки. <br>
В некоторых случаях утилиты sptk укажут на необходимость указывать параметр -e, после чего можно указать -l 1200 и -L 2048<br>
В тренировочных скриптах hts  значение пар-ра -e равно 1.0E-08.<br>
<br>
Если параметр -m равен 25, то после генерации файла трассы размер вектора становится равен 26-ти, хотя речь воспроизводится правильно. Поэтому нужно указывать значение, на единицу меньше. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-01-06T12:12:23+00:00">06.01.16, 12:12</time></span></span><br>
x2x +sf &lt; cmu_us_arctic_slt_a0001.raw | frame -l 1200 -p 240 | window -l 1200 -L 2048  | mcep -l 2048 -m 24 -a 0.52  &gt; __label2.sp<br>
pause<br>
<br>
или<br>
<br>
x2x +sf &lt; cmu_us_arctic_slt_a0001.raw | frame -l 1200 -p 240 | window -l 1200 -L 2048 -w 1  -n 1 | mcep -l 2048 -m 24 -a 0.52 -e 1.0E-08 &gt; __label2.sp<br>
pause<br>
<br>
воспроизведение<br>
hts_vocoder.exe  -s 48000 -p 240 -a 0.52 -g 0 -l -b 0  -or cmu_us_arctic_slt_a0001_.raw -jm __label2.sp -jf __label2.f0<br>
 <br>
Тренировочный скрипт для bash.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">mgc:</div><div class="code_line"># Extracting MGC or MGC-LSP coefficients from raw audio</div><div class="code_line">mkdir -p mgc</div><div class="code_line">for raw in raw/cmu_us_arctic_slt_*.raw; do \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;base=`basename ${raw} .raw`; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;min=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | head -n 1`; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;max=`${X2X} +sf ${raw} | ${MINMAX} | ${X2X} +fa | tail -n 1`; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if [ -s ${raw} -a ${min} -gt -32768 -a ${max} -lt 32767 ]; then \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;${X2X} +sf ${raw} &#62; tmp; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if [ 0 &nbsp; &nbsp; &nbsp; -eq 0 ]; then \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;echo &quot;Extracting MGC coefficients from ${raw}&quot;; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/frame -l ${FRAMELEN} &nbsp; &nbsp;-p ${FRAMESHIFT} &nbsp;tmp | \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/window -l ${FRAMELEN} &nbsp; &nbsp;-L ${FFTLEN} &nbsp; &nbsp; &nbsp;-w 1 &nbsp;-n 1 &nbsp; | \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/mcep -a ${FREQWARP} &nbsp; &nbsp;-m ${MGCORDER} &nbsp; &nbsp;-l ${FFTLEN} &nbsp; &nbsp; &nbsp;-e 1.0E-08 &#62; mgc/${base}.mgc; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;echo &quot;Extracting MGC-LSP coefficients from ${raw}&quot;; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SAMPKHZ=`expr ${SAMPFREQ} &nbsp; &nbsp;/ 1000`; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if [ 1 &nbsp; &nbsp; &nbsp;-eq 1 ]; then \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GAINOPT=&quot;-l&quot;; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fi; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/frame -l ${FRAMELEN} &nbsp; &nbsp;-p ${FRAMESHIFT} &nbsp;tmp | \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/window -l ${FRAMELEN} &nbsp; &nbsp;-L ${FFTLEN} &nbsp; &nbsp; &nbsp;-w 1 &nbsp;-n 1 &nbsp; | \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/mcep -a ${FREQWARP} &nbsp; &nbsp;-c 0 &nbsp; &nbsp; &nbsp; -m ${MGCORDER} &nbsp; &nbsp;-l ${FFTLEN} &nbsp; &nbsp; &nbsp;-e 1.0E-08 -o 4 | \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:/usr/local/SPTK/bin/lpc2lsp -m ${MGCORDER} &nbsp; &nbsp;-s ${SAMPKHZ} ${GAINOPT} -n ${FFTLEN} &nbsp; &nbsp; &nbsp;-p 8 -d 1.0E-08 &#62; mgc/${base}.mgc; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fi; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if [ -n &quot;`c:/usr/local/SPTK/bin/nan mgc/${base}.mgc`&quot; ]; then \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;echo &quot; Failed to extract MGC coefficients from ${raw}&quot;; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rm -f mgc/${base}.mgc; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fi; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fi; \</div><div class="code_line">&nbsp;&nbsp; &nbsp;done</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3644041</guid>
        <pubDate>Fri, 25 Dec 2015 07:57:07 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3644041</link>
        <description><![CDATA[webcoder88: Вы можете сравнить синтезированную речь в sptk и hts по одинаковому спектру и основному тону. <br>
В архиве hts_vocoder.exe, файлы основного тона и спектра для cmu_us_arctic_slt_a0001.raw. <br>
При замене параметрических файлов необходимо учитывать значения частоты дискретизации (48) и период фрейма (240) (или 16 и 80).<br>
<span class="b-attach" data-size="99982" data-hits="236" data-attach-id="48251" data-attach-post-id="3644041">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3644041&amp;attach_id=48251' title='Скачать файл' target='_blank'>hts_vokoder.rar</a> (, : 236)
		</span>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3644010</guid>
        <pubDate>Fri, 25 Dec 2015 01:59:37 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3644010</link>
        <description><![CDATA[webcoder88: Несколько слов о методах восстановления правильной работы pitch.exe.<br>
На вход вокодера hts необходимо подавать логарифм основного тона, сформированный по алгоритму RAPTOR, т.е использовать ключ -a с параметром 0(ноль).<br>
Данный алгоритм реализуется кодом из из файла SPTK&#092;pitch&#092;snack&#092;jkGetF0.c.<br>
Вывод расчитанных  значений осуществляется в стандартное устройство вывода stdout и реализован следующим образом:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">// jkGetF0.c</div><div class="code_line">&nbsp;&nbsp;for (i = 0; i &#60; fnum; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;switch (otype) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case 1: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* f0 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case 2: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* log(f0) */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (tmp[i] != 0.0 ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = (float)log(tmp[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = -1.0E10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;default: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* pitch */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (tmp[i] != 0.0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = sample_freq / tmp[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
 <br>
Я достаточно быстро нашел неправильно записывемое значение для raw-файла, генерируемого по моим меткам. Это значение с индексом 89.<br>
Неправильное значение записывет функция fwrite();<br>
<br>
Для восстановления правильной  работы можно использовать следующий вариант:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// jkGetF0.c</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;hOut = GetStdHandle (STD_OUTPUT_HANDLE &nbsp;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (hOut == INVALID_HANDLE_VALUE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for (i = 0; i &#60; fnum; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;switch (otype) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case 1: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* f0 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WriteFile (hOut, tmp + i, sizeof(float), &amp;RW, NULL); //ok</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case 2: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* log(f0) */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (tmp[i] != 0.0 ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//printf(&quot;%f \n&quot;, (float)tmp[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = (float)log(tmp[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//printf(&quot; %f \n&quot;, (float)tmp[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = -1.0E10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WriteFile (hOut, tmp + i, sizeof(float), &amp;RW, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;default: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* pitch */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (tmp[i] != 0.0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp[i] = sample_freq / tmp[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//fwrite(tmp + i, sizeof(float), 1, stdout); // иногда записывает 5 байтов вместо 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WriteFile (hOut, tmp + i, sizeof(float), &amp;RW, NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
<br>
<br>
Второй алгоритм из каталога swipe, реализуемый ключом -а 1, выполняет правильный вывод, тк использует др. функцию fwritef():<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//swipe.c</div><div class="code_line">#else</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (i = 0; i &#60; p.x; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; switch(otype) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 1: &nbsp; &nbsp; &nbsp;/* f0 */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fwritef(&amp;p.v[i], sizeof(p.v[i]), 1, stdout);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case 2: &nbsp; &nbsp; &nbsp;/* log(f0) */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (p.v[i] != 0.0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p.v[i] = log(p.v[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p.v[i] = -1.0E10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fwritef(&amp;p.v[i], sizeof(p.v[i]), 1, stdout);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;default: &nbsp; &nbsp; /* pitch */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (p.v[i] != 0.0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p.v[i] = samplerate / p.v[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fwritef(&amp;p.v[i], sizeof(p.v[i]), 1, stdout);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;freev(p);</div><div class="code_line">#endif</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-25T02:03:43+00:00">25.12.15, 02:03</time></span></span><br>
В начале файла jkGetF0.c добавляется 1 заголовочный файл и объявляются новые переменные:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;windows.h&#62;</div><div class="code_line">//...</div><div class="code_line">&nbsp;</div><div class="code_line">DWORD RW;</div><div class="code_line">HANDLE hOut;</div><div class="code_line">&nbsp;</div><div class="code_line">//перед этим кодом:</div><div class="code_line">#if 0</div><div class="code_line">int</div><div class="code_line">Get_f0(Sound *sound, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])</div><div class="code_line">{</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-25T02:13:34+00:00">25.12.15, 02:13</time></span></span><br>
С генерацией спектра в SPTK предлагаю разобраться самостоятельно.  Советую запастись терпением. :) Опубликую в следующем году.]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3643591</guid>
        <pubDate>Wed, 23 Dec 2015 05:26:10 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3643591</link>
        <description><![CDATA[webcoder88: Если вы знакомы с пакетом SPTK, то можно поэкспериментировать с частотой дискретизации и др. параметрами и оценить качество синтезированной речи.   <br>
Исходный файлы:<br>
 elena_label - любой звуковой файл в формате raw c частотой дискретизации 16..48кГц.<br>
__label2.f0 - лог основного тона.<br>
__label2.sp - кепстры от спектра.<br>
<br>
Дополнительная информация содержится в документации  SPTK:  SPTKref-3.7.pdf и  SPTKexamples-3.7.pdf.<br>
<br>
   Создание файла параметров data.pitch. При некоторых условиях - это файл, аналогичный __label2.f0.<br>
<br>
x2x +sf elena_label.raw | pitch -a 0 -s 16 -p 80 -L 60 -H 240 -o 1 &gt; data.pitch<br>
<br>
   Синтез и воспроизведение синтезированной речи:<br>
<br>
sopr -m 0.4 data.pitch | excite -p 80 | mlsadf -m 24 -a 0.42 -p 80 __label2.sp | tee data.mcep.high.syn | da +f -s 16<br>
<br>
   или так:<br>
sopr -m 0.4 -EXP __label2.f0 | excite -p 80 | mlsadf -m 24 -a 0.42 -p 80 __label2.sp | tee data.mcep.high.syn | da +f -s 16<br>
<br>
<br>
   c понижением тона (sopr -m2)<br>
sopr -m 2 data.pitch | excite -p 80 | mlsadf -m 24 -a 0.42 -p 80 __label2.sp | tee data.mcep.high.syn | da +f -s 16<br>
<br>
<br>
Преобразование формата с плавающей запятой в формат short (raw):<br>
<br>
x2x +fs &lt; data.mcep.high.syn &gt; elena_label_syn_.raw<br>
<br>
<br>
Качество синтезированной речи отличается от речи, получаемой на выходе вокодера hts (__label2.f0 + __label2.f0, без постфильтрации, тк размер файла с коэффициентами фильтра равен нулю). <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-23T05:41:14+00:00">23.12.15, 05:41</time></span></span><br>
Если вы будете использовать файл, сгенерированный по моим меткам, то следует учесть, что размер __label2.f0 при любых знач. ключа -a утилиты pitch должен быть равен 996 байт.<br>
Утилита pitch SPTK 3.7, собранная в Windows работает неправильно и выдает файлы со следующим размером  (-а 0...2)996, 1000, 997 байт.]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641923</guid>
        <pubDate>Sun, 13 Dec 2015 02:07:44 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641923</link>
        <description><![CDATA[webcoder88: Статьи на русском языке:<br>
<br>
<a class='tag-url' href='http://aprodeus.narod.ru/Teaching/AIS/AIS_Lect_dig_speech2.zip' target='_blank'>Вокодеры</a><br>
<br>
<a class='tag-url' href='http://www.3dnews.ru/170024' target='_blank'>Вокодеры и синтезаторы речи</a><br>
<br>
<a class='tag-url' href='http://communications.narod.ru/sbornic/vocoder/mod-voi.htm' target='_blank'>Одновременная передача голоса и данных через канал тональной частоты</a><br>
<br>
<a class='tag-url' href='http://aprodeus.narod.ru/teaching.htm' target='_blank'>Курсы лекций</a>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641785</guid>
        <pubDate>Sat, 12 Dec 2015 09:41:58 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641785</link>
        <description><![CDATA[nsh: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Ради интереса, я изучаю эту тему уже несколько месяцев. Основная задача - улучшение качества синтезированного голоса.<br>
</div></div><br>
<br>
Для улучшения синтезированного голоса нужно использовать больший объём тренировочных данных, более точное моделирование кепстра с помощью нейронных сетей (недоступно в open source пока) и более точные вокодеры, например, mixed excitation (реализовано в openmary), STRAIGHT (поддерживается в hts, но под плохой лицензией), aHM (реализовано в covarep).<br>
<br>
Для понимания работы читать код не очень полезно, лучше прочесть следующие статьи.<br>
<br>
<a class='tag-url' href='http://www.cstr.ed.ac.uk/downloads/publications/2013/ssw8_OS4-3_Hu.pdf' target='_blank'>An experimental comparison of multiple vocoder types</a><br>
<br>
<a class='tag-url' href='https://wiki.inf.ed.ac.uk/twiki/pub/CSTR/Speak08To09/STRAIGHT-original.pdf' target='_blank'>Restructuring speech representations using a pitch-adaptivetime±frequency smoothing and an instantaneous-frequency- based F0 extraction: Possible role of a repetitive structure in sounds</a><br>
<br>
<a class='tag-url' href='http://www.sp.nitech.ac.jp/~tokuda/selected_pub/pdf/conference/tokuda_icslp1994.pdf' target='_blank'>Mel-generalized cepstral analysis - a unified approach to speech spectral estimation</a>]]></description>
        <author>nsh</author>
        <category>Речевые Технологии</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641771</guid>
        <pubDate>Sat, 12 Dec 2015 08:36:54 +0000</pubDate>
        <title>Синтез речи в hts_engine.exe 1.05</title>
        <link>https://forum.sources.ru/index.php?showtopic=407233&amp;view=findpost&amp;p=3641771</link>
        <description><![CDATA[webcoder88: Утилита hts_engine.exe 1.05 или 1.06 синтезирует речь, используя файл меток и файлы голоса (alan, elena, anna). В ранних версиях ТТС RHVoice, например,RHVoice 0.4-a2 использовались те же файлы голоса. Исходники утилиты, а также парсера pdf-файлов можно найти в Интернете. <br>
Ссылка на парсер HTS_PDFparser 1 A parser for hts_engine_API model pdf file  <a class='tag-url' href='https://github.com/naxingyu/HTS_PDFparser' target='_blank'>https://github.com/naxingyu/HTS_PDFparser</a><br>
<br>
Я пытаюсь разобраться в алгоритме синтеза речи по базе данных голоса. Если со структурой файлов базы данных голса более-менее все понятно, то алгоритм восстановления речи по меткам и кепстрам из базы данных требует хорошего знания принципов работы вокодера. <br>
Необходимо создать программу для восстановления звукового корпуса произвольного вектора базы данных и его вывода в виде графика.<br>
Ради интереса, я изучаю эту тему уже несколько месяцев. Основная задача - улучшение качества синтезированного голоса.<br>
Приглашаю всех заинтересованных в этой темы.<br>
<br>
Пока понятно  следующее:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HTS_engine.с</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_create_pstream(&amp;engine); &nbsp;/* generate speech parameter vector sequence */ создать последовательность параметрических векторов речи</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_create_gstream(&amp;engine); &nbsp;/* synthesize speech */ &nbsp; &nbsp; &nbsp; синтезировать речь</div><div class="code_line">&nbsp;</div><div class="code_line">if (wavfp)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;HTS_Engine_save_riff(&amp;engine, wavfp); // сохранить синтезированную речь в файл</div><div class="code_line">&nbsp;</div><div class="code_line">HTS_PSTREAM.C</div><div class="code_line">/* HTS_PStreamSet_create: parameter generation using GV weight */ &nbsp;создание параметрических векторов</div><div class="code_line">HTS_Boolean HTS_PStreamSet_create(HTS_PStreamSet * pss, HTS_SStreamSet * sss, double *msd_threshold, double *gv_weight)</div><div class="code_line">{</div><div class="code_line">...</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">HTS_GSTREAM.C</div><div class="code_line">/* HTS_GStreamSet_create: generate speech */ &nbsp; &nbsp; &nbsp;генерация и вывод речи</div><div class="code_line">/* (stream[0] == spectrum &amp;&amp; stream[1] == lf0) */</div><div class="code_line">HTS_Boolean HTS_GStreamSet_create(HTS_GStreamSet * gss, HTS_PStreamSet * pss, int stage, HTS_Boolean use_log_gain, int sampling_rate, int fperiod, double alpha, double beta, HTS_Boolean * stop, double volume, HTS_Audio * audio)</div><div class="code_line">{</div><div class="code_line">...</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Схему вокодера можно найти в статье Е.Е. Федоров, И.А. Шевцова, Численное исследование шипящих согласных звуков <br>
<br>
Во вложении архив с метками и командный файл.<br>
<span class="b-attach" data-size="794" data-hits="246" data-attach-id="48089" data-attach-post-id="3641771">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3641771&amp;attach_id=48089' title='Скачать файл' target='_blank'>lab.rar</a> (, : 246)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-12T09:11:24+00:00">12.12.15, 09:11</time></span></span><br>
Ниже приводится формат заголовка pdf-файла, полученный на основе информации из HTS_Model_load_pdf<br>
HTS_Model_load_pdf:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HEADER, Header_Size = 16</div><div class="code_line">+0: /* MSD flag */</div><div class="code_line">&nbsp;&nbsp; &nbsp;i=0 при msd_flag = FALSE</div><div class="code_line">&nbsp;&nbsp; &nbsp;i=1 при msd_flag = TRUE</div><div class="code_line">&nbsp;</div><div class="code_line">+4: /* stream size */</div><div class="code_line">&nbsp;</div><div class="code_line">+8: /* vector size */</div><div class="code_line">&nbsp;</div><div class="code_line">+12:/* the number of pdfs */</div></ol></div></div></div></div><br>
<br>
далее    /* means and variances */<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">elena</div><div class="code_line">+0: 0</div><div class="code_line">+4: 1</div><div class="code_line">+8: 75</div><div class="code_line">+12: 273</div></ol></div></div></div></div><br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-12T09:12:36+00:00">12.12.15, 09:12</time></span></span><br>
Сохранение меток в файл для последующего использования в hts_engine.exe<br>
<br>
Метки создаются в файле flite+hts_engine-1.02&#092;lib&#092;flite_hts_engine.c функцией  void Flite_HTS_Engine_synthesis(Flite_HTS_Engine * f, char *txt, FILE * wavfp).<br>
<br>
Для сохранения в файл необходимо создать дескриптор открытого файла FILE * labfp в flite_hts_engine.c и передать в эту функцию. <br>
<br>
Ниже приведен код измененной функции. Асемблерная вставка используется для разъименовывания указателей. Мне так понятнее.<br>
  <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">/* Flite_HTS_Engine_synthesis: speech synthesis */</div><div class="code_line">void Flite_HTS_Engine_synthesis(Flite_HTS_Engine * f, char *txt, FILE * wavfp, FILE * labfp)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; int i;</div><div class="code_line">&nbsp;&nbsp; cst_voice *v = NULL;</div><div class="code_line">&nbsp;&nbsp; cst_utterance *u = NULL;</div><div class="code_line">&nbsp;&nbsp; cst_item *s = NULL;</div><div class="code_line">&nbsp;&nbsp; char **label_data = NULL;</div><div class="code_line">&nbsp;&nbsp; int label_size = 0;</div><div class="code_line">char *label_d2=NULL;</div><div class="code_line">&nbsp;</div><div class="code_line">char szln[]={0x0a,0}; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /* text analysis part */</div><div class="code_line">&nbsp;&nbsp; v = REGISTER_VOX(NULL);</div><div class="code_line">&nbsp;&nbsp; if (v == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; u = flite_synth_text(txt, v);</div><div class="code_line">&nbsp;&nbsp; if (u == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; for (s = relation_head(utt_relation(u, &quot;Segment&quot;)); s; s = item_next(s))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;label_size++;</div><div class="code_line">&nbsp;&nbsp; if (label_size &#60;= 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; label_data = (char **) calloc(label_size, sizeof(char *));</div><div class="code_line">&nbsp;&nbsp; for (i = 0, s = relation_head(utt_relation(u, &quot;Segment&quot;)); s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;s = item_next(s), i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;label_data[i] = (char *) calloc(MAXBUFLEN, sizeof(char));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Flite_HTS_Engine_create_label(f, s, label_data[i]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /* save Labels to file _out.lab */</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; //fwrite((char*)&quot;hhhh&quot;, sizeof(char), 4, labfp); //ok</div><div class="code_line">&nbsp;&nbsp; for (i = 0; i&#60;label_size; i++){</div><div class="code_line">&nbsp;&nbsp; &nbsp;_asm{</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov ecx, dword ptr[label_data]</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov eax, dword ptr [i]</div><div class="code_line">&nbsp;&nbsp; &nbsp;imul eax,4</div><div class="code_line">&nbsp;&nbsp; &nbsp;add ecx, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov eax, [ecx]</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov dword ptr[label_d2],eax</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; fwrite(label_d2, sizeof(char), strlen(label_d2), labfp);</div><div class="code_line">&nbsp;&nbsp; fwrite(szln, sizeof(char), 1, labfp);</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /* speech synthesis part */</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_load_label_from_string_list(&amp;f-&#62;engine, label_data, label_size);</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_create_sstream(&amp;f-&#62;engine);</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_create_pstream(&amp;f-&#62;engine);</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_create_gstream(&amp;f-&#62;engine);</div><div class="code_line">&nbsp;&nbsp; if (wavfp != NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;HTS_Engine_save_riff(&amp;f-&#62;engine, wavfp);</div><div class="code_line">&nbsp;&nbsp; HTS_Engine_refresh(&amp;f-&#62;engine);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; for (i = 0; i &#60; label_size; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;free(label_data[i]);</div><div class="code_line">&nbsp;&nbsp; free(label_data);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; delete_utterance(u);</div><div class="code_line">&nbsp;&nbsp; UNREGISTER_VOX(v);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
В файл flite_hts_engine добавлены строки:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int main(int argc, char **argv)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; int i;</div><div class="code_line">&nbsp;&nbsp; FILE *txtfp = stdin, *wavfp = NULL;</div><div class="code_line">&nbsp;&nbsp; FILE *labfp = NULL; &nbsp; /*for labels*/</div><div class="code_line">&nbsp;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /* read command */</div><div class="code_line">&nbsp;&nbsp; while (--argc) {</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case &#39;o&#39;:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wavfp = Getfp(*++argv, &quot;wb&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--argc;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case &#39;z&#39;: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &#60;------- new</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;labfp = Getfp(*++argv, &quot;w&quot;); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &#60;------- new</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--argc; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &#60;------- new</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &#60;------- new &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case &#39;h&#39;:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Usage();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* synthesis */</div><div class="code_line">&nbsp;&nbsp; if (fgets(buff, INPUT_BUFF_SIZE, txtfp) != NULL &amp;&amp; strlen(buff) &#62; 0){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Flite_HTS_Engine_synthesis(&amp;engine, buff, wavfp, labfp);</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp; fclose(labfp); &nbsp;/*labs*/</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; return 0;</div><div class="code_line">} //end of func</div></ol></div></div></div></div>]]></description>
        <author>webcoder88</author>
        <category>Речевые Технологии</category>
      </item>
	
      </channel>
      </rss>
	