【发布时间】:2021-06-08 21:53:37
【问题描述】:
我一直在使用 Azure 的 Speech-To-Text 服务,发现 here,使用从内存流中识别的方法。基本上我打算做的只是将音频的某些片段流式传输到服务,但我不完全确定如何做到这一点。假设我有一个长度为 5 分钟的视频,我的目标是仅流式传输前 30 秒,甚至只是从音频文件中的 1 分钟标记到 3 分钟标记,我需要在以下代码中启用或更改什么这样做?
我尝试使用 CreatePullStream() 而不是 CreatePushStream() 在几秒钟内提供标记,但它没有产生我上面描述的目标。如果有人知道,请告诉我如何实现这一点,非常感谢!
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromStream(SpeechConfig speechConfig)
{
var reader = new BinaryReader(File.OpenRead("audioFile.wav"));
using var audioInputStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioInputStream);
using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioInputStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var result = await recognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
await FromStream(speechConfig);
}
}
【问题讨论】:
标签: c# .net azure azure-cognitive-services