/** * @author Gwennael Gate * Copyright (c) Aldebaran Robotics 2010 */ #include "alsoundbasedreaction.h" #include #include #include #include #include ALSoundBasedReaction::ALSoundBasedReaction(boost::shared_ptr broker, const std::string& name) : ALSoundExtractor(broker, name) { /// This line will display a description of this module on the web page of the robot setModuleDescription("This module launch a texttospeech command when a " "sudden and significative noise is heard."); } void ALSoundBasedReaction::init() { /// Setting up the appropriate language fProxyToTextToSpeech.setLanguage("English"); audioDevice->callVoid("setClientPreferences", getName(), //Name of this module 16000, //16000 Hz requested (int)FRONTCHANNEL, //Front Channels requested 0 //Deinterleaving is not needed here ); #ifdef SOUNDBASEDREACTION_IS_REMOTE qi::Application::atStop(boost::bind(&ALSoundBasedReaction::stopDetection, this)); #endif startDetection(); } ALSoundBasedReaction::~ALSoundBasedReaction() { stopDetection(); } /// This function will be automatically called by the module ALAudioDevice /// every 170ms with the appropriate audio buffer (front channel at 16000Hz) void ALSoundBasedReaction::process(const int & nbOfChannels, const int & nbrOfSamplesByChannel, const AL_SOUND_FORMAT * buffer, const ALValue & timeStamp) { /// Compute the maximum value of the front microphone signal. int maxValueFront = 0; for(int i = 0 ; i < nbrOfSamplesByChannel ; i++) { if(buffer[i] > maxValueFront) { maxValueFront = buffer[i]; } } /// Print it in the console /// (Naoqi needs to be launched in console mode to see the log) std::cout << "maxvalue : " << maxValueFront << std::endl; /// Launch a texttospeech command when it is appropriate if(maxValueFront > 10000) { fProxyToTextToSpeech.say("Hello there!"); } }