blob: d8fb3592c9644d4d2ab68c7c9e418efa684357f6 [file] [log] [blame]
henrikg@webrtc.orgc6937042014-01-30 09:50:46 +00001/*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_
12#define MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_
henrikg@webrtc.orgc6937042014-01-30 09:50:46 +000013
Mirko Bonadei3d255302018-10-11 10:50:45 +020014#include "rtc_base/system/rtc_export.h"
15
henrikg@webrtc.orgc6937042014-01-30 09:50:46 +000016namespace webrtc {
17
Mirko Bonadei3d255302018-10-11 10:50:45 +020018class RTC_EXPORT TypingDetection {
henrikg@webrtc.orgc6937042014-01-30 09:50:46 +000019 public:
20 TypingDetection();
21 virtual ~TypingDetection();
22
23 // Run the detection algortihm. Shall be called every 10 ms. Returns true if
24 // typing is detected, or false if not, based on the update period as set with
25 // SetParameters(). See |report_detection_update_period_| description below.
26 bool Process(bool key_pressed, bool vad_activity);
27
28 // Gets the time in seconds since the last detection.
29 int TimeSinceLastDetectionInSeconds();
30
31 // Sets the algorithm parameters. A parameter value of 0 leaves it unchanged.
32 // See the correspondning member variables below for descriptions.
33 void SetParameters(int time_window,
34 int cost_per_typing,
35 int reporting_threshold,
36 int penalty_decay,
37 int type_event_delay,
38 int report_detection_update_period);
39
40 private:
41 int time_active_;
42 int time_since_last_typing_;
43 int penalty_counter_;
44
45 // Counter since last time the detection status reported by Process() was
46 // updated. See also |report_detection_update_period_|.
47 int counter_since_last_detection_update_;
48
49 // The detection status to report. Updated every
50 // |report_detection_update_period_| call to Process().
51 bool detection_to_report_;
52
53 // What |detection_to_report_| should be set to next time it is updated.
54 bool new_detection_to_report_;
55
56 // Settable threshold values.
57
58 // Number of 10 ms slots accepted to count as a hit.
59 int time_window_;
60
61 // Penalty added for a typing + activity coincide.
62 int cost_per_typing_;
63
64 // Threshold for |penalty_counter_|.
65 int reporting_threshold_;
66
67 // How much we reduce |penalty_counter_| every 10 ms.
68 int penalty_decay_;
69
70 // How old typing events we allow.
71 int type_event_delay_;
72
73 // Settable update period.
74
75 // Number of 10 ms slots between each update of the detection status returned
76 // by Process(). This inertia added to the algorithm is usually desirable and
77 // provided so that consumers of the class don't have to implement that
78 // themselves if they don't wish.
79 // If set to 1, each call to Process() will return the detection status for
80 // that 10 ms slot.
81 // If set to N (where N > 1), the detection status returned from Process()
82 // will remain the same until Process() has been called N times. Then, if none
83 // of the last N calls to Process() has detected typing for each respective
84 // 10 ms slot, Process() will return false. If at least one of the last N
85 // calls has detected typing, Process() will return true. And that returned
86 // status will then remain the same until the next N calls have been done.
87 int report_detection_update_period_;
88};
89
90} // namespace webrtc
91
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020092#endif // #ifndef MODULES_AUDIO_PROCESSING_TYPING_DETECTION_H_