欢迎来到军工软件开发人才培养基地——学到牛牛

语音合成模块传感器功能以及模块说明

时间:2024-05-06 07:01:10 来源:学到牛牛

 

1.语音合成模块说明

 

 

1.1 传感器介绍 

语音合成模块是一种将文本转换为语音的技术,它通过计算机语音合成来实现。这种技 术可以广泛应用于各种领域,如语音助手、智能机器人、虚拟人物等。它通过分析输入文本 的语言学信息,结合语音库中的语音样本,生成与输入文本对应的语音波形。

 

1.2 工作原理 

语音合成模块的工作原理是利用计算机语音合成技术,将输入的文本转换为语音波形, 然后通过 MP3设备播放出来。 

具体来说,语音合成模块的工作原理可以分为以下几个步骤: 

文本预处理:对输入的文本进行分析和处理,提取语言学信息,并进行相应的转换,以便声学模型可以理解并生成相应的语音波形。 

声学模型训练:利用大量的语音数据,训练声学模型,使模型能够根据文本处理部分提 取的语言学信息,生成相应的语音波形。 

语音波形生成:根据文本处理部分提取的语言学信息,结合声学模型生成的语音波形, 生成与输入文本对应的语音波形。 

语音输出:将生成的语音波形进行编码和解码,并通过音响或耳机等设备播放出来,生成最终的语音输出。 

 

2.注意事项 

1 合适的语速和音调:语音合成模块的语速和音调应该根据应用场景和用户需求进行调整,以提供更好的听觉体验。 

2 音量控制:在播放语音时,应该控制音量,避免声音过大或过小,影响听觉效果。

3.参数说明

3.1 引脚说明

 

 

3.2 规格参数

 

 

4.实现效果

 

4.1 例程代码

#include <Wire.h>

 

#define TTS_MODULE_I2C_ADDR  0x40   // 传感器的IIC地址

 

bool WireReadTTSDataByte(uint8_t reg, uint8_t &val)

{

/*    if(!WireWriteByte(reg))

    {

        return false;

    }

*/     Wire.requestFrom(TTS_MODULE_I2C_ADDR, 1); 

//  主设备请求从设备一个字节,这个字节可以呗主设备用read()或available()接受。

     while(Wire.available())

     {

        val = Wire.read(); 

     }  

     return true;

}

bool TTSModuleSpeak(unsigned char *sign, unsigned char *words)

{

    unsigned short len, i;

    len = strlen(sign) + strlen(words) + 2;

    unsigned char head[] = {0xFD, 0x00, 0x02, 0x01, 0x01}; // 发送数据文本编码为GB2312

    head[1] = len >> 8;

    head[2] = len;

 

    Wire.beginTransmission(TTS_MODULE_I2C_ADDR);

      Wire.write(head, 5);

      Wire.write(sign, strlen(sign));

      Wire.write(words,strlen(words));

 

      if(Wire.endTransmission() != 0)

      {

        return false;

      }

      return true;

}

 

void setup() {

  // put your setup code here, to run once:

  unsigned char val;

  Wire.begin();

  Serial.begin(9600);

    char arr[100] = {"welcome to china"};

    TTSModuleSpeak("[h0][v10][m55]",arr);  // [h0] 设置单词发音方式,0为自动发音  

    // [v10] 设置音量,音量范围为0—10,10为最大音量;

    // [m55] 选择发音人

    // [s5] 设置语速,语速范围为0-10,10为最大语速

    Serial.println("Start");

 

    delay(100);

    WireReadTTSDataByte(0,val);

      Serial.println(val);

 

      delay(500);

    WireReadTTSDataByte(0,val);

      Serial.println(val);

    Serial.println(arr);

}

 

void loop() {

  // put your main code here, to run repeatedly:

  delay(500);

}

 

4.2 串口打印