diff --git a/source/RobotAPI/components/units/SpeechObserver.cpp b/source/RobotAPI/components/units/SpeechObserver.cpp index 15b2766b4f07989833590f8a3e2a0aa3bbdd134a..dec46e56aa59676076607cf8fa7a280b9742737c 100644 --- a/source/RobotAPI/components/units/SpeechObserver.cpp +++ b/source/RobotAPI/components/units/SpeechObserver.cpp @@ -1,6 +1,6 @@ /* * This file is part of ArmarX. - * + * * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), * Karlsruhe Institute of Technology (KIT), all rights reserved. * @@ -23,6 +23,8 @@ #include "SpeechObserver.h" +#include <ArmarXCore/util/json/JSONObject.h> + using namespace armarx; SpeechObserver::SpeechObserver() @@ -33,6 +35,9 @@ void SpeechObserver::onInitObserver() { usingTopic(getProperty<std::string>("TextToSpeechTopicName").getValue()); usingTopic(getProperty<std::string>("TextToSpeechStateTopicName").getValue()); + auto proxy = getObjectAdapter()->addWithUUID(new SpeechListenerImpl(this)); + getIceManager()->subscribeTopic(proxy, "Speech_Commands"); + } void SpeechObserver::onConnectObserver() @@ -42,12 +47,16 @@ void SpeechObserver::onConnectObserver() offerDataFieldWithDefault("TextToSpeech", "TextChangeCounter", Variant(reportTextCounter), "Counter for text updates"); offerDataFieldWithDefault("TextToSpeech", "State", Variant(""), "Current TTS state"); - offerDataFieldWithDefault("TextToSpeech", "StateChangeCounter", Variant(reportStateCounter), "Counter for text updates"); + offerDataFieldWithDefault("TextToSpeech", "StateChangeCounter", Variant(reportStateCounter), "Counter for state updates"); + + offerChannel("SpeechToText", "SpeechToText channel"); + offerDataFieldWithDefault("TextToSpeech", "RecognizedText", Variant(std::string()), "Text recognized by the SpeechRecogntion"); + } std::string SpeechObserver::SpeechStateToString(TextToSpeechStateType state) { - switch(state) + switch (state) { case eIdle: return "Idle"; @@ -70,7 +79,7 @@ void SpeechObserver::reportState(TextToSpeechStateType state, const Ice::Current updateChannel("TextToSpeech"); } -void SpeechObserver::reportText(const std::string& text, const Ice::Current&) +void SpeechObserver::reportText(const std::string& text, const Ice::Current& c) { ScopedLock lock(dataMutex); reportTextCounter++; @@ -84,3 +93,24 @@ void SpeechObserver::reportTextWithParams(const std::string& text, const Ice::St ScopedLock lock(dataMutex); ARMARX_WARNING << "reportTextWithParams is not implemented"; } + +SpeechListenerImpl::SpeechListenerImpl(SpeechObserver* obs) : + obs(obs) +{ + +} + + +void armarx::SpeechListenerImpl::reportText(const std::string& text, const Ice::Current&) +{ + ScopedLock lock(dataMutex); + JSONObject json; + json.fromString(text); + obs->setDataField("SpeechToText", "RecognizedText", Variant(json.getString("text"))); +} + +void armarx::SpeechListenerImpl::reportTextWithParams(const std::string&, const Ice::StringSeq&, const Ice::Current&) +{ + ScopedLock lock(dataMutex); + ARMARX_WARNING << deactivateSpam(100) << "reportTextWithParams is not implemented"; +} diff --git a/source/RobotAPI/components/units/SpeechObserver.h b/source/RobotAPI/components/units/SpeechObserver.h index ef6e6580d23f0ec7a04f93daa2bddc38a7342565..4378e568ac6ba3e468aded4852b24092e2f25474 100644 --- a/source/RobotAPI/components/units/SpeechObserver.h +++ b/source/RobotAPI/components/units/SpeechObserver.h @@ -1,6 +1,6 @@ /* * This file is part of ArmarX. - * + * * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), * Karlsruhe Institute of Technology (KIT), all rights reserved. * @@ -39,11 +39,25 @@ namespace armarx defineOptionalProperty<std::string>("TextToSpeechStateTopicName", "TextToSpeechState", "Name of the TextToSpeechStateTopic"); } }; + class SpeechObserver; + class SpeechListenerImpl : public TextListenerInterface + { + public: + SpeechListenerImpl(SpeechObserver* obs); + protected: + SpeechObserver* obs; + Mutex dataMutex; + // TextListenerInterface interface + public: + void reportText(const std::string&, const Ice::Current&) override; + void reportTextWithParams(const std::string&, const Ice::StringSeq&, const Ice::Current&) override; + }; class SpeechObserver : - virtual public Observer, - virtual public SpeechObserverInterface + virtual public Observer, + virtual public SpeechObserverInterface { + friend class SpeechListenerImpl; public: SpeechObserver();