SP03 Text to Speech Synthesizer
Diff: SP03.cpp
- Revision:
- 1:58ab657cd515
- Parent:
- 0:2326b6172834
--- a/SP03.cpp Wed May 07 13:52:08 2014 +0000 +++ b/SP03.cpp Mon Mar 07 14:38:55 2016 +0000 @@ -3,47 +3,58 @@ SP03::SP03(PinName sda, PinName scl): i2c_bus(sda,scl) { i2c_bus.frequency(CLOCK_RATE); -} - -void SP03::_speak(const char message[],SmartLab_SP03::Speech_Speed speed, SmartLab_SP03::Speech_Volume volume,uint8_t pitch) -{ - char speakout[2]; - speakout[0] = REGISTER_FOR_COMMAND; - speakout[1] = SPEAK_OUT_THE_BUFFER; - int length = 6 + strlen(message); - char _message[length]; - _message[0] = REGISTER_FOR_COMMAND; - _message[1] = 0x00; - _message[2] = volume; - _message[3] = speed; - _message[4] = pitch; - for (int i = 5; i < length; i++) - _message[i] = message[i - 5]; - i2c_bus.write(DEFAULT_ADDRESS, _message, length); - i2c_bus.write(DEFAULT_ADDRESS, speakout, 2); + _volume = VOLUME_MAX; + _speed = SPEED_NORMAL; } -void SP03::Speak(const char message[]) +void SP03::speak(const char * message) { - _speak(message, SmartLab_SP03::NORMAL, SmartLab_SP03::MAX, DEFAULT_SPEECH_PITCH); -} + i2c_bus.start(); + i2c_bus.write(DEFAULT_ADDRESS); + i2c_bus.write(REGISTER_FOR_COMMAND); + i2c_bus.write(0x00); + i2c_bus.write(_volume); + i2c_bus.write(_speed); + i2c_bus.write(DEFAULT_SPEECH_PITCH); + int i = 0; + while (true) { + i2c_bus.write(message[i++]); + if (message[i] == 0x00) + break; + } + i2c_bus.write(0x00); + i2c_bus.stop(); -void SP03::Speak(const char message[],SmartLab_SP03::Speech_Speed speed, SmartLab_SP03::Speech_Volume volume) -{ - _speak(message, speed, volume, DEFAULT_SPEECH_PITCH); + i2c_bus.start(); + i2c_bus.write(DEFAULT_ADDRESS); + i2c_bus.write(REGISTER_FOR_COMMAND); + i2c_bus.write(SPEAK_OUT_THE_BUFFER); + i2c_bus.stop(); } -void SP03::Speak(const char message[],SmartLab_SP03::Speech_Speed speed, SmartLab_SP03::Speech_Volume volume,uint8_t pitch) +void SP03::setSpeed(char speed) { - _speak(message, speed, volume, pitch); + _speed = speed; +} + +void SP03::setVolume(char volume) +{ + _volume = volume; } -bool SP03::IsSpeaking() +bool SP03::isSpeaking() { - char m[1]= {REGISTER_FOR_COMMAND}; - i2c_bus.write(DEFAULT_ADDRESS,m ,1); - i2c_bus.read(DEFAULT_ADDRESS, m, 1); - if (m[0] == 0x00) + i2c_bus.start(); + i2c_bus.write(DEFAULT_ADDRESS); + i2c_bus.write(REGISTER_FOR_COMMAND); + i2c_bus.stop(); + + i2c_bus.start(); + i2c_bus.write(DEFAULT_ADDRESS | 0x01); + int value = i2c_bus.read(0x00); + i2c_bus.stop(); + + if (value == 0x00) return false; else return true; } \ No newline at end of file