Я хочу отправлять голосовые данные последовательно и получать ответы последовательно с помощью веб-сокета - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь распознать голос с помощью 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);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...