こんにちは。
私はwebAPIを使って音声認識を試みています。
マイクから音を拾って、一旦バッファにためこみ、
そこから順次読みだして、APIに送ろうとしています。
そこで以下のようなコードを書いてみたのですが、うまくいきません。
どこがまくいかないかというと、バイト列データをためこんだバッファから
データを取り出せていないようです。
結果として音声認識結果が、同じ音の繰り返しになってしまいます。
例えば、こんにちは、と喋っても、ここここ、というふうに認識されてしまいます。
音声データをバッファに書き込んでいる関数と、
その書き込んだバッファからデータを取り出して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 waveIn2.DataAvailable += 8 (object sender, WaveInEventArgs args) => 9 { 10 rec_frame.Add(args.Buffer); // ここでバッファに音声データを追加 11 if (rec_frame.Count == 100) 12 { 13 waveIn2.StopRecording(); 14 return; 15 } 16 }; 17 waveIn2.StartRecording(); 18 } 19 20 21private async Task SendAudio(ClientWebSocket ws) 22 { 23 ArraySegment<byte> closingMessage = new ArraySegment<byte>(Encoding.UTF8.GetBytes( 24 "{\"command\": \"end-commnad\"}" 25 )); 26 foreach (var x2 in rec_frame) // ここでバッファからバイト列データを取り出す 27 { 28 await ws.SendAsync(new ArraySegment<byte>(x2), WebSocketMessageType.Binary, true, CancellationToken.None); // ここでAPIに送信 29 } 30 await ws.SendAsync(closingMessage, WebSocketMessageType.Text, true, CancellationToken.None); 31 return; 32 }
ちなみに、ファイルから音声データを読み込んだ場合は、正しく認識されます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/26 11:44
2019/06/26 11:51
2019/06/26 11:57