我正在尝试使用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);
}
}