/* * 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_