Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 19:37   #1
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
Вопрос Отсылать аудио файл на распознавание и принимать ответ от гугла

Привет ALL
Нашел код одной функции и код вызова этой функции.
Вот сама функция
Код:
function HTTPPostFile(Const URL, FieldName, FileName: String; Const Data: TStream; Const ResultData: TStrings): Boolean;
const
  CRLF = #$0D + #$0A;
var
  HTTP: THTTPSend;
  Bound, Str: String;
begin
  Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
  HTTP := THTTPSend.Create;
  try
    Str := '--' + Bound + CRLF;
    Str := Str + 'content-disposition: form-data; name="' + FieldName + '";';
    Str := Str + ' filename="' + FileName + '"' + CRLF;
    Str := Str + 'Content-Type: audio/x-flac; rate=8000' + CRLF + CRLF;
    HTTP.Document.Write(Pointer(Str)^, Length(Str));
    HTTP.Document.CopyFrom(Data, 0);
    Str := CRLF + '--' + Bound + '--' + CRLF;
    HTTP.Document.Write(Pointer(Str)^, Length(Str));
    HTTP.MimeType := 'audio/x-flac; rate=8000, boundary=' + Bound;
    Result := HTTP.HTTPMethod('POST', URL);
    ResultData.LoadFromStream(HTTP.Document);
  finally
    HTTP.Free;
  end;
end;
С ней все ок.
Вот код вызова этой функции(код был дан на сайте с функцией)
Код:
HTTPPostFile('https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU', dirrr, ExtractFilename('sound.wav'), Stream, StrList);
Цитата с сайта с кодом
Цитата:
где
Stream — это поток TFileStream в который мы читаем наш записанный файл в формате FLAC.
StrList — это TStringList с ответом от Google.
В общем сделал вызов этой функции, но вот такая ошибка
PHP код:
[ErrorUnit1.pas(130): Undeclared identifier'Stream' 
Помогите исправить=)
TUberwer вне форума Ответить с цитированием
Старый 10.07.2013, 20:55   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Показуй полностью как вызываешь. Скорее всего Stream не описан и не создан. Наверно и StrList
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.07.2013, 21:21   #3
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию

Да, Stream и StrList не созданы и не описаны, могли бы вы помочь с кодом?
Как именно мне их создать и описать? Или просто это переменные String в которые заносится текст?
TUberwer вне форума Ответить с цитированием
Старый 10.07.2013, 21:23   #4
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

Цитата:
Сообщение от TUberwer Посмотреть сообщение
Да, Stream и StrList не созданы и не описаны, могли бы вы помочь с кодом?
Как именно мне их создать и описать? Или просто это переменные String в которые заносится текст?
вызвать их конструкторы и не забыть уничтожить после
Код:
Stream := TStream.Create;
StrList := TStringList.Create; (НЕ TStrings)
предварительно объявить переменные
Код:
Stream: TStream;
StrList: TStringList;
Skype: cotseec
ICQ: 330-171-495

Последний раз редактировалось cotseec; 10.07.2013 в 21:31.
cotseec вне форума Ответить с цитированием
Старый 10.07.2013, 21:27   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от TUberwer Посмотреть сообщение
Да, Stream и StrList не созданы и не описаны, могли бы вы помочь с кодом?
Как именно мне их создать и описать? Или просто это переменные String в которые заносится текст?
простите, вы Делфи вообще знаете?
переменные не умеете объявлять? объекты создавать?
в вашей цитате есть же и имена и типы переменных.
Цитата:
в этой функции нет переменной с именем Stream, банально букву пропустили -TStream
там Stream это имя переменной, а не имя типа.
Цитата:
вызвать их конструкторы
TStream создавать нельзя, это абстрактный класс.
далее,почему упущено присвоение объектов переменным?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.07.2013 в 21:32.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 21:34   #6
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

Цитата:
TStream создавать нельзя, это абстрактный класс.
про TStream - верно, лучше TMemoryStream
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Старый 10.07.2013, 21:39   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от cotseec Посмотреть сообщение
про TStream - верно, лучше TMemoryStream
зависит от того куда грузить нужно.
нет тут понятия лучше.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2013, 21:43   #8
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию

т.е вот такой код должен получится?
Этот код не работает, вот при нажатии на Button3


Код:
procedure TForm1.Button3Click(Sender: TObject);
var
sound : String;
Stream: TStream;
StrList: TStringList;
begin
Stream := TStream.Create;
StrList := TStringList.Create;
sound := ExtractFilePath(ParamStr(0))+'sound.flac';
HTTPPostFile('https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU', sound, ExtractFilename('test'), Stream, StrList);
Form1.Panel1.Caption := 'Success';
Stream.Free;
StrList.Free;
end;
Вот эта статья http://habrahabr.ru/post/144535/ (не реклама)

Последний раз редактировалось TUberwer; 10.07.2013 в 21:50.
TUberwer вне форума Ответить с цитированием
Старый 10.07.2013, 21:46   #9
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

тут без разницы
ТС пытается отослать в гугл файл для распознавания, в функцию он передает в том числе поток, в который уже загружен файл, а что TFileStream, что TMEmoryStream может загрузить из файла, учитывая размеры отправляемого файла (максимум 1 МБ) - разницы нет
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Старый 10.07.2013, 21:50   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от TUberwer Посмотреть сообщение
т.е вот такой код должен получится?

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
sound : String;
Stream: TStream;
StrList: TStringList;
begin
Stream := TStream.Create;
StrList := TStringList.Create;
sound := ExtractFilePath(ParamStr(0))+'sound.flac';
HTTPPostFile('https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU', sound, ExtractFilename('test'), Stream, StrList);
Form1.Panel1.Caption := 'Success';
Stream.Free;
StrList.Free;
end;
Вот эта статья http://habrahabr.ru/post/144535/ (не реклама)
я только что говорил что TStream создавать нельзя, так как это абстрактный класс, применяйте или TMemoryStream если ответ должен быть загружен в память, или же в файл, то тогда TFileStream.
тип переменной менять не обязательно, нужно менять тип создаваемого объекта.

или не ответ, а запрос, я код особо не читал.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.07.2013 в 21:52.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распознавание аудио alezha C# (си шарп) 10 22.05.2013 17:50
А как открыть аудио файл?.. apeorin Общие вопросы C/C++ 7 10.11.2012 18:27
Алгоритм Хсю (аудио файл) bigory Помощь студентам 0 26.03.2012 15:46
AnsiString -> Аудио файл Assemblerru Общие вопросы C/C++ 4 11.11.2010 19:22
Не проигрывается аудио-файл. xakero4ek Общие вопросы Delphi 6 07.10.2010 12:50