| /* | |
| * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_ | |
| #define WEBRTC_MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_ | |
| #include "webrtc/modules/interface/module_common_types.h" | |
| #include "webrtc/typedefs.h" | |
| namespace webrtc { | |
| class TypingDetection { | |
| public: | |
| TypingDetection(); | |
| virtual ~TypingDetection(); | |
| // Run the detection algortihm. Shall be called every 10 ms. Returns true if | |
| // typing is detected, or false if not, based on the update period as set with | |
| // SetParameters(). See |report_detection_update_period_| description below. | |
| bool Process(bool key_pressed, bool vad_activity); | |
| // Gets the time in seconds since the last detection. | |
| int TimeSinceLastDetectionInSeconds(); | |
| // Sets the algorithm parameters. A parameter value of 0 leaves it unchanged. | |
| // See the correspondning member variables below for descriptions. | |
| void SetParameters(int time_window, | |
| int cost_per_typing, | |
| int reporting_threshold, | |
| int penalty_decay, | |
| int type_event_delay, | |
| int report_detection_update_period); | |
| private: | |
| int time_active_; | |
| int time_since_last_typing_; | |
| int penalty_counter_; | |
| // Counter since last time the detection status reported by Process() was | |
| // updated. See also |report_detection_update_period_|. | |
| int counter_since_last_detection_update_; | |
| // The detection status to report. Updated every | |
| // |report_detection_update_period_| call to Process(). | |
| bool detection_to_report_; | |
| // What |detection_to_report_| should be set to next time it is updated. | |
| bool new_detection_to_report_; | |
| // Settable threshold values. | |
| // Number of 10 ms slots accepted to count as a hit. | |
| int time_window_; | |
| // Penalty added for a typing + activity coincide. | |
| int cost_per_typing_; | |
| // Threshold for |penalty_counter_|. | |
| int reporting_threshold_; | |
| // How much we reduce |penalty_counter_| every 10 ms. | |
| int penalty_decay_; | |
| // How old typing events we allow. | |
| int type_event_delay_; | |
| // Settable update period. | |
| // Number of 10 ms slots between each update of the detection status returned | |
| // by Process(). This inertia added to the algorithm is usually desirable and | |
| // provided so that consumers of the class don't have to implement that | |
| // themselves if they don't wish. | |
| // If set to 1, each call to Process() will return the detection status for | |
| // that 10 ms slot. | |
| // If set to N (where N > 1), the detection status returned from Process() | |
| // will remain the same until Process() has been called N times. Then, if none | |
| // of the last N calls to Process() has detected typing for each respective | |
| // 10 ms slot, Process() will return false. If at least one of the last N | |
| // calls has detected typing, Process() will return true. And that returned | |
| // status will then remain the same until the next N calls have been done. | |
| int report_detection_update_period_; | |
| }; | |
| } // namespace webrtc | |
| #endif // #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_ |