record_microphone_audio.cc
Go to the documentation of this file.
00001 // Copyright (c) 2017, The Regents of the University of California
00002 // All rights reserved.
00003 //
00004 // Redistribution and use in source and binary forms, with or without
00005 // modification, are permitted provided that the following conditions are met:
00006 // * Redistributions of source code must retain the above copyright
00007 //   notice, this list of conditions and the following disclaimer.
00008 // * Redistributions in binary form must reproduce the above copyright
00009 //   notice, this list of conditions and the following disclaimer in the
00010 //   documentation and/or other materials provided with the distribution.
00011 // * Neither the name of the University of California nor the
00012 //   names of its contributors may be used to endorse or promote products
00013 //   derived from this software without specific prior written permission.
00014 //
00015 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00016 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00017 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00018 // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA
00019 // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00020 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00021 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00022 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00023 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00024 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00025 // POSSIBILITY OF SUCH DAMAGE.
00026 
00027 #include <cmath>
00028 
00029 #include "ros/ros.h"
00030 #include "gcloud_speech_msgs/LinearPcm16Le16000Audio.h"
00031 
00032 #include "cogrob/cloud/speech/record_audio.h"
00033 #include "third_party/gflags.h"
00034 #include "third_party/glog.h"
00035 #include "util/simple_thread_safe_queue.h"
00036 #include "util/statusor.h"
00037 
00038 using gcloud_speech_msgs::LinearPcm16Le16000Audio;
00039 
00040 namespace speech = ::cogrob::cloud::speech;
00041 using speech::AudioSample;
00042 
00043 DEFINE_int32(mic_fatal_timeout_msec, 2000,
00044     "Timeout (ms) to terminate the program if no sample is available.");
00045 
00046 int main(int argc, char *argv[]) {
00047   google::InitGoogleLogging(argv[0]);
00048   google::LogToStderr();
00049   gflags::SetUsageMessage(
00050       "Record audio and publish as LinearPcm16Le16000Audio message.");
00051   gflags::SetVersionString("1.0.0");
00052   gflags::ParseCommandLineFlags(&argc, &argv, true);
00053 
00054   ros::init(argc, argv, "record_audio");
00055   ros::NodeHandle node_handle;
00056 
00057   util::SimpleThreadSafeQueue<std::unique_ptr<AudioSample>> audio_queue;
00058   speech::AudioRecorder recorder(&audio_queue);
00059   ros::Publisher mic_pub =
00060       node_handle.advertise<gcloud_speech_msgs::LinearPcm16Le16000Audio>
00061       ("/cogrob/microphone_audio", 10);
00062 
00063   while (ros::ok()) {
00064     util::StatusOr<std::unique_ptr<AudioSample>> queue_result = std::move(
00065         audio_queue.blocking_pop(FLAGS_mic_fatal_timeout_msec));
00066     if (!queue_result.ok()) {
00067       LOG(FATAL) << "Getting audio from microphone timed out.";
00068     }
00069     std::unique_ptr<AudioSample> sample = std::move(
00070         queue_result.ConsumeValueOrDie());
00071     LinearPcm16Le16000Audio audio_msg;
00072     audio_msg.data = *sample;
00073     mic_pub.publish(audio_msg);
00074   }
00075 }


gcloud_speech_utils
Author(s):
autogenerated on Thu Jun 6 2019 17:58:05