Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(709)

Side by Side Diff: webrtc/modules/audio_processing/vad/vad_circular_buffer.h

Issue 1212543002: Pull the Voice Activity Detector out from the AGC (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AGC_CIRCULAR_BUFFER_H_ 11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_CIRCULAR_BUFFER_H_ 12 #define WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_
13 13
14 #include "webrtc/base/scoped_ptr.h" 14 #include "webrtc/base/scoped_ptr.h"
15 15
16 namespace webrtc { 16 namespace webrtc {
17 17
18 // A circular buffer tailored to the need of this project. It stores last 18 // A circular buffer tailored to the need of this project. It stores last
19 // K samples of the input, and keeps track of the mean of the last samples. 19 // K samples of the input, and keeps track of the mean of the last samples.
20 // 20 //
21 // It is used in class "PitchBasedActivity" to keep track of posterior 21 // It is used in class "PitchBasedActivity" to keep track of posterior
22 // probabilities in the past few seconds. The posterior probabilities are used 22 // probabilities in the past few seconds. The posterior probabilities are used
23 // to recursively update prior probabilities. 23 // to recursively update prior probabilities.
24 class AgcCircularBuffer { 24 class VadCircularBuffer {
25 public: 25 public:
26 static AgcCircularBuffer* Create(int buffer_size); 26 static VadCircularBuffer* Create(int buffer_size);
27 ~AgcCircularBuffer(); 27 ~VadCircularBuffer();
28 28
29 // If buffer is wrapped around. 29 // If buffer is wrapped around.
30 bool is_full() const { return is_full_; } 30 bool is_full() const { return is_full_; }
31 // Get the oldest entry in the buffer. 31 // Get the oldest entry in the buffer.
32 double Oldest() const; 32 double Oldest() const;
33 // Insert new value into the buffer. 33 // Insert new value into the buffer.
34 void Insert(double value); 34 void Insert(double value);
35 // Reset buffer, forget the past, start fresh. 35 // Reset buffer, forget the past, start fresh.
36 void Reset(); 36 void Reset();
37 37
38 // The mean value of the elements in the buffer. The return value is zero if 38 // The mean value of the elements in the buffer. The return value is zero if
39 // buffer is empty, i.e. no value is inserted. 39 // buffer is empty, i.e. no value is inserted.
40 double Mean(); 40 double Mean();
41 // Remove transients. If the values exceed |val_threshold| for a period 41 // Remove transients. If the values exceed |val_threshold| for a period
42 // shorter then or equal to |width_threshold|, then that period is considered 42 // shorter then or equal to |width_threshold|, then that period is considered
43 // transient and set to zero. 43 // transient and set to zero.
44 int RemoveTransient(int width_threshold, double val_threshold); 44 int RemoveTransient(int width_threshold, double val_threshold);
45 45
46 private: 46 private:
47 explicit AgcCircularBuffer(int buffer_size); 47 explicit VadCircularBuffer(int buffer_size);
48 // Get previous values. |index = 0| corresponds to the most recent 48 // Get previous values. |index = 0| corresponds to the most recent
49 // insertion. |index = 1| is the one before the most recent insertion, and 49 // insertion. |index = 1| is the one before the most recent insertion, and
50 // so on. 50 // so on.
51 int Get(int index, double* value) const; 51 int Get(int index, double* value) const;
52 // Set a given position to |value|. |index| is interpreted as above. 52 // Set a given position to |value|. |index| is interpreted as above.
53 int Set(int index, double value); 53 int Set(int index, double value);
54 // Return the number of valid elements in the buffer. 54 // Return the number of valid elements in the buffer.
55 int BufferLevel(); 55 int BufferLevel();
56 56
57 // Convert an index with the interpretation as get() method to the 57 // Convert an index with the interpretation as get() method to the
58 // corresponding linear index. 58 // corresponding linear index.
59 int ConvertToLinearIndex(int* index) const; 59 int ConvertToLinearIndex(int* index) const;
60 60
61 rtc::scoped_ptr<double[]> buffer_; 61 rtc::scoped_ptr<double[]> buffer_;
62 bool is_full_; 62 bool is_full_;
63 int index_; 63 int index_;
64 int buffer_size_; 64 int buffer_size_;
65 double sum_; 65 double sum_;
66 }; 66 };
67 67
68 } // namespace webrtc 68 } // namespace webrtc
69 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_CIRCULAR_BUFFER_H_ 69 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698