极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19654|回复: 7

Arduino2560 与语音芯片Syn6628语音播放程序问题,附有程序

[复制链接]
发表于 2014-4-16 21:11:44 | 显示全部楼层 |阅读模式
关于程序结构的求助。
第一次接触Arduino,想要结合Syn6628语音芯片,做一个语音播报系统。
其中播放的  语音子函数speech(1,2,3,4)  是由Arduino_LPTTS函数生成器生成。通过按一个键
输出一个相应的语音。现在的问题是
loop函数中该怎么调用speech(1,2,3,4),我写的程序太简单,有一些有问题。当正播放一个语音时,按下另一个按键以播放另一句语音时,有6、7秒的反应时间,而且有时会进入死循环。该怎么修改程序结构解决这些问题,请各位高手指教。


程序如下:
int key1=4;//按下该键播放语音语音1
int key2=5;//按下该键播放语音语音2
int key3=6;//按下该键播放语音语音3
int key4=7;//按下该键播放语音语音4

int state1=0;
int state2=0;
int state3=0;
int state4=0;


9//语音子函数speech(1,2,3,4)  是由Arduino_LPTTS函数生成器自动生成
//1、黄绮珊  剪爱
void speech1()
{
  unsigned char i = 0;
  unsigned char head[18];

  head[0] = 0xFD;
  head[1] = 0x00;
  head[2] = 0x0F;
  head[3] = 0x01;
  head[4] = 0x08;
  head[5] = 0xBB;
  head[6] = 0xC6;
  head[7] = 0xE7;
  head[8] = 0xB2;
  head[9] = 0xC9;
  head[10] = 0xBA;
  head[11] = 0x20;
  head[12] = 0x20;
  head[13] = 0xBC;
  head[14] = 0xF4;
  head[15] = 0xB0;
  head[16] = 0xAE;
  head[17] = 0xF6;

  for(i=0; i<18; i++){
    Serial.write(head);
  }
}


//2、我们都是
void speech2()
{
  unsigned char i = 0;
  unsigned char head[38];

  head[0] = 0xFD;
  head[1] = 0x00;
  head[2] = 0x23;
  head[3] = 0x01;
  head[4] = 0x08;
  head[5] = 0xCE;
  head[6] = 0xD2;
  head[7] = 0xC3;
  head[8] = 0xC7;
  head[9] = 0xB6;
  head[10] = 0xBC;
  head[11] = 0xCA;
  head[12] = 0xC7;
  head[13] = 0xBA;
  head[14] = 0xC3;
  head[15] = 0xBA;
  head[16] = 0xA2;
  head[17] = 0xD7;
  head[18] = 0xD3;
  head[19] = 0xA3;
  head[20] = 0xAC;
  head[21] = 0xCA;
  head[22] = 0xB7;
  head[23] = 0xC9;
  head[24] = 0xCF;
  head[25] = 0xD7;
  head[26] = 0xEE;
  head[27] = 0xC9;
  head[28] = 0xC6;
  head[29] = 0xC1;
  head[30] = 0xBC;
  head[31] = 0xB5;
  head[32] = 0xC4;
  head[33] = 0xBA;
  head[34] = 0xA2;
  head[35] = 0xD7;
  head[36] = 0xD3;
  head[37] = 0xFF;

  for(i=0; i<38; i++){
    Serial.write(head);
  }
}

//3、请关闭电源,锁好门窗
void speech3(){
  unsigned char i = 0;
  unsigned char head[26];

  head[0] = 0xFD;
  head[1] = 0x00;
  head[2] = 0x17;
  head[3] = 0x01;
  head[4] = 0x00;
  head[5] = 0xC7;
  head[6] = 0xEB;
  head[7] = 0xB9;
  head[8] = 0xD8;
  head[9] = 0xB1;
  head[10] = 0xD5;
  head[11] = 0xB5;
  head[12] = 0xE7;
  head[13] = 0xD4;
  head[14] = 0xB4;
  head[15] = 0xA3;
  head[16] = 0xAC;
  head[17] = 0xCB;
  head[18] = 0xF8;
  head[19] = 0xBA;
  head[20] = 0xC3;
  head[21] = 0xC3;
  head[22] = 0xC5;
  head[23] = 0xB4;
  head[24] = 0xB0;
  head[25] = 0xB7;

  for(i=0; i<26; i++){
    Serial.write(head);
  }
}
//4、一帆风顺,一路平安
void speech4()
{
  unsigned char i = 0;
  unsigned char head[24];

  head[0] = 0xFD;
  head[1] = 0x00;
  head[2] = 0x15;
  head[3] = 0x01;
  head[4] = 0x50;
  head[5] = 0xD2;
  head[6] = 0xBB;
  head[7] = 0xB7;
  head[8] = 0xAB;
  head[9] = 0xB7;
  head[10] = 0xE7;
  head[11] = 0xCB;
  head[12] = 0xB3;
  head[13] = 0xA3;
  head[14] = 0xAC;
  head[15] = 0xD2;
  head[16] = 0xBB;
  head[17] = 0xC2;
  head[18] = 0xB7;
  head[19] = 0xC6;
  head[20] = 0xBD;
  head[21] = 0xB0;
  head[22] = 0xB2;
  head[23] = 0x8E;

  for(i=0; i<24; i++){
    Serial.write(head);
  }
}

void setup()
{
  Serial.begin(9600);
  pinMode(key1,INPUT);
  pinMode(key2,INPUT);
  pinMode(key3,INPUT);
  pinMode(key4,INPUT);
}
void loop()
{
  state1=digitalRead(key1);
  if(state1==HIGH)
  {
    delay(20);//延时去斗
    state1=digitalRead(key1);
    if(state1==HIGH)
    speech1();
  }
  
   state2=digitalRead(key2);
   if(state2==HIGH)
  {
    delay(20);
    state2=digitalRead(key2);
    if(state2==HIGH)
    speech2();
  }
  
  state3=digitalRead(key3);
  if(state3==HIGH)
  {
    delay(20);
    state3=digitalRead(key3);
    if(state3==HIGH)
    speech3();
  }
  
  state4=digitalRead(key4);
  if(state4==HIGH)
  {
    delay(20);
    state4=digitalRead(key4);
    if(state4==HIGH)
    speech4();
  }
  
}
回复

使用道具 举报

 楼主| 发表于 2014-4-17 08:28:49 | 显示全部楼层
程序能运行,就是感觉太粗糙了,请高手给点建议!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-17 08:49:53 | 显示全部楼层
程序能用,但就是有些问题。在loop程序中,调用speech函数时,串口会将该函数发送到语音芯片,在语音芯片中就会自动播放,而在loop函数又会读取I/O口的键盘key输入信号,当芯片读取到有key有输入时,又会调用speech函数时,串口会将该函数发送到语音芯片,在串口传递speech函数时会需要一段时间,所以不同语音切换时会有5、6秒的延迟,这就是我对程序的理解。但感觉loop中对speech函数调用程序太简陋不严密,频繁按键盘时语音芯片会播放乱码。该怎么修改,请各位高手指教!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-18 08:25:12 | 显示全部楼层
HNGHT2011 发表于 2014-4-17 08:49
程序能用,但就是有些问题。在loop程序中,调用speech函数时,串口会将该函数发送到语音芯片,在语音芯片中 ...

大家没用过syn6288吗,但程序.....
回复 支持 反对

使用道具 举报

发表于 2014-4-19 12:51:46 | 显示全部楼层
HNGHT2011 发表于 2014-4-17 08:49
程序能用,但就是有些问题。在loop程序中,调用speech函数时,串口会将该函数发送到语音芯片,在语音芯片中 ...

沒用過syn6288,看來程序很直接,而所述的"串口传递speech函数时会需要一段时间,所以不同语音切换时会有5、6秒的延迟",應是硬件的響應問題。
理論上,若要播放新的一段前,應發控制碼先把現播放的停止清除,才發新的一段播放碼才比較合理!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-19 16:21:23 | 显示全部楼层
eddiewwm 发表于 2014-4-19 12:51
沒用過syn6288,看來程序很直接,而所述的"串口传递speech函数时会需要一段时间,所以不同语音切换时会有 ...

谢谢你的意见,我找到了问题,确实是硬件问题!
回复 支持 反对

使用道具 举报

发表于 2015-3-20 19:36:38 | 显示全部楼层
HNGHT2011 发表于 2014-4-17 08:28
程序能运行,就是感觉太粗糙了,请高手给点建议!

你好,我也在用syn6288 做语音播报 可是完全没有声音请问你有什么建议吗
回复 支持 反对

使用道具 举报

发表于 2017-8-23 09:43:32 | 显示全部楼层
你好,我运行程序的时候编译有误:Arduino:1.6.5 (Windows 8.1), 板:"Arduino Uno"

构建选项已变更,全部重新构建

__.ino: In function 'void speech1()':
__:39: error: call of overloaded 'write(unsigned char [18])' is ambiguous
__.ino:39:22: note: candidates are:
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note: virtual size_t HardwareSerial::write(uint8_t) <near match>
     virtual size_t write(uint8_t);
                    ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'uint8_t {aka unsigned char}'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note: size_t HardwareSerial::write(long unsigned int) <near match>
     inline size_t write(unsigned long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'long unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note: size_t HardwareSerial::write(long int) <near match>
     inline size_t write(long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'long int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note: size_t HardwareSerial::write(unsigned int) <near match>
     inline size_t write(unsigned int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note: size_t HardwareSerial::write(int) <near match>
     inline size_t write(int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'int'
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*) <near match>
     size_t write(const char *str) {
            ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note:   no known conversion for argument 1 from 'unsigned char [18]' to 'const char*'
__.ino: In function 'void speech2()':
__:90: error: call of overloaded 'write(unsigned char [38])' is ambiguous
__.ino:90:22: note: candidates are:
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note: virtual size_t HardwareSerial::write(uint8_t) <near match>
     virtual size_t write(uint8_t);
                    ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'uint8_t {aka unsigned char}'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note: size_t HardwareSerial::write(long unsigned int) <near match>
     inline size_t write(unsigned long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'long unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note: size_t HardwareSerial::write(long int) <near match>
     inline size_t write(long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'long int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note: size_t HardwareSerial::write(unsigned int) <near match>
     inline size_t write(unsigned int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note: size_t HardwareSerial::write(int) <near match>
     inline size_t write(int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'int'
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*) <near match>
     size_t write(const char *str) {
            ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note:   no known conversion for argument 1 from 'unsigned char [38]' to 'const char*'
__.ino: In function 'void speech3()':
__:127: error: call of overloaded 'write(unsigned char [26])' is ambiguous
__.ino:127:22: note: candidates are:
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note: virtual size_t HardwareSerial::write(uint8_t) <near match>
     virtual size_t write(uint8_t);
                    ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'uint8_t {aka unsigned char}'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note: size_t HardwareSerial::write(long unsigned int) <near match>
     inline size_t write(unsigned long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'long unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note: size_t HardwareSerial::write(long int) <near match>
     inline size_t write(long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'long int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note: size_t HardwareSerial::write(unsigned int) <near match>
     inline size_t write(unsigned int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note: size_t HardwareSerial::write(int) <near match>
     inline size_t write(int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'int'
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*) <near match>
     size_t write(const char *str) {
            ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note:   no known conversion for argument 1 from 'unsigned char [26]' to 'const char*'
__.ino: In function 'void speech4()':
__:162: error: call of overloaded 'write(unsigned char [24])' is ambiguous
__.ino:162:22: note: candidates are:
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224:0,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note: virtual size_t HardwareSerial::write(uint8_t) <near match>
     virtual size_t write(uint8_t);
                    ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:124:20: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'uint8_t {aka unsigned char}'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note: size_t HardwareSerial::write(long unsigned int) <near match>
     inline size_t write(unsigned long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:125:19: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'long unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note: size_t HardwareSerial::write(long int) <near match>
     inline size_t write(long n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:19: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'long int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note: size_t HardwareSerial::write(unsigned int) <near match>
     inline size_t write(unsigned int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:127:19: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'unsigned int'
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note: size_t HardwareSerial::write(int) <near match>
     inline size_t write(int n) { return write((uint8_t)n); }
                   ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:128:19: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'int'
In file included from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                 from F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Arduino.h:224,
                 from __.ino:1:
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note: size_t Print::write(const char*) <near match>
     size_t write(const char *str) {
            ^
F:\arduino-1.6.5\hardware\arduino\avr\cores\arduino/Print.h:49:12: note:   no known conversion for argument 1 from 'unsigned char [24]' to 'const char*'
call of overloaded 'write(unsigned char [18])' is ambiguous

  报告将会包含更多的信息
  "在编译时,输出详细信息"
  在 文件>首选项 中启用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 21:50 , Processed in 0.050326 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表