и снова dll и маркет - страница 12

 
nkaretnikov:

в файл записывать не надо. Вот здесь 80% уже решено. С помощью curl команды к TTS сервису IBM Watson можем скачать WAV файл. Теперь надо разобраться сопоставить форматы curl команды  и WebRequest метода

Что значит "скачать"? Полученный после преобразования текста звуковой файл нужно поместить в папку Sounds чтобы советник его проиграл. Звук в советнике создает функция PlaySound, а не WebRequest, и она берет аудиофайл из папки Sounds. Говорю же, что задача почти нерешаемая.
 
Реter Konow:
Что значит "скачать"? Полученный после преобразования текста звуковой файл нужно поместить в папку Sounds чтобы советник его проиграл. Звук в советнике создает функция PlaySound, а не WebRequest, и она берет аудиофайл из папки Sounds. Говорю же, что задача почти нерешаемая.

мда... 

проиграть wav файл из песочницы без DLL невозможно?

 
nkaretnikov:

мда... 

проиграть wav файл из песочницы без DLL невозможно?

Как он в песочнице окажется??? После преобразования, нужно полученный файл поместить в песочницу. Этого вебреквест не сделает. Как запишите его в автоматическом режиме в папку Sounds?
 
Реter Konow:
Как он в песочнице окажется???

я предполагаю, что результатом работы WebRequest будет WAV файл, скачанный с сервера. Вот результат следующего кода

//+------------------------------------------------------------------+
//|                                                   WebRequest.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   char cost_char_data[];
   string  result_headers;
   
   headers = headers + "-u apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB";
   headers = headers + " --header \"Content-Type: application/json\"";
   headers = headers + " --header \"Accept: audio/wav\"";
   headers = headers + " --data \"{\"text\":\"hello world\"}\"";
   headers = headers + " --output hello_world.wav";
//output hello_world.wav ^

   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com";
//--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com"
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
//--- обнуляем код последней ошибки
   ResetLastError();
//--- загрузка html-страницы с Yahoo Finance
   int res = WebRequest("POST",url,headers,1000,cost_char_data,result,result_headers);
   if(res==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         //PrintFormat("Заголовки сервера: %s",headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("output hello_world.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+



на данном этапе проблема в том, что hello_world.wav пустым получается, т.к. формат вызова WebRequest явно неверен

 
Nikolai Karetnikov:

я предполагаю, что результатом работы WebRequest будет WAV файл, скачанный с сервера. Вот результат следующего кода



на данном этапе проблема в том, что hello_world.wav пустым получается, т.к. формат вызова WebRequest явно неверен

Даже, если получите в советник валидный звуковой файл от сервера через сокет или вебреквест, не сможете его записать в папку Sounds, а значит, PlaySound его не сможет проиграть. 
 
Реter Konow:
Даже, если получите в советник валидный звуковой файл от сервера через сокет или вебреквест, не сможете его записать в папку Sounds, а значит, PlaySound его не сможет проиграть. 

PlaySound это единственный вариант воспроизведения wav файла без DLL?

 
Nikolai Karetnikov:

PlaySound это единственный вариант воспроизведения wav файла без DLL?

Да.
 
Реter Konow:
Даже, если получите в советник валидный звуковой файл от сервера через сокет или вебреквест, не сможете его записать в папку Sounds, а значит, PlaySound его не сможет проиграть. 

см. выше по теме - всё возможно, но требуется воля пользователя

 
Реter Konow:
Да.

хреново )

 
Реter Konow:
Да.

подождите, а как же вот это

//--- проиграем звуковой файл Demo.wav из папки каталог_данных_терминала\MQL5\Files\
   PlaySound("\\Files\\Demo.wav");

https://www.mql5.com/ru/docs/runtime/resources

Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
Причина обращения: