Я пытаюсь распознать голос с помощью API распознавания речи с поддержкой веб-сокетов в C #.Согласно этому API, если голосовые данные (двоичные) отправляются последовательно, результат распознавания в это время будет возвращен.Я непрерывно отправляю данные с помощью следующего кода, но не могу получить предварительный результат распознавания.Только окончательный результат распознавания получен.Я думаю, что часть, которая отправляет голосовые данные, неуместна в качестве причины, но я не понимаю, как это неправильно.Я не знаю так много о websokcet, и я думаю, что в этой отправляющей части есть странная часть.Пожалуйста, расскажите мне о правильном способе отправки.
Это API, который я использую.https://mimi.readme.io/docs/mimi-websocket-api-spec
(старый)
static async Task Send(ClientWebSocket ws)
{
ArraySegment<byte> closingMessage = new ArraySegment<byte>(Encoding.UTF8.GetBytes(
"{\"command\": \"recog-break\"}"
));
using (FileStream fs = File.OpenRead("voice.raw"))
{
byte[] b = new byte[3200];
while (fs.Read(b, 0, b.Length) > 0)
{
await ws.SendAsync(new ArraySegment<byte>(b), WebSocketMessageType.Binary, true, CancellationToken.None);
}
await ws.SendAsync(closingMessage, WebSocketMessageType.Text, true, CancellationToken.None);
}
}
(новый)
static async Task SendAudio(ClientWebSocket ws)
{
ArraySegment<byte> closingMessage = new ArraySegment<byte>(Encoding.UTF8.GetBytes(
"{\"command\": \"recog-break\"}"
));
using (FileStream fs = File.OpenRead("audio.raw"))
{
byte[] b = new byte[3200];
while (fs.Read(b, 0, b.Length) > 0)
{
await ws.SendAsync(new ArraySegment<byte>(b, 0, fs.Read(b, 0, b.Length)), WebSocketMessageType.Binary, true, CancellationToken.None);
}
await ws.SendAsync(closingMessage, WebSocketMessageType.Text, true, CancellationToken.None);
}
}
(новый2)
private async Task SendAudio(ClientWebSocket ws)
{
ArraySegment<byte> closingMessage = new ArraySegment<byte>(Encoding.UTF8.GetBytes(
"{\"command\": \"recog-break\"}"
));
using (FileStream fs = File.OpenRead("audio.raw"))
{
byte[] b = new byte[3200];
while (true)
{
int temp = fs.Read(b, 0, b.Length);
if (temp == 0)
break;
await ws.SendAsync(new ArraySegment<byte>(b, 0, temp), WebSocketMessageType.Binary, true, CancellationToken.None);
}
await ws.SendAsync(closingMessage, WebSocketMessageType.Text, true, CancellationToken.None);
}
}