<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Text To Speech &#8211; 编码无悔 /  Intent &amp; Focused</title>
	<atom:link href="https://www.codelast.com/tag/text-to-speech/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codelast.com</link>
	<description>最优化之路</description>
	<lastBuildDate>Mon, 27 Apr 2020 17:59:41 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[原创] 在树莓派上把文字转成语音（Text-To-Speech／TTS）</title>
		<link>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8%e6%a0%91%e8%8e%93%e6%b4%be%e4%b8%8a%e6%8a%8a%e6%96%87%e5%ad%97%e8%bd%ac%e6%88%90%e8%af%ad%e9%9f%b3%ef%bc%88text-to-speech%ef%bc%8ftts%ef%bc%89/</link>
					<comments>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8%e6%a0%91%e8%8e%93%e6%b4%be%e4%b8%8a%e6%8a%8a%e6%96%87%e5%ad%97%e8%bd%ac%e6%88%90%e8%af%ad%e9%9f%b3%ef%bc%88text-to-speech%ef%bc%8ftts%ef%bc%89/#comments</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Fri, 16 Dec 2016 17:12:48 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi/树莓派]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[Espeak]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Text To Speech]]></category>
		<category><![CDATA[TTS]]></category>
		<category><![CDATA[树莓派]]></category>
		<category><![CDATA[语音合成]]></category>
		<guid isPermaLink="false">http://www.codelast.com/?p=9014</guid>

					<description><![CDATA[<p>
本文软硬件环境：<br />
树莓派：3代 Model B V1.2，内存1GB<br />
OS：Arch Linux ARM</p>
<p>有时候，我们需要在程序中添加文字转语音的功能，即通过某个程序或API，把输入的文字朗读出来，也就是通常所说的 text-to-speech（简写为TTS）。我尝试了一个简单的方案&#8212;&#8212;使用Espeak来完成这个任务，在这里记录下来。<br />
<span id="more-9014"></span><br />
<span style="background-color:#00ff00;">『1』</span>TTS方案<br />
我们可以使用本地的TTS软件，也可以使用云端的TTS服务来实现文字转语音。使用本地TTS软件的好处就是不需要联网，云端的TTS服务通常提供更好的语音转换效果，不过也通常麻烦得多得多&#8212;&#8212;例如，需要写程序来发送数据、接收返回数据等。<br />
本地的TTS软件非常多，例如Espeak，Festival等。<br />
我试了一下Espeak：</p>
<blockquote>
<p>
		Text to Speech engine for English, with support&#160;for other languages.</p>
</blockquote>
<p>也就是说Espeak是一个英语的TTS引擎，但同时也支持其他语言。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
<span style="background-color:#00ff00;">『2』</span>硬件连接<br />
首先你要把可以播放声音的设备连接到树莓派上。使用有源音箱或者无源的耳机都可以。我使用的是耳塞，连接到树莓派的3.5mm音频输出接口上，如下图所示：<br />
<a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><img decoding="async" alt="raspberry pi 3.5 mm audio interface" src="http://www.codelast.com/wp-content/uploads/2016/12/raspberry_pi_3.5mm_audio.png" style="width: 400px; height: 323px;" /></a><br />
注意连接的瞬间可能会发出强电流声（爆音），最好不要戴在耳朵上。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
<span style="background-color:#00ff00;">『3』</span>Espeak安装、系统配置及使用<br />
安装非常简单：</p>
<blockquote>
<p>
		pacman -S espeak alsa-utils</p>
</blockquote>
<p>其中，<span style="color:#0000ff;">alsa-utils</span> 我记得是一个Espeak依赖的包，反正我装了。<br />
然而这样安装好之后，你还是无法使用它的。不信可以直接试试：</p>
<blockquote>
<p>
		espeak &#34;hello&#34;</p>
</blockquote>
<p>这是让Espeak朗读&#8220;hello&#8221;。通常情况下会直接报错：</p>
<blockquote>
<div>
		ALSA lib confmisc.c:767:(parse_card)</div></blockquote>&#8230; <a href="https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8%e6%a0%91%e8%8e%93%e6%b4%be%e4%b8%8a%e6%8a%8a%e6%96%87%e5%ad%97%e8%bd%ac%e6%88%90%e8%af%ad%e9%9f%b3%ef%bc%88text-to-speech%ef%bc%8ftts%ef%bc%89/" class="read-more">Read More </a>]]></description>
										<content:encoded><![CDATA[<p>
本文软硬件环境：<br />
树莓派：3代 Model B V1.2，内存1GB<br />
OS：Arch Linux ARM</p>
<p>有时候，我们需要在程序中添加文字转语音的功能，即通过某个程序或API，把输入的文字朗读出来，也就是通常所说的 text-to-speech（简写为TTS）。我尝试了一个简单的方案&mdash;&mdash;使用Espeak来完成这个任务，在这里记录下来。<br />
<span id="more-9014"></span><br />
<span style="background-color:#00ff00;">『1』</span>TTS方案<br />
我们可以使用本地的TTS软件，也可以使用云端的TTS服务来实现文字转语音。使用本地TTS软件的好处就是不需要联网，云端的TTS服务通常提供更好的语音转换效果，不过也通常麻烦得多得多&mdash;&mdash;例如，需要写程序来发送数据、接收返回数据等。<br />
本地的TTS软件非常多，例如Espeak，Festival等。<br />
我试了一下Espeak：</p>
<blockquote>
<p>
		Text to Speech engine for English, with support&nbsp;for other languages.</p>
</blockquote>
<p>也就是说Espeak是一个英语的TTS引擎，但同时也支持其他语言。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
<span style="background-color:#00ff00;">『2』</span>硬件连接<br />
首先你要把可以播放声音的设备连接到树莓派上。使用有源音箱或者无源的耳机都可以。我使用的是耳塞，连接到树莓派的3.5mm音频输出接口上，如下图所示：<br />
<a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><img decoding="async" alt="raspberry pi 3.5 mm audio interface" src="http://www.codelast.com/wp-content/uploads/2016/12/raspberry_pi_3.5mm_audio.png" style="width: 400px; height: 323px;" /></a><br />
注意连接的瞬间可能会发出强电流声（爆音），最好不要戴在耳朵上。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
<span style="background-color:#00ff00;">『3』</span>Espeak安装、系统配置及使用<br />
安装非常简单：</p>
<blockquote>
<p>
		pacman -S espeak alsa-utils</p>
</blockquote>
<p>其中，<span style="color:#0000ff;">alsa-utils</span> 我记得是一个Espeak依赖的包，反正我装了。<br />
然而这样安装好之后，你还是无法使用它的。不信可以直接试试：</p>
<blockquote>
<p>
		espeak &quot;hello&quot;</p>
</blockquote>
<p>这是让Espeak朗读&ldquo;hello&rdquo;。通常情况下会直接报错：</p>
<blockquote>
<div>
		ALSA lib confmisc.c:767:(parse_card) cannot find card &#39;0&#39;</div>
<div>
		ALSA lib conf.c:4371:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory</div>
<div>
		ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings</div>
<div>
		ALSA lib conf.c:4371:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory</div>
<div>
		ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name</div>
<div>
		ALSA lib conf.c:4371:(_snd_config_evaluate) function snd_func_refer returned error: No such file ordirectory</div>
<div>
		ALSA lib conf.c:4850:(snd_config_expand) Evaluate error: No such file or directory</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM sysdefault</div>
<div>
		......</div>
<div>
		wave_open_sound &gt; Pa_OpenStream : err=-9996 (Invalid device)</div>
</blockquote>
<p>这是因为你需要让系统在启动的时候加载和音频相关的模块，修改 <span style="color:#0000ff;">/boot/config.txt</span>，在里面添加上一句：</p>
<blockquote>
<p>
		dtparam=audio=on</p>
</blockquote>
<p>然后重启系统即可。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
重启之后，你再执行上面的Espeak命令，会发现仍然输出类似于下面的一堆错误信息：</p>
<blockquote>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline</div>
<div>
		ALSA lib pcm.c:2450:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline</div>
<div>
		connect(2) call to /dev/shm/jack-0/default/jack_0 failed (err=No such file or directory)</div>
<div>
		attempt to connect to server failed</div>
</blockquote>
<p>但这并不影响使用，此时已经可以正常发声了。<br />
如果要让Espeak朗读中文，可以带参数这样执行：</p>
<blockquote>
<p>
		espeak -vzh &quot;编程&quot;</p>
</blockquote>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
<span style="background-color:#00ff00;">『4』</span>使用感受<br />
最大的感觉就是朗读的语音&ldquo;不自然&rdquo;&mdash;&mdash;完全是机器人在读的生硬感，而不是人类在读的顺畅感。并且，朗读的时候会带有比较明显的背景噪音。<br />
此外还有一个致命的问题：如果我让它朗读一个非常长的句子（无论是英文还是中文），那么它读着读着就会越来越慢，并且产生越来越大的电流噪音，就好像一个人已经上气不接下气了。这个奇怪的现象我还不知道是为什么。总之，如果拿来读很短的句子或者单词，效果还是勉强能接受的。<br />
如果要追求好的发声效果，还是要使用现在流行的一些云端服务，例如科大讯飞、百度的语音合成API等，它们不仅提供了良好的合成效果，并且还有很多可选的音色（男声，女声，成人声，小孩声，老人声，等等）。</p>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
感谢关注我的微信公众号（微信扫一扫）：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
	<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="width: 200px; height: 200px;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8%e6%a0%91%e8%8e%93%e6%b4%be%e4%b8%8a%e6%8a%8a%e6%96%87%e5%ad%97%e8%bd%ac%e6%88%90%e8%af%ad%e9%9f%b3%ef%bc%88text-to-speech%ef%bc%8ftts%ef%bc%89/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
