SpeechSource.h

Go to the documentation of this file.
00001 /* ========================================================================
00002  * Copyright (c) 2006,
00003  * Institute for Computer Graphics and Vision
00004  * Graz University of Technology
00005  * All rights reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions are
00009  * met:
00010  *
00011  * Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the following disclaimer.
00013  *
00014  * Redistributions in binary form must reproduce the above copyright
00015  * notice, this list of conditions and the following disclaimer in the
00016  * documentation and/or other materials provided with the distribution.
00017  *
00018  * Neither the name of the Graz University of Technology nor the names of
00019  * its contributors may be used to endorse or promote products derived from
00020  * this software without specific prior written permission.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00023  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00024  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00025  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00026  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  * ========================================================================
00034  * PROJECT: OpenTracker
00035  * ======================================================================== */
00042 /* ======================================================================= */
00043 
00071 #ifndef _SPEECHSOURCE_H
00072 #define _SPEECHSOURCE_H
00073 
00074 #include "../OpenTracker.h"
00075 
00076 #include "SpeechDef.h"
00077 #include "SpeechCore.h"
00078 #include "SpeechSet.h"
00079 #include "SpeechVoice.h"
00080 
00089 #ifndef OT_NO_SPEECH_SUPPORT
00090 
00091 
00092 namespace ot {
00093 
00094     class OPENTRACKER_API SpeechSource : public Node
00095     {
00096         // Members
00097     public:
00099         SpeechModule *m_SpeechModule;
00100 
00102         SpeechSetBase *m_SpeechSet;
00104         Event event;
00106         std::string command;
00107 
00108         // Methods
00109     protected:
00114         SpeechSource(SpeechModule *p_SpeechModule, SpeechSetBase *p_SpeechSet) :
00115             Node(),
00116             m_SpeechModule(p_SpeechModule),
00117             m_SpeechSet(p_SpeechSet)
00118         {
00119             assert(m_SpeechModule); // must be a valid pointer
00120             assert(m_SpeechSet);    // must be a valid pointer
00121         }
00122     public:
00127         int isEventGenerator()
00128         {
00129             return 1;
00130         }
00131 
00135         bool push()
00136         {
00137             if(m_SpeechSet->GetReco(command))
00138             {
00139                 //m_SpeechModule->Speak(command.c_str(), true); // TEST only
00140 
00141                 long commandId = m_SpeechSet->GetCommandId(command.c_str());
00142                 unsigned long speechSetId = m_SpeechSet->GetId();
00143                 std::string commandName;
00144                 bool success = m_SpeechModule->GetCommand(commandId, speechSetId, commandName);
00145                 std::string speechSetName(m_SpeechSet->GetName());
00146 
00147                 event.setButton(1);
00148                 event.setAttribute("commandId", commandId);
00149                 event.setAttribute("speechSetId", speechSetId);
00150                 event.setAttribute("speechSetName", speechSetName);
00151                 if (success)
00152                     event.setAttribute("commandName", commandName);
00153 
00154                 printf("SR: SpeechSource::push, SpeechSetId = '%lu', SpeechSetName = '%s', CommandId = %li, Command = '%s'\n",
00155                        speechSetId, speechSetName.c_str(), commandId, commandName.c_str());
00156                 event.timeStamp();
00157                 updateObservers(event);
00158 
00159                 return(true);
00160             }
00161             return(false);
00162         }
00163 
00164         void push2()
00165         {
00166             // Fire a second time with no button pressed
00167             //printf("SpeechSource::push2\n");
00168 
00169             long commandId = m_SpeechSet->GetCommandId(command.c_str());
00170             unsigned long speechSetId = m_SpeechSet->GetId();
00171             std::string commandName;
00172             bool success = m_SpeechModule->GetCommand(commandId, speechSetId, commandName);
00173             std::string speechSetName(m_SpeechSet->GetName());
00174 
00175             event.setButton(0);
00176             event.setAttribute("commandId", commandId);
00177             event.setAttribute("speechSetId", speechSetId);
00178             event.setAttribute("speechSetName", speechSetName);
00179             if (success)
00180                 event.setAttribute("commandName", commandName);
00181 
00182             //printf("SR: SpeechSource::push, SpeechSetId = '%i', SpeechSetName = '%s', CommandId = %i, Command = '%s'\n",
00183             //       speechSetId, speechSetName.c_str(), commandId, commandName.c_str());
00184             event.timeStamp();
00185             updateObservers(event);
00186 
00187         }
00188 
00189         friend class SpeechModule;
00190     };
00191 
00192 } // namespace ot
00193 
00194 
00195 #endif //OT_NO_SPEECH_SUPPORT
00196 
00197 
00198 #endif
00199 
00200 /* 
00201  * ------------------------------------------------------------
00202  *   End of SpeechSource.h
00203  * ------------------------------------------------------------
00204  *   Automatic Emacs configuration follows.
00205  *   Local Variables:
00206  *   mode:c++
00207  *   c-basic-offset: 4
00208  *   eval: (c-set-offset 'substatement-open 0)
00209  *   eval: (c-set-offset 'case-label '+)
00210  *   eval: (c-set-offset 'statement 'c-lineup-runin-statements)
00211  *   eval: (setq indent-tabs-mode nil)
00212  *   End:
00213  * ------------------------------------------------------------ 
00214  */

Generated on Wed Feb 28 15:18:50 2007 for NaviTrack by  doxygen 1.4.6