Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: content/renderer/tts_dispatcher.cc

Issue 12589005: Implement web speech synthesis. (Closed) Base URL: http://git.chromium.org/chromium/src.git@webtts
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/tts_dispatcher.h"
6
7 #include "base/basictypes.h"
8 #include "base/utf_string_conversions.h"
9 #include "content/common/tts_messages.h"
10 #include "content/public/common/tts_utterance_request.h"
11 #include "content/renderer/render_view_impl.h"
12 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
13 #include "third_party/WebKit/Source/Platform/chromium/public/WebVector.h"
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSpeechSynthesisCli ent.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSpeechSynthesisUtt erance.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSpeechSynthesisVoi ce.h"
17
18 using WebKit::WebSpeechSynthesisClient;
19 using WebKit::WebSpeechSynthesisUtterance;
20 using WebKit::WebSpeechSynthesisVoice;
21 using WebKit::WebString;
22 using WebKit::WebVector;
23
24 namespace content {
25
26 TtsDispatcher::TtsDispatcher(RenderViewImpl* render_view)
27 : RenderViewObserver(render_view),
28 synthesis_client_(NULL) {
29 }
30
31 TtsDispatcher::~TtsDispatcher() {
32 }
33
34 bool TtsDispatcher::OnMessageReceived(const IPC::Message& message) {
35 bool handled = true;
36 IPC_BEGIN_MESSAGE_MAP(TtsDispatcher, message)
37 IPC_MESSAGE_HANDLER(TtsMsg_SetVoiceList, OnSetVoiceList)
38 IPC_MESSAGE_HANDLER(TtsMsg_DidStartSpeaking, OnDidStartSpeaking)
39 IPC_MESSAGE_HANDLER(TtsMsg_DidFinishSpeaking, OnDidFinishSpeaking)
40 IPC_MESSAGE_HANDLER(TtsMsg_DidPauseSpeaking, OnDidPauseSpeaking)
41 IPC_MESSAGE_HANDLER(TtsMsg_DidResumeSpeaking, OnDidResumeSpeaking)
42 IPC_MESSAGE_HANDLER(TtsMsg_WordBoundary, OnWordBoundary)
43 IPC_MESSAGE_HANDLER(TtsMsg_SentenceBoundary, OnSentenceBoundary)
44 IPC_MESSAGE_HANDLER(TtsMsg_MarkerEvent, OnMarkerEvent)
45 IPC_MESSAGE_HANDLER(TtsMsg_WasInterrupted, OnWasInterrupted)
46 IPC_MESSAGE_HANDLER(TtsMsg_WasCancelled, OnWasCancelled)
47 IPC_MESSAGE_HANDLER(TtsMsg_SpeakingErrorOccurred, OnSpeakingErrorOccurred)
48 IPC_MESSAGE_UNHANDLED(handled = false)
49 IPC_END_MESSAGE_MAP()
50 return handled;
51 }
52
53 void TtsDispatcher::setClient(WebSpeechSynthesisClient* client) {
54 synthesis_client_ = client;
55 }
56
57 void TtsDispatcher::initializeVoiceList() {
58 Send(new TtsHostMsg_InitializeVoiceList(routing_id()));
59 }
60
61 void TtsDispatcher::speak(const WebSpeechSynthesisUtterance& web_utterance) {
62 TtsUtteranceRequest utterance;
63 utterance.id = web_utterance.id();
64 utterance.text = web_utterance.text().utf8();
65 utterance.lang = web_utterance.lang().utf8();
66 utterance.voice = web_utterance.voice().utf8();
67 utterance.volume = web_utterance.volume();
68 utterance.rate = web_utterance.rate();
69 utterance.pitch = web_utterance.pitch();
70 Send(new TtsHostMsg_Speak(routing_id(), utterance));
71 }
72
73 void TtsDispatcher::pause() {
74 Send(new TtsHostMsg_Pause());
75 }
76
77 void TtsDispatcher::resume() {
78 Send(new TtsHostMsg_Resume());
79 }
80
81 void TtsDispatcher::cancel() {
82 Send(new TtsHostMsg_Cancel());
83 }
84
85 void TtsDispatcher::OnSetVoiceList(
86 const std::vector<content::TtsVoice>& voices) {
87 WebVector<WebSpeechSynthesisVoice> out_voices(voices.size());
88 for (size_t i = 0; i < voices.size(); i++) {
tommi (sloooow) - chröme 2013/03/07 13:04:46 ++i
dmazzoni 2013/03/19 17:30:22 Done.
89 out_voices[i] = WebSpeechSynthesisVoice();
90 out_voices[i].assign(WebString::fromUTF8(voices[i].voice_uri),
91 WebString::fromUTF8(voices[i].name),
92 WebString::fromUTF8(voices[i].lang),
93 voices[i].local_service,
94 voices[i].is_default);
95 }
96 synthesis_client_->setVoiceList(out_voices);
97 }
98
99 void TtsDispatcher::OnDidStartSpeaking(int utterance_id) {
100 synthesis_client_->didStartSpeaking(utterance_id);
101 }
102
103 void TtsDispatcher::OnDidFinishSpeaking(int utterance_id) {
104 synthesis_client_->didFinishSpeaking(utterance_id);
105 }
106
107 void TtsDispatcher::OnDidPauseSpeaking(int utterance_id) {
108 synthesis_client_->didPauseSpeaking(utterance_id);
109 }
110
111 void TtsDispatcher::OnDidResumeSpeaking(int utterance_id) {
112 synthesis_client_->didResumeSpeaking(utterance_id);
113 }
114
115 void TtsDispatcher::OnWordBoundary(int utterance_id, int char_index) {
116 synthesis_client_->wordBoundaryEventOccurred(utterance_id, char_index);
117 }
118
119 void TtsDispatcher::OnSentenceBoundary(int utterance_id, int char_index) {
120 synthesis_client_->sentenceBoundaryEventOccurred(utterance_id, char_index);
121 }
122
123 void TtsDispatcher::OnMarkerEvent(int utterance_id, int char_index) {
124 // Not supported yet.
125 }
126
127 void TtsDispatcher::OnWasInterrupted(int utterance_id) {
128 // The web speech API doesn't support "interrupted".
129 synthesis_client_->didFinishSpeaking(utterance_id);
130 }
131
132 void TtsDispatcher::OnWasCancelled(int utterance_id) {
133 // The web speech API doesn't support "cancelled".
134 synthesis_client_->didFinishSpeaking(utterance_id);
135 }
136
137 void TtsDispatcher::OnSpeakingErrorOccurred(int utterance_id,
138 const std::string& error_message) {
139 // The web speech API doesn't support an error message.x
140 synthesis_client_->speakingErrorOccurred(utterance_id);
141 }
142
143
144 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698