| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <unistd.h> |
| |
| #include <chromeos/dbus/dbus.h> |
| #include <chromeos/dbus/service_constants.h> |
| #include <chromeos/glib/object.h> |
| |
| #include "bindings/client.h" |
| #include "marshal.h" // NOLINT |
| #include "tts_extern.h" |
| |
| namespace chromeos { |
| |
| bool Speak(const char* text) { |
| g_type_init(); |
| chromeos::dbus::BusConnection bus = chromeos::dbus::GetSystemBusConnection(); |
| chromeos::dbus::Proxy tts_proxy(bus, |
| speech_synthesis::kSpeechSynthesizerServiceName, |
| speech_synthesis::kSpeechSynthesizerServicePath, |
| speech_synthesis::kSpeechSynthesizerInterface); |
| DCHECK(tts_proxy.gproxy()) << "Failed to acquire proxy"; |
| if (!::org_chromium_SpeechSynthesizerInterface_speak( |
| tts_proxy.gproxy(), text, NULL)) { |
| return false; |
| } |
| return true; |
| } |
| |
| bool Stop() { |
| g_type_init(); |
| chromeos::dbus::BusConnection bus = chromeos::dbus::GetSystemBusConnection(); |
| chromeos::dbus::Proxy tts_proxy(bus, |
| speech_synthesis::kSpeechSynthesizerServiceName, |
| speech_synthesis::kSpeechSynthesizerServicePath, |
| speech_synthesis::kSpeechSynthesizerInterface); |
| DCHECK(tts_proxy.gproxy()) << "Failed to acquire proxy"; |
| if (!::org_chromium_SpeechSynthesizerInterface_stop( |
| tts_proxy.gproxy(), NULL)) { |
| return false; |
| } |
| return true; |
| } |
| |
| bool IsSpeaking() { |
| g_type_init(); |
| chromeos::dbus::BusConnection bus = chromeos::dbus::GetSystemBusConnection(); |
| chromeos::dbus::Proxy tts_proxy(bus, |
| speech_synthesis::kSpeechSynthesizerServiceName, |
| speech_synthesis::kSpeechSynthesizerServicePath, |
| speech_synthesis::kSpeechSynthesizerInterface); |
| DCHECK(tts_proxy.gproxy()) << "Failed to acquire proxy"; |
| gboolean done; |
| return ::org_chromium_SpeechSynthesizerInterface_is_speaking( |
| tts_proxy.gproxy(), &done, NULL); |
| } |
| |
| extern "C" |
| bool ChromeOSSpeak(const char* text) { |
| return Speak(text); |
| } |
| |
| extern "C" |
| bool ChromeOSStop() { |
| return Stop(); |
| } |
| |
| extern "C" |
| bool ChromeOSIsSpeaking() { |
| return IsSpeaking(); |
| } |
| |
| extern "C" |
| void ChromeOSWaitUntilFinished() { |
| while (IsSpeaking()) { |
| usleep(100000); // Wait for 100 ms = 100000 us |
| } |
| } |
| |
| } // namespace chromeos |
| |