OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 |
11 #include "webrtc/modules/audio_processing/transient/transient_suppressor.h" | 11 #include "webrtc/modules/audio_processing/transient/transient_suppressor.h" |
12 | 12 |
13 #include <stdlib.h> | 13 #include <stdlib.h> |
14 #include <stdio.h> | 14 #include <stdio.h> |
| 15 |
| 16 #include <memory> |
15 #include <string> | 17 #include <string> |
16 | 18 |
17 #include "gflags/gflags.h" | 19 #include "gflags/gflags.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "webrtc/base/scoped_ptr.h" | |
20 #include "webrtc/common_audio/include/audio_util.h" | 21 #include "webrtc/common_audio/include/audio_util.h" |
21 #include "webrtc/modules/audio_processing/agc/agc.h" | 22 #include "webrtc/modules/audio_processing/agc/agc.h" |
22 #include "webrtc/modules/include/module_common_types.h" | 23 #include "webrtc/modules/include/module_common_types.h" |
23 #include "webrtc/test/testsupport/fileutils.h" | 24 #include "webrtc/test/testsupport/fileutils.h" |
24 #include "webrtc/typedefs.h" | 25 #include "webrtc/typedefs.h" |
25 | 26 |
26 DEFINE_string(in_file_name, "", "PCM file that contains the signal."); | 27 DEFINE_string(in_file_name, "", "PCM file that contains the signal."); |
27 DEFINE_string(detection_file_name, | 28 DEFINE_string(detection_file_name, |
28 "", | 29 "", |
29 "PCM file that contains the detection signal."); | 30 "PCM file that contains the detection signal."); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 // [-1,1]. Return true iff all the buffers were filled completely. | 77 // [-1,1]. Return true iff all the buffers were filled completely. |
77 bool ReadBuffers(FILE* in_file, | 78 bool ReadBuffers(FILE* in_file, |
78 size_t audio_buffer_size, | 79 size_t audio_buffer_size, |
79 int num_channels, | 80 int num_channels, |
80 int16_t* audio_buffer, | 81 int16_t* audio_buffer, |
81 FILE* detection_file, | 82 FILE* detection_file, |
82 size_t detection_buffer_size, | 83 size_t detection_buffer_size, |
83 float* detection_buffer, | 84 float* detection_buffer, |
84 FILE* reference_file, | 85 FILE* reference_file, |
85 float* reference_buffer) { | 86 float* reference_buffer) { |
86 rtc::scoped_ptr<int16_t[]> tmpbuf; | 87 std::unique_ptr<int16_t[]> tmpbuf; |
87 int16_t* read_ptr = audio_buffer; | 88 int16_t* read_ptr = audio_buffer; |
88 if (num_channels > 1) { | 89 if (num_channels > 1) { |
89 tmpbuf.reset(new int16_t[num_channels * audio_buffer_size]); | 90 tmpbuf.reset(new int16_t[num_channels * audio_buffer_size]); |
90 read_ptr = tmpbuf.get(); | 91 read_ptr = tmpbuf.get(); |
91 } | 92 } |
92 if (fread(read_ptr, | 93 if (fread(read_ptr, |
93 sizeof(*read_ptr), | 94 sizeof(*read_ptr), |
94 num_channels * audio_buffer_size, | 95 num_channels * audio_buffer_size, |
95 in_file) != num_channels * audio_buffer_size) { | 96 in_file) != num_channels * audio_buffer_size) { |
96 return false; | 97 return false; |
97 } | 98 } |
98 // De-interleave. | 99 // De-interleave. |
99 if (num_channels > 1) { | 100 if (num_channels > 1) { |
100 for (int i = 0; i < num_channels; ++i) { | 101 for (int i = 0; i < num_channels; ++i) { |
101 for (size_t j = 0; j < audio_buffer_size; ++j) { | 102 for (size_t j = 0; j < audio_buffer_size; ++j) { |
102 audio_buffer[i * audio_buffer_size + j] = | 103 audio_buffer[i * audio_buffer_size + j] = |
103 read_ptr[i + j * num_channels]; | 104 read_ptr[i + j * num_channels]; |
104 } | 105 } |
105 } | 106 } |
106 } | 107 } |
107 if (detection_file) { | 108 if (detection_file) { |
108 rtc::scoped_ptr<int16_t[]> ibuf(new int16_t[detection_buffer_size]); | 109 std::unique_ptr<int16_t[]> ibuf(new int16_t[detection_buffer_size]); |
109 if (fread(ibuf.get(), sizeof(ibuf[0]), detection_buffer_size, | 110 if (fread(ibuf.get(), sizeof(ibuf[0]), detection_buffer_size, |
110 detection_file) != detection_buffer_size) | 111 detection_file) != detection_buffer_size) |
111 return false; | 112 return false; |
112 for (size_t i = 0; i < detection_buffer_size; ++i) | 113 for (size_t i = 0; i < detection_buffer_size; ++i) |
113 detection_buffer[i] = ibuf[i]; | 114 detection_buffer[i] = ibuf[i]; |
114 } | 115 } |
115 if (reference_file) { | 116 if (reference_file) { |
116 rtc::scoped_ptr<int16_t[]> ibuf(new int16_t[audio_buffer_size]); | 117 std::unique_ptr<int16_t[]> ibuf(new int16_t[audio_buffer_size]); |
117 if (fread(ibuf.get(), sizeof(ibuf[0]), audio_buffer_size, reference_file) | 118 if (fread(ibuf.get(), sizeof(ibuf[0]), audio_buffer_size, reference_file) |
118 != audio_buffer_size) | 119 != audio_buffer_size) |
119 return false; | 120 return false; |
120 S16ToFloat(ibuf.get(), audio_buffer_size, reference_buffer); | 121 S16ToFloat(ibuf.get(), audio_buffer_size, reference_buffer); |
121 } | 122 } |
122 return true; | 123 return true; |
123 } | 124 } |
124 | 125 |
125 // Write a number of samples to an open signed 16-bit host-endian PCM file. | 126 // Write a number of samples to an open signed 16-bit host-endian PCM file. |
126 static void WritePCM(FILE* f, | 127 static void WritePCM(FILE* f, |
127 size_t num_samples, | 128 size_t num_samples, |
128 int num_channels, | 129 int num_channels, |
129 const float* buffer) { | 130 const float* buffer) { |
130 rtc::scoped_ptr<int16_t[]> ibuf(new int16_t[num_channels * num_samples]); | 131 std::unique_ptr<int16_t[]> ibuf(new int16_t[num_channels * num_samples]); |
131 // Interleave. | 132 // Interleave. |
132 for (int i = 0; i < num_channels; ++i) { | 133 for (int i = 0; i < num_channels; ++i) { |
133 for (size_t j = 0; j < num_samples; ++j) { | 134 for (size_t j = 0; j < num_samples; ++j) { |
134 ibuf[i + j * num_channels] = FloatS16ToS16(buffer[i * num_samples + j]); | 135 ibuf[i + j * num_channels] = FloatS16ToS16(buffer[i * num_samples + j]); |
135 } | 136 } |
136 } | 137 } |
137 fwrite(ibuf.get(), sizeof(ibuf[0]), num_channels * num_samples, f); | 138 fwrite(ibuf.get(), sizeof(ibuf[0]), num_channels * num_samples, f); |
138 } | 139 } |
139 | 140 |
140 // This application tests the transient suppression by providing a processed | 141 // This application tests the transient suppression by providing a processed |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 TransientSuppressor suppressor; | 176 TransientSuppressor suppressor; |
176 suppressor.Initialize( | 177 suppressor.Initialize( |
177 FLAGS_sample_rate_hz, detection_rate_hz, FLAGS_num_channels); | 178 FLAGS_sample_rate_hz, detection_rate_hz, FLAGS_num_channels); |
178 | 179 |
179 const size_t audio_buffer_size = | 180 const size_t audio_buffer_size = |
180 FLAGS_chunk_size_ms * FLAGS_sample_rate_hz / 1000; | 181 FLAGS_chunk_size_ms * FLAGS_sample_rate_hz / 1000; |
181 const size_t detection_buffer_size = | 182 const size_t detection_buffer_size = |
182 FLAGS_chunk_size_ms * detection_rate_hz / 1000; | 183 FLAGS_chunk_size_ms * detection_rate_hz / 1000; |
183 | 184 |
184 // int16 and float variants of the same data. | 185 // int16 and float variants of the same data. |
185 rtc::scoped_ptr<int16_t[]> audio_buffer_i( | 186 std::unique_ptr<int16_t[]> audio_buffer_i( |
186 new int16_t[FLAGS_num_channels * audio_buffer_size]); | 187 new int16_t[FLAGS_num_channels * audio_buffer_size]); |
187 rtc::scoped_ptr<float[]> audio_buffer_f( | 188 std::unique_ptr<float[]> audio_buffer_f( |
188 new float[FLAGS_num_channels * audio_buffer_size]); | 189 new float[FLAGS_num_channels * audio_buffer_size]); |
189 | 190 |
190 rtc::scoped_ptr<float[]> detection_buffer, reference_buffer; | 191 std::unique_ptr<float[]> detection_buffer, reference_buffer; |
191 | 192 |
192 if (detection_file) | 193 if (detection_file) |
193 detection_buffer.reset(new float[detection_buffer_size]); | 194 detection_buffer.reset(new float[detection_buffer_size]); |
194 if (reference_file) | 195 if (reference_file) |
195 reference_buffer.reset(new float[audio_buffer_size]); | 196 reference_buffer.reset(new float[audio_buffer_size]); |
196 | 197 |
197 while (ReadBuffers(in_file, | 198 while (ReadBuffers(in_file, |
198 audio_buffer_size, | 199 audio_buffer_size, |
199 FLAGS_num_channels, | 200 FLAGS_num_channels, |
200 audio_buffer_i.get(), | 201 audio_buffer_i.get(), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 } | 242 } |
242 | 243 |
243 } // namespace webrtc | 244 } // namespace webrtc |
244 | 245 |
245 int main(int argc, char* argv[]) { | 246 int main(int argc, char* argv[]) { |
246 google::SetUsageMessage(webrtc::kUsage); | 247 google::SetUsageMessage(webrtc::kUsage); |
247 google::ParseCommandLineFlags(&argc, &argv, true); | 248 google::ParseCommandLineFlags(&argc, &argv, true); |
248 webrtc::void_main(); | 249 webrtc::void_main(); |
249 return 0; | 250 return 0; |
250 } | 251 } |
OLD | NEW |