用arduino输出扬声器中的单词

时间:2016-01-31 14:18:45

标签: arduino embedded hardware arduino-uno arduino-ide

我想使用代码在arduino中生成语音。我可以在arduino中生成简单的音调和音乐,但我需要在arduino扬声器中输出像右,左等的单词。我找到了一些使用wav文件的方法,但它需要外部存储卡读卡器。是否有使用arduino和扬声器生成的方法?

1 个答案:

答案 0 :(得分:1)

典型的录制声音(例如wav文件)需要比Arduino上的片上可用内存大得多的内存。

可以使用最小化内存要求的编码和数据速率 - 以牺牲音频质量为代价。例如,通常可接受的质量语音频带音频可以使用非线性(压缩)8位PCM以3KHz采样率获得,如果差分解码为4位采样(这样每个采样不是PCM代码,而是差异在上一个样本的级别中,那么你可以在1.5K字节内获得大约1秒的音频。在将结果数据存储在Arduino闪存中之前,您必须对原始音频进行一些离线处理,以便以这种方式对其进行编码。您还必须实现必要的解码和线性化。

另一种可能性是使用合成而不是录制语音。此技术使用录制的音素(语音成分)而不是整个单词,然后您可以从这些组件构建单词。结果通常有点机器人和不自然(现代语音合成实际上可以非常有说服力,但不是Arduino上可用的资源 - 想想1980年的 Speak-and-Spell )。

虽然它可以相当高效,但是音素语音合成需要针对不同自然语言的不同音素集。或许对于有限的词汇表,可能只对实际使用的音素子集进行编码。

您可以在http://nsd.dyndns.org/speech/听到一个简单的音素语音生成器可以生成的语音类型的录音。这个页面讨论了一个由Arduino驱动的1980年代GI-SP0256语音芯片,而不是由 Arduino生成的语音,但它让您了解可能实现的目标 - 仅用2Kb ROM管理的GI-SP0256 - Arduino可能直接实现类似的东西。难点可能在于获得必要的音素集。您可以录制自己的内容并按上述方式对其进行编码。然后,每个单词或短语将只是一个音素列表和输出延迟。

eSpeak项目可能是一个很好的起点 - 它可能对Arduino而言太大了,并且整个文本到语音翻译都是不必要的,但是它将文本转换为音素,所以你可以做到这一点 - 行(在PC上),然后将音素和重播代码加载到Arduino。当然,它可能仍然太大。