record_microphone_audio.cc
Go to the documentation of this file.
1 // Copyright (c) 2017, The Regents of the University of California
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name of the University of California nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA
19 // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 // POSSIBILITY OF SUCH DAMAGE.
26 
27 #include <cmath>
28 
29 #include "ros/ros.h"
30 #include "gcloud_speech_msgs/LinearPcm16Le16000Audio.h"
31 
33 #include "third_party/gflags.h"
34 #include "third_party/glog.h"
36 #include "util/statusor.h"
37 
39 
40 namespace speech = ::cogrob::cloud::speech;
42 
43 DEFINE_int32(mic_fatal_timeout_msec, 2000,
44  "Timeout (ms) to terminate the program if no sample is available.");
45 
46 int main(int argc, char *argv[]) {
47  google::InitGoogleLogging(argv[0]);
48  google::LogToStderr();
49  gflags::SetUsageMessage(
50  "Record audio and publish as LinearPcm16Le16000Audio message.");
51  gflags::SetVersionString("1.0.0");
52  gflags::ParseCommandLineFlags(&argc, &argv, true);
53 
54  ros::init(argc, argv, "record_audio");
55  ros::NodeHandle node_handle;
56 
58  speech::AudioRecorder recorder(&audio_queue);
59  ros::Publisher mic_pub =
61  ("/cogrob/microphone_audio", 10);
62 
63  while (ros::ok()) {
64  util::StatusOr<std::unique_ptr<AudioSample>> queue_result = std::move(
65  audio_queue.blocking_pop(FLAGS_mic_fatal_timeout_msec));
66  if (!queue_result.ok()) {
67  LOG(FATAL) << "Getting audio from microphone timed out.";
68  }
69  std::unique_ptr<AudioSample> sample = std::move(
70  queue_result.ConsumeValueOrDie());
71  LinearPcm16Le16000Audio audio_msg;
72  audio_msg.data = *sample;
73  mic_pub.publish(audio_msg);
74  }
75 }
int main(int argc, char *argv[])
void publish(const boost::shared_ptr< M > &message) const
T ConsumeValueOrDie()
Definition: statusor.h:299
bool ok() const
Definition: statusor.h:277
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
ROSCPP_DECL bool ok()
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
std::vector< uint8_t > AudioSample
Definition: audio_sample.h:43
DEFINE_int32(mic_fatal_timeout_msec, 2000,"Timeout (ms) to terminate the program if no sample is available.")


gcloud_speech_utils
Author(s):
autogenerated on Mon Jun 10 2019 13:20:56