Вверх ↑
Этот топик читают: Гость
Ответов: 253
Рейтинг: 0
#1: 2020-02-12 01:04:50 ЛС | профиль | цитата
Добрый вечер. не понимаю что он хочет. Если стоит метод POST (А он и нужен для отправки то ошибка) типа не правильный mime тип. Хотя в заголовке и сам формат файла правильный.
гугл работает только с FLAC и LINEAR16(l16) .. а вот если поставить просто get то показывает результат(Пустой конечно)


Add(HTTPClient,7935507,217,509)
{
URL="https://www.google.com/speech-api/v2/recognize?output=json&lang=ru-RU&key=AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw"
Method=1
UserAgent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.8d Safari/537.36"
Headers="Content-Type: audio/x-flac; rate=16000; "
AutoRedirect=0
PostData="..."
FileField="..."
FileMIME="audio/x-flac"
Boundary=""
Point(UploadFile)
Point(PostData)
Point(RawHeaders)
Point(Headers)
link(onHeadersAvail,6996692:doData,[])
link(onFinish,12949171:doEvent2,[(303,522)(303,524)])
link(UploadFile,14528493:Var1,[(237,334)])
}
Add(Memo,13284783,441,511)
{
Left=10
Top=135
Width=365
Height=170
ScrollBars=2
}
Add(DoData,6996692,294,509)
{
link(onEventData,12949171:doEvent1,[(338,515)(338,517)])
link(Data,2827459:getVar,[])
}
Add(Hub,12949171,350,511)
{
InCount=2
link(onEvent1,13284783:doClear,[(402,517)(402,524)])
link(onEvent2,2504412:doCharset,[(374,524)(374,517)])
}
Add(LineBreakEx,2827459,294,483)
{
Caption="head"
Type=2
}
Add(LineBreakEx,15257747,231,558)
{
Caption="head"
Type=3
link(_Data,7935507:ContentType,[])
}
Add(BASS_RecordStart,12537631,301,350)
{
Freq=16000
Name="AMofComp"
link(FileName,14528493:Var2,[])
}
Add(Button,14922219,189,336)
{
Left=10
Top=35
Width=360
Caption="Запись"
link(onClick,9980539:doEvent1,[])
}
Add(Button,8623319,189,378)
{
Left=10
Top=80
Width=360
Caption="Стоп"
link(onClick,8616683:doEvent1,[(249,384)(249,377)])
}
Add(Edit,15366374,301,266)
{
Left=375
Top=30
Width=170
Visible=1
Text="MySound.FLAC"
}
Add(GetDataEx,14528493,301,329)
{
link(Data,15366374:Text,[])
}
Add(Hub,8616683,266,371)
{
InCount=2
OutCount=5
link(onEvent1,12537631:doStop,[(290,377)(290,363)])
link(onEvent2,6293711:doStop,[])
link(onEvent3,232462:doData,[(343,391)(343,370)])
link(onEvent5,5456339:doEvent1,[])
}
Add(Timer,10868615,140,511)
{
Interval=500
Enable=1
AutoStop=1
link(onTimer,7935507:doLoadString,[(194,517)(194,515)])
}
Add(Charset,2504412,385,511)
{
Type=7
link(onCharset,13284783:doAdd,[])
}
Add(Label,8015872,469,322)
{
Left=35
Top=60
Width=39
Height=14
Caption=""
Alignment=2
}
Add(DoData,11753162,378,322)
{
Data=String(Говорите, ограничение 10с)
link(onEventData,11975996:doEvent1,[])
}
Add(Hub,9980539,245,336)
{
OutCount=4
link(onEvent1,12537631:doStart,[(291,342)(291,356)])
link(onEvent2,11753162:doData,[(333,349)(333,328)])
link(onEvent3,13698040:doWork2,[(451,356)(451,384)])
link(onEvent4,6293711:doTimer,[(420,363)(420,377)])
}
Add(DoData,232462,378,364)
{
Data=String()
link(onEventData,10427067:doEvent1,[])
}
Add(HubEx,11328258,441,322)
{
link(onEvent,8015872:doText,[])
}
Add(Hub,11975996,413,322)
{
link(onEvent1,11328258:doWork2,[])
link(onEvent2,12507371:doOn,[(451,335)(451,384)])
}
Add(Hub,10427067,413,364)
{
link(onEvent1,11328258:doWork3,[(445,370)])
link(onEvent2,12507371:doOff,[])
}
Add(LED,12507371,476,364)
{
Left=10
Top=60
Width=20
Height=20
}
Add(MainForm,3958874,105,84)
{
Width=397
Height=354
Point(Handle)
link(onCreate,8377987:doEvent1,[])
}
Add(BASS_Version,10183901,252,98)
{
link(onCheckOk,2139448:doEnum,[])
link(onCheckFailed,109118:doMessage,[(292,111)(292,153)])
}
Add(Message,11232751,252,147)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,301,147)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(BASS_Init,4252681,203,98)
{
Device=1
Freq=8000
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(243,111)(243,153)])
link(Handle,3958874:Handle,[(223,89)(195,89)(195,124)(111,124)])
}
Add(BASS_RecordCenter,12302345,399,105)
{
link(onInit,15862958:doEnumInputs,[])
link(onError,11713735:doMessage,[(436,118)(436,160)])
}
Add(Message,11713735,448,154)
{
Message="InitRecord failed!"
Caption="Error"
Icon=1
}
Add(BASS_RecordInput,15862958,448,105)
{
link(onEnumInputs,16487182:doEvent1,[])
}
Add(BASS_InputControl,9998094,574,105)
{
Volume=1
State=1
link(Volume,5583556:Var1,[(587,89)])
link(State,5583556:Var2,[])
}
Add(Memory,4613851,588,42)
{
Default=Integer(1)
}
Add(ComboBox,4718633,350,98)
{
Left=5
Top=5
Width=185
Height=21
Text="Звуковая карта"
Point(Index)
Point(doSelect)
Point(onSelect)
link(onClick,14431654:doWork2,[])
link(onSelect,14431654:doWork3,[(389,118)])
}
Add(ComboBox,8950199,525,112)
{
Left=195
Top=5
Width=175
Height=21
Text="Вход"
Point(doEnabled)
Point(Index)
Point(doSelect)
Point(onSelect)
link(onClick,7638567:doWork3,[(564,125)])
link(onSelect,7638567:doWork2,[(559,132)(559,118)])
}
Add(BASS_RecordDevices,2139448,301,98)
{
link(onEnum,4718633:doAdd,[])
}
Add(Hub,16487182,490,105)
{
link(onEvent1,8950199:doEnabled,[(514,111)(514,160)])
link(onEvent2,8950199:doAdd,[])
}
Add(GetDataEx,5583556,588,84)
{
link(Data,4613851:Value,[])
}
Add(DoData,3972796,154,203)
{
Data=String(0)
link(onEventData,2095882:doEvent1,[])
}
Add(Hub,2095882,196,203)
{
link(onEvent1,4718633:doSelect,[(280,209)(280,146)])
link(onEvent2,8950199:doSelect,[(368,216)(368,167)])
}
Add(Hub,8377987,147,98)
{
OutCount=3
link(onEvent1,4252681:doInit,[])
link(onEvent2,3972796:doData,[(201,111)(201,160)(142,160)(142,209)])
}
Add(HubEx,14431654,385,105)
{
link(onEvent,12302345:doInit,[])
}
Add(HubEx,7638567,560,112)
{
Angle=3
link(onEvent,9998094:doSetInput,[(564,111)])
}
Add(Timer,6293711,581,371)
{
Enable=1
link(onTimer,3104357:doNext,[])
}
Add(Label,878933,728,371)
{
Left=315
Top=60
Width=4
Height=4
Caption=""
}
Add(CounterEx,3104357,644,371)
{
Max=10
Point(doReset)
link(onNext,1556530:doEvent1,[])
}
Add(If_else,2553928,644,413)
{
Op2=String(10)
link(onTrue,8616683:doEvent2,[(688,419)(688,401)(254,401)(254,384)])
link(Op1,3104357:Count,[])
}
Add(Hub,1556530,686,371)
{
link(onEvent1,6498174:doWork2,[])
link(onEvent2,2553928:doCompare,[(712,384)(712,402)(632,402)(632,419)])
}
Add(HubEx,13698040,623,378)
{
link(onEvent,3104357:doReset,[])
}
Add(Hub,5456339,539,399)
{
link(onEvent1,13698040:doWork3,[(627,405)])
link(onEvent2,6498174:doWork3,[(704,412)])
}
Add(HubEx,6498174,700,371)
{
link(onEvent,878933:doText,[])
}
Add(Button,5566377,84,511)
{
Left=10
Top=105
Width=110
Caption="Распознать"
link(onClick,10868615:doTimer,[])
}

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2020-02-12 12:46:38 ЛС | профиль | цитата
Нужно знать формат POST-запроса, который требует сервис. HTTPClient может реализовать только multipart/form-data и application/x-www-form-urlencoded. Сервис может хотет chunked или какой-то другой. В таком случае ставится EncType=None, тело запроса формируется вручную и подаётся на PostData, заголовок "Content-Type" указывается соответственно.
карма: 26

0
Ответов: 253
Рейтинг: 0
#3: 2020-02-12 13:05:16 ЛС | профиль | цитата
Я просто нашел один интересный скрипт на C# (он рабочий) и подумал можно ли это как-то реализовать в Hiasm

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio;
using NAudio.Wave;
using System.Net;
using System.IO;
using System.IO.Compression;


namespace SpeechToText
{
public partial class Form1 : Form
{
WaveIn waveIn;
WaveFileWriter writer;
string outputFilename = "demo.wav";
bool ON = false;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (ON == false)
{
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += new EventHandler<NAudio.Wave.StoppedEventArgs>(waveIn_RecordingStopped);
waveIn.WaveFormat = new WaveFormat(16000, 1);
writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
label2.Text = "Идет запись...";
button1.Text = "Стоп";
waveIn.StartRecording();
ON = true;

}
else
{
waveIn.StopRecording();
label2.Text = "";
ON = false;
button1.Text = "Запись";
timer1.Enabled = true;
}
}
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
}


void waveIn_RecordingStopped(object sender, EventArgs e)
{
waveIn.Dispose();
waveIn = null;
writer.Close();
writer = null;
}

private void timer1_Tick(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create("https://www.google.com/speech-api/v2/recognize?output=json&lang=ru-RU&key=AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw");
//
request.Method = "POST";
byte[] byteArray = File.ReadAllBytes(outputFilename);
request.ContentType = "audio/l16; rate=16000"; //"16000";
request.ContentLength = byteArray.Length;
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);


// Получить ответ.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Откройте поток, используя StreamReader для легкого доступа.
StreamReader reader = new StreamReader(response.GetResponseStream());
//Читайте содержание.
label1.Text = reader.ReadToEnd();
// Очистите потоки.
reader.Close();
response.Close();
timer1.Enabled = false; //Получить результат
//button1_Click(this, EventArgs.Empty); //Распознавать после ответа
}
}
}
карма: 0

0
Ответов: 4621
Рейтинг: 746
#4: 2020-02-12 13:51:48 ЛС | профиль | цитата
Судя по скрипту аудио-файл просто является телом запроса. Поставь EncType=None, а аудио-файл сконвертируй Stream->Str и подай на PostData. Следить чтобы если в заголовке "Content-Type" стоит flac, то и файл должен быть flac.

Поскольку файл грузится в память, то большие размеры файла могут вызывать ошибки. Ориентировочно, до пары сотен мегабайт, в зависимости от сложности схемы (можно выяснить опытным путем).

Редактировалось 3 раз(а), последний 2020-02-12 13:55:15
карма: 26

0
Ответов: 253
Рейтинг: 0
#5: 2020-02-12 14:00:12 ЛС | профиль | цитата
Понял, спасибо большое. Буду пробовать.
карма: 0

0
Ответов: 537
Рейтинг: 14
#6: 2020-02-19 22:17:30 ЛС | профиль | цитата
Есть у меня, делал давненько, работает все, архив там большой, могу скинуть ЛС. Вы так смешно общались, там кроме четкого формата .flac м частотой дискретизации 16 Кгц , нужен кще и ключ Гугла разработчика, это нужно зарегистрироваться как разработчик ПО, дают ключ, и можно распознавать, и то лимиты есть наверное. Пиши, бесплатно дам полностью рабочую версию с ключем. Там конвертер формата .wav на .flac с правильной частотой дискретизации, можно типа даже записи переводить с mp3. Ваше сообщение прочитал, доделал все таки, теперь четко все работает. Пишите кому нужно, дам ссылку на своё изобретение, можно бесплатно скачать. Удалю только бота своего, честно, задрал уже этот типа интеллект, прикольно сделал, поговорить можно, в игры словами поиграть, например игра в слова, \то когда нужно сказать слово на последнюю букву. Может шутить, анекдоты рассказывать когда некоторое время молчишь, она начинает спрашивать, почему молчишь, и начертает сама рассказывать что нибудь и привлекать внимание, естественно команды выполняет типа запуска программ, есть много разных режимов, типа обучение, обучение с редактирование ответов, просто тупой бот, который сам в инете ищет инфу которую скажешь, режим есть шуточный, разговоры разные, тпа анекдоты, подколки разные. Все равно это не человек, поиграться можно, сам знаю что у неё мозгов своих нет.

Редактировалось 3 раз(а), последний 2020-02-20 00:00:31
карма: 4

1
Голосовали:Joiner
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)