【问题标题】:How to return a simple timestamp output in Azure?如何在 Azure 中返回简单的时间戳输出?
【发布时间】:2021-04-06 13:21:43
【问题描述】:

我正在尝试减少从我正在使用的 Azure 语音到文本模型中获取的数据。第 21 行是指定输出格式的地方,我已将其更改为“简单”,但我仍然得到详细的输出。我使用的代码是:

using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

namespace NEST
{
class Program
{


    static void Main(string[] args)
    {
        var key = "";
        var region = "";
        var audioFilePath = @"C:/Users/MichaelSchwartz/source/repos/AI-102-Process-Speech-master/transcribe_speech_to_text/media/narration.wav";
        var speechConfig = SpeechConfig.FromSubscription(key, region);

        // Generates timestamps
        speechConfig.RequestWordLevelTimestamps();
        speechConfig.OutputFormat = OutputFormat.Simple;

        var stopRecognition = new TaskCompletionSource<int>();

        // Calls the audio file
        var audioConfig = AudioConfig.FromWavFileInput(audioFilePath);
        var recognizer = new SpeechRecognizer(speechConfig, audioConfig);


        //Display Recognized
        recognizer.Recognized += (s, e) =>
        {
            if (e.Result.Reason == ResultReason.RecognizedSpeech)
            {
                Console.WriteLine($"RECOGNIZED :{e.Result.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult)}");
            }
            else if (e.Result.Reason == ResultReason.NoMatch)
            {
                Console.WriteLine($"NOMATCH: Speech could not be recognized.");
            }
        };

        recognizer.Canceled += (s, e) =>
        {
            Console.WriteLine($"CANCELED: Reason={e.Reason}");

            if (e.Reason == CancellationReason.Error)
            {
                Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                Console.WriteLine($"CANCELED: Did you update the subscription info?");
            }

            stopRecognition.TrySetResult(0);
        };

        recognizer.SessionStopped += (s, e) =>
        {
            Console.WriteLine("\n    Session stopped event.");
            stopRecognition.TrySetResult(0);
        };

        recognizer.StartContinuousRecognitionAsync().GetAwaiter().GetResult();

        // Waits for completion. Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopRecognition.Task });

        do
            {
                Console.WriteLine("Press Enter to stop");
            } while (Console.ReadKey().Key != ConsoleKey.Enter);

            // Stops recognition.
            recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);

    }
}
}

返回什么时间单位?偏移量:173800000?该模型运行几秒钟,而不是几小时。 “偏移”和“持续时间”是什么意思?

有没有办法在消息级别而不是单词级别添加时间戳?或者至少是一种专注于指示每个话语何时开始的词级数据子集的方法?我正在转录更长的话语,而且是几个小时的音频。

输出是: RECOGNIZED :{"DisplayText":"语音翻译 API 将音频流转录为文本。您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作。您可以将此 API 与 SDK 客户端库一起使用,也可以使用其他 API一个 rest API。","Duration":163400000,"Id":"02d2042cadec4ae9bf324c91949620e0","Nbest":[{"Confidence":0.85213876,"Display":"语音翻译 API 将音频流转录成文本。您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作。您可以将此 API 与 SDK 客户端库或其他 API 一起使用。","ITN":"语音翻译 API 将音频流转录为您的文本应用程序可以将此文本显示给用户或将其作为命令输入进行操作 您可以将此 API 与 SDK 客户端库或其他 API 一起使用","Lexical":"语音翻译 API 将音频流转录为您的应用程序的文本可以将此文本显示给用户或将其作为命令输入进行操作您可以使用此 API er 使用 SDK 客户端库或休息 API","MaskedITN":"语音翻译 api 将音频流转录为文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作您可以使用此 api使用 sdk 客户端库或休息 api","Words":[{"Duration":1700000,"Offset":21800000,"Word":"the"},{"Duration":4300000,"Offset" :23600000,"Word":"speech"},{"Duration":7300000,"Offset":28000000,"Word":"translation"},{"Duration":5600000,"Offset":35400000,"Word" :"API"},{"Duration":6600000,"Offset":41300000,"Word":"transcribes"},{"Duration":3400000,"Offset":48000000,"Word":"audio"}, {"Duration":4000000,"Offset":51500000,"Word":"streams"},{"Duration":1900000,"Offset":55600000,"Word":"into"},{"Duration":5900000 ,"偏移":57600000,"字":"文本"},{"时长":2300000,"偏移":66200000,"字":"你的"},{"时长":7100000,"偏移":68600000 ,"Word":"应用程序"},{"Duration":1500000,"Offset":75800000,"Word":"can"},{"Duration":3700000,"Offset":77400000,"Word ":"display"},{"Duration":2100000,"Offset":81200000,"Word":"this"},{"Duration":3200000,"Offset":83400000,"Word":"text"} ,{"时长":800000,"偏移":86700000,"字":"到"},{"时长":1100000,"偏移":87600000,"字":"the"},{"时长": 4900000,"Offset":88800000,"Word":"user"},{"Duration":2700000,"Offset":94000000,"Word":"or"},{"Duration":1700000,"Offset": 96800000,"Word":"act"},{"Duration":2300000,"Offset":98600000,"Word":"onon"},{"Duration":900000,"Offset":101000000,"Word": "it"},{"Duration":1300000,"Offset":102000000,"Word":"as"},{"Duration":3700000,"Offset":103400000,"Word":"command"},{ "时长":5800000,"偏移":107200000,"字":"输入"},{"时长":2000000,"偏移":116900000,"字":"你"},{"时长":1700000, "偏移":119000000,"字":"can"},{"持续时间":2300000,"偏移":120800000,"字":"使用"},{"持续时间":2100000,"偏移":123200000, "Word":"this"},{"Duration":6300000,"Offset":125400000,"Word":"API"},{"Duration":2500000,"Offset":131800000,"Word":"或者"},{"持续时间":1500000,"偏移":1344 00000,"Word":"with"},{"Duration":1100000,"Offset":136000000,"Word":"an"},{"Duration":6300000,"Offset":137200000,"Word": "SDK"},{"Duration":4100000,"Offset":143600000,"Word":"client"},{"Duration":7900000,"Offset":147800000,"Word":"library"},{ "持续时间":6200000,"偏移":158100000,"字":"or"},{"持续时间":2000000,"偏移":164900000,"字":"a"},{"持续时间":4700000, “偏移”:167000000,“字”:“休息”},{“持续时间”:1700000,“偏移”:172000000,“字”:“a”},{“持续时间”:4300000,“偏移”:173800000, "Word":"rest"},{"Duration":7000000,"Offset":178200000,"Word":"API"}]},{"Confidence":0.85089046,"Display":"语音翻译 API 转录音频流到文本中 您的应用程序可以向用户显示此文本或对其进行操作是命令输入 您可以将此 API 与 SDK 客户端库或其他 API 一起使用","ITN":"语音翻译 api 转录音频流到文本中,您的应用程序可以向用户显示此文本或对其进行操作是命令输入,您可以使用此 api一个 sdk 客户端库或一个 rest 一个 rest api","Lexical":"语音翻译 api 将音频流转录成文本,您的应用程序可以将此文本显示给用户或对其进行操作是命令输入,您可以将此 api 与sdk 客户端库或 rest a rest api","MaskedITN":"语音翻译 api 将音频流转录为文本,您的应用程序可以将此文本显示给用户或对其进行操作是命令输入您可以将此 api 与 sdk 一起使用客户端库或休息 api","Words":[{"Duration":1700000,"Offset":21800000,"Word":"the"},{"Duration":4300000,"Offset":23600000, "Word":"speech"},{"Duration":7300000,"Offset":28000000,"Word":"translation"},{"Duration":5600000,"Offset":35400000,"Word":"API "},{"Duration":6600000,"Offset":41300000,"Word":"transcribes"},{"Duration":3400000,"Offset":48000000,"Word":"audio"},{"Duration ":4000000,"Offset":51500000,"Word":"streams"},{"Duration":1900000,"Offset":55600000,"Word":"into"},{"Duration":5900000,"Offset ":57600 000,"Word":"text"},{"Duration":2300000,"Offset":66200000,"Word":"your"},{"Duration":7100000,"Offset":68600000,"Word": "应用"},{"持续时间":1500000,"偏移":75800000,"字":"can"},{"持续时间":3700000,"偏移":77400000,"字":"显示"},{ "持续时间":2100000,"偏移":81200000,"字":"this"},{"持续时间":3200000,"偏移":83400000,"字":"文本"},{"持续时间":800000, "偏移":86700000,"字":"到"},{"时长":1100000,"偏移":87600000,"字":"the"},{"时长":4900000,"偏移":88800000, "Word":"user"},{"Duration":2700000,"Offset":94000000,"Word":"or"},{"Duration":1700000,"Offset":96800000,"Word":"act "},{"Duration":2300000,"Offset":98600000,"Word":"onon"},{"Duration":900000,"Offset":101000000,"Word":"it"},{"Duration ":1300000,"Offset":102000000,"Word":"is"},{"Duration":3700000,"Offset":103400000,"Word":"command"},{"Duration":5800000,"Offset ":107200000,"Word":"input"},{"Duration":2000000,"Offset":116900000,"Word":"you"},{"Duration":1700000,"Offset":119000000,"Word ":"可以"},{"持续时间":2300000,"O ffset":120800000,"Word":"use"},{"Duration":2100000,"Offset":123200000,"Word":"this"},{"Duration":6300000,"Offset":125400000," Word":"API"},{"Duration":2500000,"Offset":131800000,"Word":"either"},{"Duration":1500000,"Offset":134400000,"Word":"with" },{"Duration":1100000,"Offset":136000000,"Word":"an"},{"Duration":6300000,"Offset":137200000,"Word":"SDK"},{"Duration" :4100000,"Offset":143600000,"Word":"client"},{"Duration":7900000,"Offset":147800000,"Word":"library"},{"Duration":6200000,"Offset" :158100000,"Word":"or"},{"Duration":2000000,"Offset":164900000,"Word":"a"},{"Duration":4700000,"Offset":167000000,"Word" :"rest"},{"Duration":1700000,"Offset":172000000,"Word":"a"},{"Duration":4300000,"Offset":173800000,"Word":"rest"}, {"Duration":7000000,"Offset":178200000,"Word":"API"}]},{"Confidence":0.8548482,"Display":"语音翻译 API 转录音频流和您的应用程序可以显示的文本将此文本发送给用户或将其作为命令输入进行操作,您可以将此 API 与SDK 客户端库或休息 API","ITN":"语音翻译 api 转录音频流和文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以将此 api 与sdk 客户端库或 rest a rest api","Lexical":"语音翻译 api 转录音频流和文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以将此 api 与sdk 客户端库或 rest a rest api","MaskedITN":"语音翻译 api 转录音频流和文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以将此 api 与sdk客户端库或者一个rest api","Words":[{"Duration":1700000,"Offset":21800000,"Word":"the"},{"Duration":4300000,"Offset":23600000 ,"Word":"speech"},{"Duration":7300000,"Offset":28000000,"Word":"translation"},{"Duration":5600000,"Offset":35400000,"Word":" API"},{"持续时间":6600000,"偏移量":41300000,"Word":"transcribes"},{"Duration":3400000,"Offset":48000000,"Word":"audio"},{"Duration":3900000,"Offset":51500000,"Word ":"streams"},{"Duration":1200000,"Offset":55500000,"Word":"and"},{"Duration":700000,"Offset":56800000,"Word":"a"} ,{"持续时间":5900000,"偏移":57600000,"字":"文本"},{"持续时间":2300000,"偏移":66200000,"字":"你的"},{"持续时间": 7100000,"Offset":68600000,"Word":"application"},{"Duration":1500000,"Offset":75800000,"Word":"can"},{"Duration":3700000,"Offset": 77400000,"Word":"display"},{"Duration":2100000,"Offset":81200000,"Word":"this"},{"Duration":3200000,"Offset":83400000,"Word": "text"},{"Duration":800000,"Offset":86700000,"Word":"to"},{"Duration":1100000,"Offset":87600000,"Word":"the"},{ "持续时间":4900000,"偏移":88800000,"字":"用户"},{"持续时间":2700000,"偏移":94000000,"字":"或"},{"持续时间":1700000, “偏移”:96800000,“字”:“行为”},{“持续时间”:2300000,“偏移”:98600000,“字”:“上”},{“持续时间”:900000,“偏移”:101000000, "字":"它"},{"时长":13 00000,"Offset":102000000,"Word":"as"},{"Duration":3700000,"Offset":103400000,"Word":"command"},{"Duration":5800000,"Offset": 107200000,"Word":"input"},{"Duration":2000000,"Offset":116900000,"Word":"you"},{"Duration":1700000,"Offset":119000000,"Word": "can"},{"Duration":2300000,"Offset":120800000,"Word":"use"},{"Duration":2100000,"Offset":123200000,"Word":"this"},{ "持续时间":6300000,"偏移":125400000,"字":"API"},{"持续时间":2500000,"偏移":131800000,"字":"任一"},{"持续时间":1500000, "偏移":134400000,"字":"with"},{"持续时间":1100000,"偏移":136000000,"字":"an"},{"持续时间":6300000,"偏移":137200000, "Word":"SDK"},{"Duration":4100000,"Offset":143600000,"Word":"client"},{"Duration":7900000,"Offset":147800000,"Word":"库"},{"Duration":6200000,"Offset":158100000,"Word":"or"},{"Duration":2000000,"Offset":164900000,"Word":"a"},{"Duration ":4700000,"Offset":167000000,"Word":"rest"},{"Duration":1700000,"Offset":172000000,"Word":"a"},{"Duration":4300000,"Offset ":173800000,"字":"r est"},{"Duration":7000000,"Offset":178200000,"Word":"API"}]},{"Confidence":0.8535998,"Display":"语音翻译 API 转录音频流和文本您的应用程序可以向用户显示此文本或对其进行操作是命令输入 您可以将此 API 与 SDK 客户端库或休息 API 一起使用","ITN":"语音翻译 api 转录音频流和文本您的应用程序可以向用户显示此文本或对其进行操作是命令输入您可以将此 api 与 sdk 客户端库或 rest a rest api 一起使用","Lexical":"语音翻译 api 转录音频流和文本您的应用程序可以向用户显示此文本或对其进行操作是命令输入您可以将此 api 与 sdk 客户端库或 rest api 一起使用","MaskedITN":"语音翻译 api 转录音频流和文本您的应用程序可以向用户显示此文本或对其进行操作是命令输入您可以将此 api 与 sdk 客户端库一起使用或休息一个休息 api","Words":[{"Duration":1700000,"Offset":21800000,"Word":"the"},{"Duration":4300000,"Offset":23600000,"Word ":"speech"},{"Duration":7300000,"Offset":28000000,"Word":"translation"},{"Duration":5600000,"Offset":35400000,"Word":"API"} ,{"Duration":6600000,"Offset":41300000,"Word":"transcribes"},{"Duration":3400000,"Offset":48000000,"Word":"audio"},{"Duration": 3900000,"Offset":51500000,"Word":"streams"},{"Duration":1200000,"Offset":55500000,"Word":"and"},{"Duration":700000,"Offset": 56800000,"Word":"a"},{"Duration":5900000,"Offset":57600000,"Word":"text"},{"Duration":2300000,"Offset":66200000,"Word": "你的"},{"持续时间":7100000,"偏移":68600000,"字":"应用"},{"持续时间":1500000,"偏移":75800000,"字":"可以"},{ "持续时间":3700000,"偏移":77400000,"字":"显示"},{"持续时间":2100000,"偏移":81200000,"字":"this"},{"持续时间":3200000, "偏移":83400000,"字":"文本"},{"时长":800000,"偏移":86700000,"字":"到"},{"时长":1100000,"偏移":87600000, “词”:“th e"},{"Duration":4900000,"Offset":88800000,"Word":"user"},{"Duration":2700000,"Offset":94000000,"Word":"or"},{"持续时间":1700000,"偏移":96800000,"字":"act"},{"持续时间":2300000,"偏移":98600000,"字":"onon"},{"持续时间":900000,"偏移":101000000,"字":"it"},{"时长":1300000,"偏移":102000000,"字":"是"},{"时长":3700000,"偏移":103400000," Word":"command"},{"Duration":5800000,"Offset":107200000,"Word":"input"},{"Duration":2000000,"Offset":116900000,"Word":"you" },{"Duration":1700000,"Offset":119000000,"Word":"can"},{"Duration":2300000,"Offset":120800000,"Word":"use"},{"Duration" :2100000,"Offset":123200000,"Word":"this"},{"Duration":6300000,"Offset":125400000,"Word":"API"},{"Duration":2500000,"Offset" :131800000,"Word":"either"},{"Duration":1500000,"Offset":134400000,"Word":"with"},{"Duration":1100000,"Offset":136000000,"Word" :"an"},{"Duration":6300000,"Offset":137200000,"Word":"SDK"},{"Duration":4100000,"Offset":143600000,"Word":"client"}, {“持续时间”:7900000,“偏移”:147800 000,"Word":"library"},{"Duration":6200000,"Offset":158100000,"Word":"or"},{"Duration":2000000,"Offset":164900000,"Word": "a"},{"Duration":4700000,"Offset":167000000,"Word":"rest"},{"Duration":1700000,"Offset":172000000,"Word":"a"},{ "Duration":4300000,"Offset":173800000,"Word":"rest"},{"Duration":7000000,"Offset":178200000,"Word":"API"}]},{"Confidence": 0.8474758,"Display":"语音翻译 API 将音频流转录为文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以在 SDK 客户端库或其他 API 中使用此 API", "ITN":"语音翻译 api 将音频流转录成文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以在 sdk 客户端库或休息 api 中使用此 api","Lexical ":"语音翻译 api 将音频流转录为文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以使用它sdk 客户端库中的 pi 或 rest api","MaskedITN":"语音翻译 api 将音频流转录为文本,您的应用程序可以将此文本显示给用户或将其作为命令输入进行操作,您可以使用此 api 或者在 sdk 客户端库或休息 api","Words":[{"Duration":1700000,"Offset":21800000,"Word":"the"},{"Duration":4300000,"Offset": 23600000,"Word":"speech"},{"Duration":7300000,"Offset":28000000,"Word":"translation"},{"Duration":5600000,"Offset":35400000,"Word": "API"},{"Duration":6600000,"Offset":41300000,"Word":"transcribes"},{"Duration":3400000,"Offset":48000000,"Word":"audio"},{ "持续时间":4000000,"偏移":51500000,"字":"流"},{"持续时间":1900000,"偏移":55600000,"字":"进入"},{"持续时间":5900000, "偏移":57600000,"字":"文本"},{"持续时间":2300000,"偏移":66200000,"字":"你的"},{"持续时间":7100000,"偏移":68600000, "Word":"application"},{"Duration":1500000,"Offset":75800000,"Word":"can"},{"Duration":3700000,"Offset":77400000, "Word":"display"},{"Duration":2100000,"Offset":81200000,"Word":"this"},{"Duration":3200000,"Offset":83400000,"Word":"text "},{"Duration":800000,"Offset":86700000,"Word":"to"},{"Duration":1100000,"Offset":87600000,"Word":"the"},{"Duration ":4900000,"Offset":88800000,"Word":"user"},{"Duration":2700000,"Offset":94000000,"Word":"or"},{"Duration":1700000,"Offset ":96800000,"Word":"act"},{"Duration":2300000,"Offset":98600000,"Word":"onon"},{"Duration":900000,"Offset":101000000,"Word ":"it"},{"Duration":1300000,"Offset":102000000,"Word":"as"},{"Duration":3700000,"Offset":103400000,"Word":"command"} ,{"Duration":5800000,"Offset":107200000,"Word":"input"},{"Duration":2000000,"Offset":116900000,"Word":"you"},{"Duration": 1700000,"Offset":119000000,"Word":"can"},{"Duration":2300000,"Offset":120800000,"Word":"use"},{"Duration":2100000,"Offset": 123200000,"Word":"this"},{"Duration":6300000,"Offset":125400000,"Word":"API"},{"Duration":2500000,"Offset":131800000,"Word": “任一”},{“持续时间”:2700000,“偏移” :134400000,"Word":"within"},{"Duration":6300000,"Offset":137200000,"Word":"SDK"},{"Duration":4100000,"Offset":143600000,"Word" :"client"},{"Duration":7900000,"Offset":147800000,"Word":"library"},{"Duration":6200000,"Offset":158100000,"Word":"or"}, {“持续时间”:2000000,“偏移”:164900000,“字”:“a”},{“持续时间”:4700000,“偏移”:167000000,“字”:“休息”},{“持续时间”:1700000 ,"偏移":172000000,"字":"a"},{"时长":4300000,"偏移":173800000,"字":"rest"},{"时长":7000000,"偏移":178200000 ,"Word":"API"}]}],"Offset":21800000,"RecognitionStatus":"Success"} 取消:原因=EndOfStream 按 Enter 停止

Session stopped event.

另外,为什么输出重复结果 5 次?我希望尽可能地减少它以进行数据分析。有没有办法将度量单位更改为对用户更友好的单位,例如秒?

【问题讨论】:

  • 您可以将输出文本添加到您的问题中吗?我会猜测它的报告“滴答声”,以 100ns 为单位。说你的代码运行需要 1.7 秒是正确的吗?
  • @Neil 模型在外部终端出现后大约需要 8.5 秒才能产生输出。

标签: c# azure speech-to-text


【解决方案1】:

第一季度

为什么输出重复5次?

其实你可以通过问题从STT FAQ找到答案:

我得到了每个短语的多个结果以及详细的输出格式。 我应该使用哪一个?

在设计上,您可以在NBest 的JSON 响应中获得多个不同置信度分数的结果,默认情况下,系统会选择第一个作为显示结果。您可以根据需要选择结果,例如置信度得分最高的结果。

第二季度:

有没有办法将测量单位更改为更易于使用的单位,例如秒?

事实上,Azure 没有提供任何进一步的方法来使用结果。但是我根据你的代码写了一个简单的demo:

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;

namespace STTwithTime
{
    class Program
    {


        static void Main(string[] args)
        {
            var key = "";
            var region = "";
            var audioFilePath = @"";
            var speechConfig = SpeechConfig.FromSubscription(key, region);

            // Generates timestamps
            speechConfig.RequestWordLevelTimestamps();
            speechConfig.OutputFormat = OutputFormat.Detailed;

            var stopRecognition = new TaskCompletionSource<int>();

            var audioConfig = AudioConfig.FromWavFileInput(audioFilePath);
            var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

            //Display Recognized
            recognizer.Recognized += (s, e) =>
            {
                if (e.Result.Reason == ResultReason.RecognizedSpeech)
                {
                    
                    var result = JsonConvert.DeserializeObject<Result>(e.Result.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult));
                    
                    var maxConfidenceValue = result.NBest.Max(item => item.Confidence);
                    var maxConfidence =  result.NBest.Find(item => item.Confidence == maxConfidenceValue);
                    Console.WriteLine("================================");
                    Console.WriteLine("Confidence:"+maxConfidence.Confidence);
                    Console.WriteLine("RECOGNIZED :" + maxConfidence.Display);
                    Console.WriteLine("Duration: :" + Convert.ToDouble(result.Duration) / 10000000);
                    Console.WriteLine("Words:");
                    foreach (var word in maxConfidence.Words) {
                        Console.WriteLine(word.word + "=> offset:" + Convert.ToDouble(word.Offset) / 10000000 + " duraction:" + Convert.ToDouble(word.Duration) / 10000000);
                    }
                    
                }
                else if (e.Result.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
            };

            recognizer.Canceled += (s, e) =>
            {
                Console.WriteLine($"CANCELED: Reason={e.Reason}");

                if (e.Reason == CancellationReason.Error)
                {
                    Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                    Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                    Console.WriteLine($"CANCELED: Did you update the subscription info?");
                }

                stopRecognition.TrySetResult(0);
            };

            recognizer.SessionStopped += (s, e) =>
            {
                Console.WriteLine("\n    Session stopped event.");
                stopRecognition.TrySetResult(0);
            };

            recognizer.StartContinuousRecognitionAsync().GetAwaiter().GetResult();

            // Waits for completion. Use Task.WaitAny to keep the task rooted.
            Task.WaitAny(new[] { stopRecognition.Task });


        }

    }

    public class Word
    {
        public int Duration { get; set; }
        public int Offset { get; set; }
        public string word { get; set; }
    }

    public class NBest
    {
        public double Confidence { get; set; }
        public string Display { get; set; }
        public string ITN { get; set; }
        public string Lexical { get; set; }
        public string MaskedITN { get; set; }
        public List<Word> Words { get; set; }
    }

    public class Result
    {
        public string DisplayText { get; set; }
        public int Duration { get; set; }
        public string Id { get; set; }
        public List<NBest> NBest { get; set; }
        public int Offset { get; set; }
        public string RecognitionStatus { get; set; }
    }
}

结果:

如果指定时间长的.wav文件,结果会分成多方。

【讨论】:

  • 感谢@Stanley Gong 我收到了 CS0246 错误(未找到程序集参考),但我相信我安装了正确的程序集。即使恢复后错误仍然存​​在。我是否缺少程序集参考?哪个包包含“结果”?
  • @MichaelSchwartz,welcome, 'Result' 是 'Recognized' 功能代码下的 3 个附加类之一。
  • 这些是我在 csproj 文件中包含的附加包,但我在第 39 行收到“Result”的类型或命名空间名称找不到错误。 结果和牛顿不' t 根据 VSC 返回的错误消息使用 net5.0。我需要将项目弃用到 v4.8 吗?你完成的代码是什么样的?
  • @MichaelSchwartz 我已经发布了我所有的演示代码,请检查一下:)
  • 做到了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多