質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Q&A

解決済

2回答

1985閲覧

マイクからの音声データを分割してAPIに送信したい

ffshtt

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

0グッド

2クリップ

投稿2019/06/25 14:51

こんばんは。
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バイトずつ送ると、
普通に認識されます。

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

上記でいただいたコメントの通り、解決いたしました。
ありがとうございました。

投稿2019/07/12 16:02

ffshtt

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

c#ではないですがjavaで同じことをしていて、録音された時のストリームがダブってる時がありました。
アウェイとを呼び出す前にスリープを挟んでやってみて変わるのであれば、単にリソース食いすぎかコネクションが遅くて常にメモリーストリームに、あ→失敗→あ→失敗→あ→成功 あああえお みたいになってるきがするのです。
javaでしたけど

投稿2019/07/10 04:57

mo-ri

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mo-ri

2019/07/10 06:13

あら亀過ぎましたね。 ありがとうございます
ffshtt

2019/07/11 15:12

コメントありがとうございます。 上記に挙げていただいた質問の通りで、解決いたしました。 ありがとうございました。
YAmaGNZ

2019/07/11 22:28

解決したのであれば、自己解決なりで子の質問も解決済みにしておいてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問