| Index: chrome/browser/speech/tts_mac.mm
|
| diff --git a/chrome/browser/speech/tts_mac.mm b/chrome/browser/speech/tts_mac.mm
|
| index 689effc7be91c600b7f9dda4c71ba9538c704b8e..bdb9b1cd7b72f380a158b48f37b4bc2de9c91ae2 100644
|
| --- a/chrome/browser/speech/tts_mac.mm
|
| +++ b/chrome/browser/speech/tts_mac.mm
|
| @@ -63,6 +63,10 @@ class TtsPlatformImplMac : public TtsPlatformImpl {
|
|
|
| virtual bool StopSpeaking() OVERRIDE;
|
|
|
| + virtual void Pause() OVERRIDE;
|
| +
|
| + virtual void Resume() OVERRIDE;
|
| +
|
| virtual bool IsSpeaking() OVERRIDE;
|
|
|
| virtual void GetVoices(std::vector<VoiceData>* out_voices) OVERRIDE;
|
| @@ -86,6 +90,8 @@ class TtsPlatformImplMac : public TtsPlatformImpl {
|
| int utterance_id_;
|
| std::string utterance_;
|
| bool sent_start_event_;
|
| + int last_char_index_;
|
| + bool paused_;
|
|
|
| friend struct DefaultSingletonTraits<TtsPlatformImplMac>;
|
|
|
| @@ -105,6 +111,7 @@ bool TtsPlatformImplMac::Speak(
|
| const UtteranceContinuousParameters& params) {
|
| // TODO: convert SSML to SAPI xml. http://crbug.com/88072
|
| utterance_ = utterance;
|
| + paused_ = false;
|
|
|
| NSString* utterance_nsstring =
|
| [NSString stringWithUTF8String:utterance_.c_str()];
|
| @@ -165,9 +172,28 @@ bool TtsPlatformImplMac::StopSpeaking() {
|
| [speech_synthesizer_ stopSpeaking];
|
| speech_synthesizer_.reset(nil);
|
| }
|
| + paused_ = false;
|
| return true;
|
| }
|
|
|
| +void TtsPlatformImplMac::Pause() {
|
| + if (speech_synthesizer_.get() && utterance_id_ && !paused_) {
|
| + [speech_synthesizer_ pauseSpeakingAtBoundary:NSSpeechImmediateBoundary];
|
| + paused_ = true;
|
| + TtsController::GetInstance()->OnTtsEvent(
|
| + utterance_id_, TTS_EVENT_PAUSE, last_char_index_, "");
|
| + }
|
| +}
|
| +
|
| +void TtsPlatformImplMac::Resume() {
|
| + if (speech_synthesizer_.get() && utterance_id_ && paused_) {
|
| + [speech_synthesizer_ continueSpeaking];
|
| + paused_ = false;
|
| + TtsController::GetInstance()->OnTtsEvent(
|
| + utterance_id_, TTS_EVENT_RESUME, last_char_index_, "");
|
| + }
|
| +}
|
| +
|
| bool TtsPlatformImplMac::IsSpeaking() {
|
| return [NSSpeechSynthesizer isAnyApplicationSpeaking];
|
| }
|
| @@ -223,6 +249,8 @@ void TtsPlatformImplMac::GetVoices(std::vector<VoiceData>* outVoices) {
|
| data.events.insert(TTS_EVENT_ERROR);
|
| data.events.insert(TTS_EVENT_CANCELLED);
|
| data.events.insert(TTS_EVENT_INTERRUPTED);
|
| + data.events.insert(TTS_EVENT_PAUSE);
|
| + data.events.insert(TTS_EVENT_RESUME);
|
| }
|
| }
|
|
|
| @@ -247,11 +275,13 @@ void TtsPlatformImplMac::OnSpeechEvent(
|
| }
|
| controller->OnTtsEvent(
|
| utterance_id_, event_type, char_index, error_message);
|
| + last_char_index_ = char_index;
|
| }
|
|
|
| TtsPlatformImplMac::TtsPlatformImplMac() {
|
| utterance_id_ = -1;
|
| sent_start_event_ = true;
|
| + paused_ = false;
|
|
|
| delegate_.reset([[ChromeTtsDelegate alloc] initWithPlatformImplMac:this]);
|
| }
|
|
|