powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Record Mic to Byte Array
1 сообщений из 1, страница 1 из 1
Record Mic to Byte Array
    #38868786
Wrun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Пытаюсь сделать запись с микрофона и отправить в гугл API. Раньше делал через файл, сейчас попытался упростить логику просто накапливая. Всё работает, но ответ приходит странный:

{"result":[]}{"result":[{"alternative":[{"transcript":"some text"}],"final":true}],"result_index":0}

т.е. JSON приходит двойной, пустой и правильный...
Работать, то конечно, можно. Но явно что-то не так )

Код записи и отправки в спойлере, прошу подсказать что накопипастил лишнего.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
private WaveIn waveSource = null;
private byte[] waveByteArray = null;

private void StartRec() 
{
	if (waveByteArray != null) Array.Clear(waveByteArray, 0, waveByteArray.Length);
	waveSource = new WaveIn();
	waveSource.WaveFormat = new WaveFormat(16000, 1);
	waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
	waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
	waveSource.StartRecording();
}

void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
	if (waveByteArray == null)
		waveByteArray = e.Buffer;
	else
		waveByteArray = Combine(waveByteArray, e.Buffer);
}

public byte[] Combine(byte[] a, byte[] b)
{
	byte[] ret = new byte[a.Length + b.Length];
	Buffer.BlockCopy(a, 0, ret, 0, a.Length);
	Buffer.BlockCopy(b, 0, ret, a.Length, b.Length);
	return ret;
}

void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
{
	if (waveSource != null)
	{
		waveSource.Dispose();
		waveSource = null;
	}
}

private void StopRec()
{
	waveSource.StopRecording();
	String r = GoogleSpeechRequest();
}

public string GoogleSpeechRequest()
{
	WebRequest request = WebRequest.Create(gUrl);
	request.Method = "POST";

	byte[] byteArray = waveByteArray;

	// Set the ContentType property of the WebRequest.
	request.ContentType = "audio/l16; rate=16000";
	request.ContentLength = byteArray.Length;

	// Get the request stream.
	Stream dataStream = request.GetRequestStream();
	// Write the data to the request stream.
	dataStream.Write(byteArray, 0, byteArray.Length);

	dataStream.Close();

	// Get the response.
	WebResponse response = request.GetResponse();

	dataStream = response.GetResponseStream();
	// Open the stream using a StreamReader for easy access.
	StreamReader reader = new StreamReader(dataStream);
	// Read the content.
	string responseFromServer = reader.ReadToEnd();

	// Clean up the streams.
	reader.Close();
	dataStream.Close();
	response.Close();

	return responseFromServer;
}

...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Record Mic to Byte Array
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]