From 2a8ffa539da855b556b421eb5d1efa3e7881b90f Mon Sep 17 00:00:00 2001 From: Mirko Waechter <mirko.waechter@kit.edu> Date: Mon, 10 Dec 2018 19:25:03 +0100 Subject: [PATCH] SpeechObserver observers now also all recognized text --- .../components/units/SpeechObserver.cpp | 38 +++++++++++++++++-- .../components/units/SpeechObserver.h | 20 ++++++++-- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/source/RobotAPI/components/units/SpeechObserver.cpp b/source/RobotAPI/components/units/SpeechObserver.cpp index 15b2766b4..dec46e56a 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 ef6e6580d..4378e568a 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(); -- GitLab