我正在构建一个应用程序来根据找到的关键字计算延迟。我使用的方法不准确甚至是错误的(错误)。使用的方法如下:
@Override
public void onResults(Bundle results) {
progressBar.setVisibility(View.GONE);
ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
if (matches != null && !matches.isEmpty()) {
String transcript = matches.get(0);
textSTT.setText(transcript);
if (transcript.contains(keyword)) {
long endTime = System.nanoTime(); // Using nano
delay = endTime - startTime;
double delayInSeconds = delay / 1_000_000_000.0;
double roundedDelay = roundToTwoDecimalPlaces(delayInSeconds); // Rounding delay
delayResult.setText(String.format("Delay: %.2f seconds\nTranscription result: %s", roundedDelay, transcript));
} else {
delayResult.setText("Keyword not found.");
}
} else {
delayResult.setText("No result from speech recognition.");
}
}
条件:
工具:
请提供解决方案,谢谢。
我设置了10秒倒计时。当我按下开始录音的按钮时,我立即提到了这个关键词(大约在第一秒)。但延迟结果显示2秒甚至更多。同样,当我尝试在第 5 秒提及关键字时,但延迟结果显示第 7 秒甚至更多。
我希望延迟计算更准确,例如:我在第7秒提到关键字,那么延迟就是7秒。
语音识别需要时间。 所花费的时间不是恒定的。 如果您想告诉声音剪辑中单词发生的偏移,您不想进行实时分析。 您以这种方式测量的不是您说出这句话所花费的时间,而是您说出这句话所花费的时间加上语音识别器识别您所说这句话所花费的时间。 这总是要大得多,因为识别器在单词之后至少需要时间来识别单词结束。 而且语音识别引擎并不是为了返回您正在寻找的数据类型而设计的 - 它只是用于转录。
更好的方法是使用返回该类型数据的自定义语音引擎。 或者采用自定义语音引擎并对其进行更改以返回带有时间戳的猜测。 但你尝试的方法永远不会奏效。