OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 const int kChunksPerSecond = 100; | 57 const int kChunksPerSecond = 100; |
58 const char kUsage[] = | 58 const char kUsage[] = |
59 "Command-line tool to run audio processing on WAV files. Accepts either\n" | 59 "Command-line tool to run audio processing on WAV files. Accepts either\n" |
60 "an input capture WAV file or protobuf debug dump and writes to an output\n" | 60 "an input capture WAV file or protobuf debug dump and writes to an output\n" |
61 "WAV file.\n" | 61 "WAV file.\n" |
62 "\n" | 62 "\n" |
63 "All components are disabled by default. If any bi-directional components\n" | 63 "All components are disabled by default. If any bi-directional components\n" |
64 "are enabled, only debug dump files are permitted."; | 64 "are enabled, only debug dump files are permitted."; |
65 | 65 |
| 66 // Returns a StreamConfig corresponding to wav_file if it's non-nullptr. |
| 67 // Otherwise returns a default initialized StreamConfig. |
| 68 StreamConfig MakeStreamConfig(const WavFile* wav_file) { |
| 69 if (wav_file) { |
| 70 return {wav_file->sample_rate(), wav_file->num_channels()}; |
| 71 } |
| 72 return {}; |
| 73 } |
| 74 |
66 } // namespace | 75 } // namespace |
67 | 76 |
68 int main(int argc, char* argv[]) { | 77 int main(int argc, char* argv[]) { |
69 google::SetUsageMessage(kUsage); | 78 google::SetUsageMessage(kUsage); |
70 google::ParseCommandLineFlags(&argc, &argv, true); | 79 google::ParseCommandLineFlags(&argc, &argv, true); |
71 | 80 |
72 if (!((FLAGS_i.empty()) ^ (FLAGS_dump.empty()))) { | 81 if (!((FLAGS_i.empty()) ^ (FLAGS_dump.empty()))) { |
73 fprintf(stderr, | 82 fprintf(stderr, |
74 "An input file must be specified with either -i or -dump.\n"); | 83 "An input file must be specified with either -i or -dump.\n"); |
75 return 1; | 84 return 1; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 out_rev_buf.reset(new ChannelBuffer<float>( | 164 out_rev_buf.reset(new ChannelBuffer<float>( |
156 rtc::CheckedDivExact(out_rev_file->sample_rate(), kChunksPerSecond), | 165 rtc::CheckedDivExact(out_rev_file->sample_rate(), kChunksPerSecond), |
157 out_rev_file->num_channels())); | 166 out_rev_file->num_channels())); |
158 out_rev_interleaved.resize(out_rev_buf->size()); | 167 out_rev_interleaved.resize(out_rev_buf->size()); |
159 } | 168 } |
160 | 169 |
161 TickTime processing_start_time; | 170 TickTime processing_start_time; |
162 TickInterval accumulated_time; | 171 TickInterval accumulated_time; |
163 int num_chunks = 0; | 172 int num_chunks = 0; |
164 | 173 |
165 const StreamConfig input_config = { | 174 const auto input_config = MakeStreamConfig(&in_file); |
166 in_file.sample_rate(), in_buf.num_channels(), | 175 const auto output_config = MakeStreamConfig(&out_file); |
167 }; | 176 const auto reverse_input_config = MakeStreamConfig(in_rev_file.get()); |
168 const StreamConfig output_config = { | 177 const auto reverse_output_config = MakeStreamConfig(out_rev_file.get()); |
169 out_file.sample_rate(), out_buf.num_channels(), | |
170 }; | |
171 | 178 |
172 StreamConfig reverse_input_config = {}; | |
173 StreamConfig reverse_output_config = {}; | |
174 if (process_reverse) { | |
175 reverse_input_config = {in_rev_file->sample_rate(), | |
176 in_rev_file->num_channels()}; | |
177 reverse_output_config = {out_rev_file->sample_rate(), | |
178 out_rev_file->num_channels()}; | |
179 } | |
180 while (in_file.ReadSamples(in_interleaved.size(), | 179 while (in_file.ReadSamples(in_interleaved.size(), |
181 &in_interleaved[0]) == in_interleaved.size()) { | 180 &in_interleaved[0]) == in_interleaved.size()) { |
182 // Have logs display the file time rather than wallclock time. | 181 // Have logs display the file time rather than wallclock time. |
183 trace_to_stderr.SetTimeSeconds(num_chunks * 1.f / kChunksPerSecond); | 182 trace_to_stderr.SetTimeSeconds(num_chunks * 1.f / kChunksPerSecond); |
184 FloatS16ToFloat(&in_interleaved[0], in_interleaved.size(), | 183 FloatS16ToFloat(&in_interleaved[0], in_interleaved.size(), |
185 &in_interleaved[0]); | 184 &in_interleaved[0]); |
186 Deinterleave(&in_interleaved[0], in_buf.num_frames(), | 185 Deinterleave(&in_interleaved[0], in_buf.num_frames(), |
187 in_buf.num_channels(), in_buf.channels()); | 186 in_buf.num_channels(), in_buf.channels()); |
188 if (process_reverse) { | 187 if (process_reverse) { |
189 in_rev_file->ReadSamples(in_rev_interleaved.size(), | 188 in_rev_file->ReadSamples(in_rev_interleaved.size(), |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 execution_time_ms * 1.f / num_chunks); | 230 execution_time_ms * 1.f / num_chunks); |
232 } | 231 } |
233 return 0; | 232 return 0; |
234 } | 233 } |
235 | 234 |
236 } // namespace webrtc | 235 } // namespace webrtc |
237 | 236 |
238 int main(int argc, char* argv[]) { | 237 int main(int argc, char* argv[]) { |
239 return webrtc::main(argc, argv); | 238 return webrtc::main(argc, argv); |
240 } | 239 } |
OLD | NEW |