質問編集履歴

1

修正中

2019/08/19 02:24

投稿

sigoto
sigoto

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,395 +1,5 @@
1
1
  ### 前提・実現したいこと
2
-
3
- - C#
4
-
5
- - NAudio
6
-
7
- - CAPIO API
8
-
9
-
10
-
11
- マイク入力した音声をNAudioで取得し、
12
-
13
- ストリーミングでテキスト変換したい
14
-
15
-
16
-
17
- ### 発生している問題・エラーメッセージ
18
-
19
- API側から変換結果が ””空で返ってきます。
20
-
21
- ステップ実行すると、下記のソースの”SourceStreamDataAvailable”で
22
-
23
- ループしてしまうのですが、
24
-
25
- 原因がよくわかりません。
26
-
27
-
28
-
29
- C# は普段使わない言語のため、四苦八苦しております。
30
-
31
-
32
-
33
- ### 教えていただきたいこと
34
-
35
- - ”SourceStreamDataAvailable”でループしなくなる方法
36
-
37
- - ストリーミングWAVファイルを一定時間(5秒など)で区切ってリクエストする方法
38
-
39
-
40
-
41
- どなたかご教示いただけませんでしょうか。
42
-
43
-
44
2
 
45
3
  ### 該当のソースコード
46
4
 
47
-
48
-
49
- ```C#
50
-
51
- public partial class Main : Form
52
-
53
- {
54
-
55
- private void btnStartRealTimeConvert_Click(object sender, EventArgs e)
56
-
57
- {
58
-
59
- StartRecording();
60
-
61
- }
62
-
63
-
64
-
65
- public void StartRecording()
66
-
67
- {
68
-
69
- this.isStoped = false;
70
-
71
-
72
-
73
- myAPIClient = new myAPIClient(this, this.txtSourceVoiceFiles.Text, iReadBytes, 0);
74
-
75
-
76
-
77
- this.inputWaveIn = new WaveIn
78
-
79
- {
80
-
81
- DeviceNumber = iSelectedDeviceNumber,
82
-
83
- WaveFormat = new WaveFormat(16000, 16, WaveIn.GetCapabilities(iSelectedDeviceNumber).Channels)
84
-
85
- };
86
-
87
-
88
-
89
-
90
-
91
- this.inputWaveIn.DataAvailable += this.SourceStreamDataAvailable;
92
-
93
- this.inputWaveIn.StartRecording();
94
-
95
- }
96
-
97
-
98
-
99
- public void SourceStreamDataAvailable(object sender, WaveInEventArgs e)
100
-
101
- {
102
-
103
- if (this.isStoped) return;
104
-
105
-
106
-
107
- if (e.BytesRecorded > 0)
108
-
109
- {
110
-
111
- this.threadRealTime = new Thread(() => myAPIClient.ExecuteWebSocketRequestForRealTime(e.Buffer, e.BytesRecorded));
112
-
113
- this.threadRealTime.Start();
114
-
115
- }
116
-
117
- }
118
-
119
- }
120
-
121
-
122
-
123
- public sealed class MyAPIClient : IDisposable
124
-
125
- {
126
-
127
- public MyAPIClient(Main mainForm, string audioPath, int readBytes, int inputDeviceIndex)
128
-
129
- {
130
-
131
- this.apiKey = ConfigurationManager.AppSettings["apiKey"];
132
-
133
-
134
-
135
- this.objMainForm = mainForm;
136
-
137
- this.AudioPath = audioPath;
138
-
139
- this.AudioFileName = Path.GetFileName(audioPath);
140
-
141
- this.iReadBytes = readBytes;
142
-
143
- this.isAbort = false;
144
-
145
- }
146
-
147
-
148
-
149
-
150
-
151
- public void ExecuteWebSocketRequestForRealTime(byte[] buffer, int burrerLength)
152
-
153
- {
154
-
155
- if (this.isAbort)
156
-
157
- {
158
-
159
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), "Abort!!");
160
-
161
- objMainForm.RefreshStatusText(msg);
162
-
163
-
164
-
165
- return;
166
-
167
- }
168
-
169
- var ctx = new JObject
170
-
171
- {
172
-
173
- {"apiKey", apiKey},
174
-
175
- {"partial", true},
176
-
177
- {"autostop", false},
178
-
179
- {"nbest", 1},
180
-
181
- {"heatbeat",true},
182
-
183
- {"raw",true},
184
-
185
- }.ToString();
186
-
187
-
188
-
189
- var context = new JObject
190
-
191
- {
192
-
193
- {"context", ctx }
194
-
195
- };
196
-
197
-
198
-
199
- var disconnect = new JObject
200
-
201
- {
202
-
203
- {"disconnect", true }
204
-
205
- };
206
-
207
-
208
-
209
- var options = new IO.Options { Transports = ImmutableList.Create("websocket") };
210
-
211
-
212
-
213
- ManualResetEvent resetEvent = new ManualResetEvent(false);
214
-
215
-
216
-
217
- mySocket = IO.Socket("XXXXXXXXXXXXXXXXX", options);
218
-
219
-
220
-
221
- mySocket.On(Socket.EVENT_CONNECT, () =>
222
-
223
- {
224
-
225
- mySocket.Send(context);
226
-
227
-
228
-
229
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), context.ToString());
230
-
231
- objMainForm.RefreshSendDataText(msg);
232
-
233
-
234
-
235
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), "send : context data for connect");
236
-
237
- objMainForm.RefreshStatusText(msg);
238
-
239
-
240
-
241
- try
5
+ 修正中
242
-
243
- {
244
-
245
- var audio = new JObject
246
-
247
- {
248
-
249
- {"audio", buffer.Take(burrerLength).ToArray()}
250
-
251
- };
252
-
253
-
254
-
255
- mySocket.Send(audio);
256
-
257
-
258
-
259
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), audio.ToString());
260
-
261
- objMainForm.RefreshSendDataText(msg);
262
-
263
-
264
-
265
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), "send : audio data");
266
-
267
- objMainForm.RefreshStatusText(msg);
268
-
269
- }
270
-
271
- finally
272
-
273
- {
274
-
275
- //mySocket.Send(disconnect);
276
-
277
-
278
-
279
- //msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), disconnect.ToString());
280
-
281
- //objMainForm.RefreshSendDataText(msg);
282
-
283
-
284
-
285
- //msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), "send : data for disconnect");
286
-
287
- //objMainForm.RefreshStatusText(msg);
288
-
289
- }
290
-
291
- });
292
-
293
-
294
-
295
- mySocket.On(Socket.EVENT_MESSAGE, data =>
296
-
297
- {
298
-
299
- Console.WriteLine(data);
300
-
301
-
302
-
303
- string strGetRawDate = data.ToString();
304
-
305
-
306
-
307
- objMainForm.RefreshConvertedText_L(GetTranscriptFromJson(strGetRawDate, 0));
308
-
309
- objMainForm.RefreshConvertedText_R(GetTranscriptFromJson(strGetRawDate, 1));
310
-
311
-
312
-
313
- objMainForm.RefreshReceiveDataText(strGetRawDate);
314
-
315
- });
316
-
317
-
318
-
319
- mySocket.On(Socket.EVENT_CONNECT_ERROR, (err) =>
320
-
321
- {
322
-
323
- Console.WriteLine(err);
324
-
325
-
326
-
327
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), err.ToString());
328
-
329
- objMainForm.RefreshStatusText(msg);
330
-
331
- });
332
-
333
-
334
-
335
- mySocket.On(Socket.EVENT_CONNECT_TIMEOUT, (err) =>
336
-
337
- {
338
-
339
- Console.WriteLine(err);
340
-
341
-
342
-
343
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), err.ToString());
344
-
345
- objMainForm.RefreshStatusText(msg);
346
-
347
- });
348
-
349
-
350
-
351
- mySocket.On(Socket.EVENT_DISCONNECT, (err) =>
352
-
353
- {
354
-
355
- Console.WriteLine(err);
356
-
357
-
358
-
359
- msg = string.Format("[{0}] : [{1}]", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ffff"), err.ToString());
360
-
361
- objMainForm.RefreshStatusText(msg);
362
-
363
- });
364
-
365
-
366
-
367
- resetEvent.WaitOne();
368
-
369
-
370
-
371
- mySocket.Close();
372
-
373
- }
374
-
375
- }
376
-
377
- ```
378
-
379
-
380
-
381
- ### 試したこと
382
-
383
- - Sleep処理
384
-
385
-   APIサーバと切断されてしまい、空の結果すら返ってこなくなる(500エラー)
386
-
387
-
388
-
389
- - NAudioのWaveFileWriter
390
-
391
- 下記のサイトを参考にWaveFileWriterをつかってみるも、うまくいかない。
392
-
393
- https://codeday.me/jp/qa/20190621/1063224.html
394
-
395
-   1秒のWavファイルは生成された。。。