【问题标题】:Output words in speaker with arduino用arduino在扬声器中输出单词
【发布时间】:2016-01-31 14:18:44
【问题描述】:

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

【问题讨论】:

  • 有一种称为 ChipCorder 的集成电路,专为数字电话应答机等应用而设计。它集成了音频编解码器和足够的内存来存储几分钟的音频。您的微控制器通过 SPI 控制它。有 DIP 包中的版本。这不是高质量的音频,但是如果您反对添加内存并且只需要几分钟的播放时间,那么就需要考虑一下。甚至还有一个使用 ChipCorder 的arduino voice shield

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


【解决方案1】:

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

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

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

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

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

eSpeak 项目可能是一个很好的起点——它对 Arduino 来说可能太大了,整个文本到语音的翻译是不必要的,但是它将文本转换为音素,所以你可以离线完成这部分(在 PC 上),然后将音素和重播代码加载到 Arduino。当然,它可能仍然太大。

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多