jarvis-cli added for dev tests

This commit is contained in:
Priler 2026-01-05 02:23:32 +05:00
parent 03da13ed73
commit 36acacf259
39 changed files with 369652 additions and 5 deletions

147
Cargo.lock generated
View file

@ -137,6 +137,56 @@ dependencies = [
"libc",
]
[[package]]
name = "anstream"
version = "0.6.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"is_terminal_polyfill",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
[[package]]
name = "anstyle-parse"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
"windows-sys 0.61.2",
]
[[package]]
name = "anyhow"
version = "1.0.100"
@ -725,6 +775,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "colorchoice"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "combine"
version = "4.6.7"
@ -1359,6 +1415,29 @@ dependencies = [
"syn 2.0.113",
]
[[package]]
name = "env_filter"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2"
dependencies = [
"log",
"regex",
]
[[package]]
name = "env_logger"
version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
dependencies = [
"anstream",
"anstyle",
"env_filter",
"jiff",
"log",
]
[[package]]
name = "equator"
version = "0.4.2"
@ -2724,6 +2803,12 @@ dependencies = [
"once_cell",
]
[[package]]
name = "is_terminal_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itertools"
version = "0.14.0"
@ -2759,6 +2844,17 @@ dependencies = [
"winit",
]
[[package]]
name = "jarvis-cli"
version = "0.1.0"
dependencies = [
"env_logger",
"jarvis-core",
"log",
"parking_lot",
"tokio",
]
[[package]]
name = "jarvis-core"
version = "0.1.0"
@ -2829,6 +2925,30 @@ dependencies = [
"system-deps 6.2.2",
]
[[package]]
name = "jiff"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a87d9b8105c23642f50cbbae03d1f75d8422c5cb98ce7ee9271f7ff7505be6b8"
dependencies = [
"jiff-static",
"log",
"portable-atomic",
"portable-atomic-util",
"serde_core",
]
[[package]]
name = "jiff-static"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b787bebb543f8969132630c51fd0afab173a86c6abae56ff3b9e5e3e3f9f6e58"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.113",
]
[[package]]
name = "jni"
version = "0.21.1"
@ -3935,6 +4055,12 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "once_cell_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "open"
version = "5.3.3"
@ -4319,6 +4445,21 @@ dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "portable-atomic"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950"
[[package]]
name = "portable-atomic-util"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
dependencies = [
"portable-atomic",
]
[[package]]
name = "potential_utf"
version = "0.1.4"
@ -6808,6 +6949,12 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.19.0"

View file

@ -3,6 +3,7 @@ members = [
"crates/jarvis-core",
"crates/jarvis-app",
"crates/jarvis-gui",
"crates/jarvis-cli"
]
resolver = "2"

View file

@ -0,0 +1,14 @@
[package]
name = "jarvis-cli"
version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
edition.workspace = true
[dependencies]
jarvis-core = { path = "../jarvis-core", default-features = false, features = ["intent"]}
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
log.workspace = true
env_logger = "0.11"
parking_lot.workspace = true

View file

@ -0,0 +1,194 @@
use std::{io::{self, Write}, sync::Arc};
use parking_lot::RwLock;
use jarvis_core::{COMMANDS_LIST, DB, JCommandsList, commands, config, db, intent};
fn print_help() {
println!("
--## Jarvis CLI - Testing Tool ##--
Commands:
classify <text> - Test intent classification
execute <text> - Simulate voice input and execute command
list - List all loaded commands
phrases - List all training phrases
hash - Show commands hash
reload - Reload commands from disk
help - Show this help
exit - Exit the CLI
");
}
fn list_commands(commands: &Vec<JCommandsList>) {
println!("\n[ Loaded Commands ]");
for cmd_list in commands {
println!(" 📁 {}", cmd_list.path.display());
for cmd in &cmd_list.commands {
println!(" ├─ id: {}", cmd.id);
println!(" ├─ action: {}", cmd.action);
println!(" └─ phrases: {} total", cmd.phrases.len());
}
}
println!();
}
fn list_phrases(commands: &Vec<JCommandsList>) {
println!("\n[ Training Phrases ]");
for cmd_list in commands {
for cmd in &cmd_list.commands {
println!(" [{}]", cmd.id);
for phrase in &cmd.phrases {
println!(" - {}", phrase);
}
}
}
println!();
}
async fn classify_text(text: &str) {
match intent::classify(text).await {
Some((intent_id, confidence)) => {
println!(" ✓ Intent: {} (confidence: {:.2}%)", intent_id, confidence * 100.0);
}
None => {
println!(" ✗ No intent matched (below threshold)");
}
}
}
async fn execute_text(commands: &'static Vec<JCommandsList>, text: &str) {
// try intent classification first
if let Some((intent_id, confidence)) = intent::classify(text).await {
println!(" Intent: {} (confidence: {:.2}%)", intent_id, confidence * 100.0);
if let Some((cmd_path, cmd)) = intent::get_command_by_intent(commands, &intent_id) {
println!(" Command: {:?}", cmd_path);
println!(" Action: {}", cmd.action);
println!(" Executing...");
match commands::execute_command(cmd_path, cmd) {
Ok(chain) => println!(" ✓ Success (chain: {})", chain),
Err(e) => println!(" ✗ Error: {}", e),
}
return;
}
}
// fallback to levenshtein
println!(" Intent not matched, trying levenshtein fallback...");
if let Some((cmd_path, cmd)) = commands::fetch_command(text, commands) {
println!(" Command: {:?}", cmd_path);
println!(" Action: {}", cmd.action);
println!(" Executing...");
match commands::execute_command(cmd_path, cmd) {
Ok(chain) => println!(" ✓ Success (chain: {})", chain),
Err(e) => println!(" ✗ Error: {}", e),
}
} else {
println!(" ✗ No command matched");
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// init logging
env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or("info")
).init();
println!("Jarvis CLI v{}", config::APP_VERSION.unwrap_or("unknown"));
// init dirs
config::init_dirs()?;
// parse commands
println!("\n[*] Loading commands...");
let cmds = match commands::parse_commands() {
Ok(c) => {
println!(" Loaded {} command groups", c.len());
c
}
Err(e) => {
println!(" Warning: {}", e);
Vec::new()
}
};
COMMANDS_LIST.set(cmds).expect("Failed to set commands list");
// init intent classifier
println!("[*] Initializing intent classifier...");
match intent::init(COMMANDS_LIST.get().unwrap()).await {
Ok(_) => println!(" Intent classifier ready"),
Err(e) => println!(" Warning: {}", e),
}
print_help();
// init db
DB.set(Arc::new(RwLock::new(db::init_settings())))
.expect("DB already initialized");
// init sound
println!("[*] Initializing audio...");
if let Err(e) = jarvis_core::audio::init() {
println!(" Warning: Audio init failed: {:?}", e);
}
// REPL loop
let mut input = String::new();
loop {
print!("jarvis> ");
io::stdout().flush()?;
input.clear();
io::stdin().read_line(&mut input)?;
let input = input.trim();
if input.is_empty() {
continue;
}
let parts: Vec<&str> = input.splitn(2, ' ').collect();
let cmd = parts[0];
let arg = parts.get(1).map(|s| *s).unwrap_or("");
match cmd {
"exit" | "quit" | "q" => {
println!("Bye!");
break;
}
"help" | "h" | "?" => print_help(),
"list" | "ls" => list_commands(COMMANDS_LIST.get().unwrap()),
"phrases" => list_phrases(COMMANDS_LIST.get().unwrap()),
"hash" => {
let hash = commands::commands_hash(COMMANDS_LIST.get().unwrap());
println!(" Commands hash: {}", hash);
}
"classify" | "c" => {
if arg.is_empty() {
println!(" Usage: classify <text>");
} else {
classify_text(arg).await;
}
}
"execute" | "exec" | "e" => {
if arg.is_empty() {
println!(" Usage: execute <text>");
} else {
execute_text(COMMANDS_LIST.get().unwrap(), arg).await;
}
}
"reload" => {
println!(" Note: Reload requires app restart (statics can't be reset)");
}
_ => {
// treat unknown commands as text to classify
classify_text(input).await;
}
}
}
Ok(())
}

View file

@ -34,3 +34,4 @@ tokio = { version = "1", features = ["sync"], optional = true }
[features]
default = ["jarvis_app"]
jarvis_app = ["vosk", "intent-classifier", "tokio"]
intent = ["intent-classifier", "tokio"]

View file

@ -20,7 +20,7 @@ pub mod recorder;
#[cfg(feature = "jarvis_app")]
pub mod stt;
#[cfg(feature = "jarvis_app")]
#[cfg(feature = "intent")]
pub mod intent;
// shared statics

View file

@ -23,7 +23,7 @@ pub fn init() -> Result<(), ()> {
// wake word files list
// @TODO. Make it configurable via GUI for custom user voice.
let rustpotter_wake_word_files: [&str; 1] = [
"rustpotter/jarvis-default.rpw",
"resources/rustpotter/jarvis-default.rpw",
// "rustpotter/jarvis-community-1.rpw",
// "rustpotter/jarvis-community-2.rpw",
// "rustpotter/jarvis-community-3.rpw",
@ -58,6 +58,8 @@ pub fn data_callback(frame_buffer: &[i16]) -> Option<i32> {
// let detection = rustpotter.process_samples(frame_buffer.to_vec()); // @TODO. Temp crutch. Fix optimization issue, frame_buffer should not be copied to a new vector!
let detection = rustpotter.process_samples(frame_buffer);
// info!("Ruspotter data callback");
if let Some(detection) = detection {
if detection.score > config::RUSPOTTER_MIN_SCORE {
info!("Rustpotter detection info:\n{:?}", detection);

View file

@ -5,8 +5,15 @@ exe_path = "ahk/Run browser.exe"
sounds = ["ok1", "ok2", "ok3"]
phrases = [
"открой браузер",
"запусти браузер",
"открой хром",
"гугл хром",
"запусти хром",
"открой гугл хром",
"запусти гугл хром",
"включи браузер",
"браузер открой",
"нужен браузер",
"мне нужен браузер",
]
[[commands]]
@ -15,10 +22,15 @@ action = "ahk"
exe_path = "ahk/Close browser.exe"
sounds = ["ok1", "ok2", "ok3", "ok4"]
phrases = [
"закрой все браузеры",
"закрой браузер",
"закрой все браузеры",
"выключи браузер",
"убери браузер",
"закрой хром",
"выключи хром",
"закрой гугл хром",
"браузер закрой",
"сверни браузер",
]
[[commands]]
@ -29,6 +41,12 @@ exe_args = ["http://google.com"]
sounds = ["ok1", "ok2", "ok3", "ok4"]
phrases = [
"открой гугл",
"открой гугл поиск",
"запусти гугл",
"перейди в гугл",
"перейди на гугл",
"открой поисковик",
"зайди в гугл",
"гугл поиск",
"поиск гугл",
]

View file

@ -0,0 +1,5 @@
Accurate universal English model (both for callcenter and wideband)
Based on Appen Kaldi model https://github.com/Appen/UHV-OTS-Speech
Dynamic graph version

Binary file not shown.

View file

@ -0,0 +1,9 @@
--sample-frequency=16000
--use-energy=false
--num-mel-bins=40
--num-ceps=40
--low-freq=20
--high-freq=7600
--allow-upsample=true
--allow-downsample=true

View file

@ -0,0 +1,10 @@
--min-active=200
--max-active=7000
--beam=13.0
--lattice-beam=6.0
--acoustic-scale=1.0
--frame-subsampling-factor=3
--endpoint.silence-phones=1:2:3:4:5:11:12:13:14:15
--endpoint.rule2.min-trailing-silence=0.5
--endpoint.rule3.min-trailing-silence=1.0
--endpoint.rule4.min-trailing-silence=2.0

View file

@ -0,0 +1,39 @@
23613
23614
23615
23616
23617
23618
23619
23620
23621
23622
23623
23624
23625
23626
23627
23628
23629
23630
23631
23632
23633
23634
23635
23636
23637
23638
23639
23640
23641
23642
23643
23644
23645
23646
23647
23648
23649
23650
23651

View file

@ -0,0 +1,267 @@
<eps> 0
SIL 1
SIL_B 2
SIL_E 3
SIL_I 4
SIL_S 5
LAUGHTER 6
LAUGHTER_B 7
LAUGHTER_E 8
LAUGHTER_I 9
LAUGHTER_S 10
NOISE 11
NOISE_B 12
NOISE_E 13
NOISE_I 14
NOISE_S 15
OOV 16
OOV_B 17
OOV_E 18
OOV_I 19
OOV_S 20
SPN 21
SPN_B 22
SPN_E 23
SPN_I 24
SPN_S 25
BRH 26
BRH_B 27
BRH_E 28
BRH_I 29
BRH_S 30
CGH 31
CGH_B 32
CGH_E 33
CGH_I 34
CGH_S 35
NSN 36
NSN_B 37
NSN_E 38
NSN_I 39
NSN_S 40
SMK 41
SMK_B 42
SMK_E 43
SMK_I 44
SMK_S 45
UHH 46
UHH_B 47
UHH_E 48
UHH_I 49
UHH_S 50
UM 51
UM_B 52
UM_E 53
UM_I 54
UM_S 55
3`_B 56
3`_E 57
3`_I 58
3`_S 59
4_B 60
4_E 61
4_I 62
4_S 63
@_B 64
@_E 65
@_I 66
@_S 67
@`_B 68
@`_E 69
@`_I 70
@`_S 71
A_B 72
A_E 73
A_I 74
A_S 75
D_B 76
D_E 77
D_I 78
D_S 79
E_B 80
E_E 81
E_I 82
E_S 83
E:_B 84
E:_E 85
E:_I 86
E:_S 87
I_B 88
I_E 89
I_I 90
I_S 91
N_B 92
N_E 93
N_I 94
N_S 95
O_B 96
O_E 97
O_I 98
O_S 99
OI_B 100
OI_E 101
OI_I 102
OI_S 103
S_B 104
S_E 105
S_I 106
S_S 107
T_B 108
T_E 109
T_I 110
T_S 111
U_B 112
U_E 113
U_I 114
U_S 115
V_B 116
V_E 117
V_I 118
V_S 119
Z_B 120
Z_E 121
Z_I 122
Z_S 123
aI_B 124
aI_E 125
aI_I 126
aI_S 127
aU_B 128
aU_E 129
aU_I 130
aU_S 131
b_B 132
b_E 133
b_I 134
b_S 135
d_B 136
d_E 137
d_I 138
d_S 139
dZ_B 140
dZ_E 141
dZ_I 142
dZ_S 143
eI_B 144
eI_E 145
eI_I 146
eI_S 147
f_B 148
f_E 149
f_I 150
f_S 151
g_B 152
g_E 153
g_I 154
g_S 155
h_B 156
h_E 157
h_I 158
h_S 159
i_B 160
i_E 161
i_I 162
i_S 163
j_B 164
j_E 165
j_I 166
j_S 167
k_B 168
k_E 169
k_I 170
k_S 171
l_B 172
l_E 173
l_I 174
l_S 175
m_B 176
m_E 177
m_I 178
m_S 179
n_B 180
n_E 181
n_I 182
n_S 183
oU_B 184
oU_E 185
oU_I 186
oU_S 187
p_B 188
p_E 189
p_I 190
p_S 191
r_B 192
r_E 193
r_I 194
r_S 195
s_B 196
s_E 197
s_I 198
s_S 199
t_B 200
t_E 201
t_I 202
t_S 203
tS_B 204
tS_E 205
tS_I 206
tS_S 207
u_B 208
u_E 209
u_I 210
u_S 211
v_B 212
v_E 213
v_I 214
v_S 215
w_B 216
w_E 217
w_I 218
w_S 219
z_B 220
z_E 221
z_I 222
z_S 223
{_B 224
{_E 225
{_I 226
{_S 227
#0 228
#1 229
#2 230
#3 231
#4 232
#5 233
#6 234
#7 235
#8 236
#9 237
#10 238
#11 239
#12 240
#13 241
#14 242
#15 243
#16 244
#17 245
#18 246
#19 247
#20 248
#21 249
#22 250
#23 251
#24 252
#25 253
#26 254
#27 255
#28 256
#29 257
#30 258
#31 259
#32 260
#33 261
#34 262
#35 263
#36 264
#37 265
#38 266

View file

@ -0,0 +1,227 @@
1 nonword
2 begin
3 end
4 internal
5 singleton
6 nonword
7 begin
8 end
9 internal
10 singleton
11 nonword
12 begin
13 end
14 internal
15 singleton
16 nonword
17 begin
18 end
19 internal
20 singleton
21 nonword
22 begin
23 end
24 internal
25 singleton
26 nonword
27 begin
28 end
29 internal
30 singleton
31 nonword
32 begin
33 end
34 internal
35 singleton
36 nonword
37 begin
38 end
39 internal
40 singleton
41 nonword
42 begin
43 end
44 internal
45 singleton
46 nonword
47 begin
48 end
49 internal
50 singleton
51 nonword
52 begin
53 end
54 internal
55 singleton
56 begin
57 end
58 internal
59 singleton
60 begin
61 end
62 internal
63 singleton
64 begin
65 end
66 internal
67 singleton
68 begin
69 end
70 internal
71 singleton
72 begin
73 end
74 internal
75 singleton
76 begin
77 end
78 internal
79 singleton
80 begin
81 end
82 internal
83 singleton
84 begin
85 end
86 internal
87 singleton
88 begin
89 end
90 internal
91 singleton
92 begin
93 end
94 internal
95 singleton
96 begin
97 end
98 internal
99 singleton
100 begin
101 end
102 internal
103 singleton
104 begin
105 end
106 internal
107 singleton
108 begin
109 end
110 internal
111 singleton
112 begin
113 end
114 internal
115 singleton
116 begin
117 end
118 internal
119 singleton
120 begin
121 end
122 internal
123 singleton
124 begin
125 end
126 internal
127 singleton
128 begin
129 end
130 internal
131 singleton
132 begin
133 end
134 internal
135 singleton
136 begin
137 end
138 internal
139 singleton
140 begin
141 end
142 internal
143 singleton
144 begin
145 end
146 internal
147 singleton
148 begin
149 end
150 internal
151 singleton
152 begin
153 end
154 internal
155 singleton
156 begin
157 end
158 internal
159 singleton
160 begin
161 end
162 internal
163 singleton
164 begin
165 end
166 internal
167 singleton
168 begin
169 end
170 internal
171 singleton
172 begin
173 end
174 internal
175 singleton
176 begin
177 end
178 internal
179 singleton
180 begin
181 end
182 internal
183 singleton
184 begin
185 end
186 internal
187 singleton
188 begin
189 end
190 internal
191 singleton
192 begin
193 end
194 internal
195 singleton
196 begin
197 end
198 internal
199 singleton
200 begin
201 end
202 internal
203 singleton
204 begin
205 end
206 internal
207 singleton
208 begin
209 end
210 internal
211 singleton
212 begin
213 end
214 internal
215 singleton
216 begin
217 end
218 internal
219 singleton
220 begin
221 end
222 internal
223 singleton
224 begin
225 end
226 internal
227 singleton

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,3 @@
[
2.74606e+11 7.912398e+09 -1.038969e+11 1.317063e+10 -5.916838e+10 -9.741645e+10 -2.601366e+10 -7.401961e+10 -2.684753e+10 -1.58957e+10 -4.96366e+10 -8.033801e+09 -3.074859e+10 -1.707706e+10 -1.639996e+10 -1.829851e+10 -1.09582e+10 -5.920052e+09 -7.745878e+09 -1.833566e+09 -2.802531e+09 -7.583578e+08 -3.994372e+08 6.940003e+07 8.935535e+08 2.282279e+08 1.745994e+09 -6.372821e+07 8.785109e+08 -1.030507e+08 8.091005e+08 4.407504e+08 1.859903e+09 1.753656e+09 2.066627e+09 1.37222e+09 1.386451e+09 -1.142544e+09 -2.51193e+08 -9.788437e+08 3.129497e+09
2.54123e+13 1.928342e+12 6.751519e+12 1.637428e+12 3.016774e+12 5.912373e+12 1.868079e+12 3.886044e+12 1.841588e+12 1.633684e+12 2.137614e+12 1.072133e+12 1.296519e+12 1.00067e+12 8.062336e+11 6.591713e+11 4.603988e+11 3.121481e+11 2.243611e+11 1.153531e+11 6.293688e+10 2.146548e+10 2.735945e+09 7.957589e+08 1.053802e+10 2.59947e+10 4.301262e+10 5.558657e+10 7.239489e+10 8.546533e+10 8.436563e+10 7.792829e+10 8.569881e+10 9.576342e+10 7.780419e+10 5.335785e+10 5.166593e+10 4.813119e+10 3.81959e+10 2.395734e+10 0 ]

View file

@ -0,0 +1 @@
# configuration file for apply-cmvn-online, used in the script ../local/run_online_decoding.sh

View file

@ -0,0 +1,2 @@
--left-context=3
--right-context=3