-
Notifications
You must be signed in to change notification settings - Fork 15
/
audioDetectionConfig.js
160 lines (118 loc) · 6.12 KB
/
audioDetectionConfig.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/**
* audioDetectionConfig.js
*
* configuration parameters
*/
/*
SAMPLE_POLLING_MSECS
polling time clock in milliseconds. Is the sampling rate to run speech detection calculations.
█
█ █ █
█ █ █ █
█ █ █ █ █
█ █ █ █ █ █ █
█ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █
<--><--><--><--><--><--><--><--><--><--><--><-->
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | | | |
*/
const SAMPLE_POLLING_MSECS = 50
/*
MAX_INTERSPEECH_SILENCE_MSECS
elapsed time in milliseconds of silence (pause) between continuous blocks of signal.
This is to decide when to stop recording of a speech made by multiple audio chunks separated by pauses.
That elapsed is used also to decide if a full speech is concluded, generating event 'stoprecording'.
█ chunk 1 █
█ █ █ █ █ █ █ chunk 2 █
█ █ █ █ █ █ █ █ █ █ █ █ chunk 3
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
<-> <--------> <-------->
^ silence silence ^
| ^ ^ |
speechstart | | speechstop
| |
MAX_INTERSPEECH_SILENCE_MSECS POST_SPEECH_MSECS
*/
const MAX_INTERSPEECH_SILENCE_MSECS = 600
const POST_SPEECH_MSECS = MAX_INTERSPEECH_SILENCE_MSECS
/*
PRERECORDSTART_MSECS
elapsed time in milliseconds before the speechstart event.
█ chunk 1 █
█ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ chunk 2 █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ chunk 3
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
<--------> <-> <--------> <-------->
^ silence ^ ^
| ^ | |
| | speechstart speechstop
| |
| PRERECORDSTART_MSECS
|
prerecordstart
*/
const PRERECORDSTART_MSECS = 600
/*
MIN_SIGNAL_DURATION
minimum elapsed time in millisecond for an audio signal block.
In terms of speech, it corresponds to a letter spelling ('b'),
a number splelling ('two'), a 'yes'/'no' speech.
It could be usefule to purge out background clicks/noises.
If a signal block chain sample length is less than that value,
the event 'abortrecording' is generated.
█
█ █ █ █ chunk 1 █
█ █ █ █ █ █ █ █ chunk 2 █
█ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ chunk 3
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
<---> <--->
^
|
MIN_SIGNAL_DURATION
*/
const MIN_SIGNAL_DURATION = 400
/*
VOLUME_MUTE
VOLUME_SILENCE
VOLUME_SIGNAL
Volume Thresholds levels, for
signal (speech)
silence (background noise)
mute (microphone off)
*/
const VOLUME_SIGNAL = 0.02
const VOLUME_SILENCE = 0.001
const VOLUME_MUTE = 0.0001
/*
MIN_AVERAGE_SIGNAL_VOLUME
Minimum volume vale (in average) of a signal block chain.
It is to calculate if a signal block contains speech or just noise.
If a signal block chain sample doesn't exceed that threshold value,
the event 'abortrecording' is generated.
*/
const MIN_AVERAGE_SIGNAL_VOLUME = 0.04
const DEFAULT_PARAMETERS_CONFIGURATION = {
timeoutMsecs: SAMPLE_POLLING_MSECS,
prespeechstartMsecs: PRERECORDSTART_MSECS,
speakingMinVolume: VOLUME_SIGNAL,
silenceVolume: VOLUME_SILENCE,
muteVolume: VOLUME_MUTE,
recordingEnabled: true
}