こんばんは。
c#でweboscket APIを用いて音声認識を試みています。
やりたいことは、
マイクから音声を取り込んで、それをいったんバッファにためこみ、
順次そこから読み込んでAPIに送る、というものです。
マイクからのの音の取り込みは、Naudioというライブラリを使用しています。
###問題点
取り込んだ音声データを順次送っているはずなのですが、
変なふうに認識されてしまいます。
たとえば、「こんにちは」と吹き込んで実行すると
「ここここにち」というような表示になっています。
1回に送っているバイトの長さは3200です。
該当するコードは以下のようになっています(録音部と、APIへ送る部分です)。
おかしな点がございましたら、ご指摘お願いいたします。
csharp
1private async Task Record_stream() 2 { 3 // Read from the microphone and stream to buffer. 4 var waveIn2 = new WaveInEvent(); 5 waveIn2.DeviceNumber = 0; 6 waveIn2.WaveFormat = new WaveFormat(16000, 1); 7 8 waveIn2.DataAvailable += 9 (object sender, WaveInEventArgs args) => 10 { 11 rec_frame.Add(args.Buffer); 12 }; 13 waveIn2.StartRecording(); 14 } 15 16private async Task SendAudio(ClientWebSocket ws) 17 { 18 ArraySegment<byte> closingMessage = new ArraySegment<byte>(Encoding.UTF8.GetBytes( 19 "{\"command\": \"recog-break\"}" 20 )); 21 int i = 0; 22 while(i < 100) 23 { 24 await ws.SendAsync(new ArraySegment<byte>(rec_frame[i]), WebSocketMessageType.Binary, true, CancellationToken.None); 25 i++; 26 } 27 rec_frame.RemoveRange(0, 30); 28 await ws.SendAsync(closingMessage, WebSocketMessageType.Text, true, CancellationToken.None); 29 }
ちなみに、ファイルに録音された音源を同じように3200バイトずつ送ると、
普通に認識されます。
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。