我想顺序发送语音数据并使用websocket顺序接收响应

时间:2019-06-20 16:00:58

标签: c# websocket

我正在尝试使用C#中启用了websocket的语音识别API进行语音识别。 根据该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);
            }
        }

(new2)

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);
            }
        }

0 个答案:

没有答案