| 308 | } |
| 309 | |
| 310 | engine::runtime::TaskSpec build_task_spec(const JsonValue & case_value) { |
| 311 | return engine::runtime::TaskSpec{ |
| 312 | engine::runtime::parse_voice_task_kind(engine::io::json::require_string(case_value, "task")), |
| 313 | engine::runtime::parse_run_mode(engine::io::json::require_string(case_value, "mode")), |
| 314 | }; |
| 315 | } |
| 316 | |
| 317 | double audio_duration_sec(const engine::runtime::AudioBuffer & audio) { |
| 318 | if (audio.sample_rate <= 0 || audio.channels <= 0) { |
no test coverage detected