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

 
Реter Konow:
Если звуковой файл может воспроизводится из папки Files, куда предварительно записываться советником, то решение задачи будет реальным, если полученный звуковой файл будет целостным. 
Нет! В документации сказано, что звуковые файлы должны храниться в папке Sounds. 
https://www.mql5.com/ru/docs/common/playsound

Это критически важный вопрос для темы. Если файл не проиграется из папки Files, то PlaySound отпадает в принципе. Тогда не нужно возвращать от сервера ничего. А зачем? Если только, PlaySound вдруг не заработает с внутренним ресурсом советника, в чем я сильно сомневаюсь...
 
Кто нибудь, попробуйте запустить .wav из папки Files. Интересно, вдруг получиться.)))
 
//+------------------------------------------------------------------+
//|                                                       Sounds.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()
  {
//---
   PlaySound("\\Files\\Sounds\\alert.wav");
   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\request.wav");
   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\email.wav");
  }
//+------------------------------------------------------------------+
Реter Konow
:

Кто нибудь, попробуйте запустить .wav из папки Files. Интересно, вдруг получиться.)))

да работает я скопировал полностью папку 

C:\Users\San\AppData\Roaming\MetaQuotes\Terminal\3DE8A6E768D9369994F541727D733DE8\MQL5\Files\Sounds\
 
Alexsandr San:

да работает я скопировал полностью папку 

А вот это, уже надежда.)))
 
Реter Konow:
А вот это, уже надежда.)))

ещё раз перепроверил песню запустил 

   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\Kazka.wav");
https://yadi.sk/d/EGsTJGYBmDFnGg
 
Alexsandr San:

ещё раз перепроверил песню запустил 

https://yadi.sk/d/EGsTJGYBmDFnGg
Ну, значит не всегда нужно стопроцентно верить документации)))

Теперь, если ТС будет получать от сервера валидные звук.файлы, далее, перезаписывать на одно место и на ходу проигрывать, то задача универсального решения озвучки текстовых посланий пользователю будет решена. 

ЗЫ. Может PlaySound и внутренние ресурсы создаваемые советником воспроизводить звуком может? Тогда, записывать файл в Files не нужно. Сразу сохранять в ресурсе и воспроизводить.
 
Реter Konow:
Ну, значит не всегда нужно стопроцентно верить документации)))

Теперь, если ТС будет получать от сервера валидные звук.файлы, далее, перезаписывать на одно место и на ходу проигрывать, то задача универсального решения озвучки текстовых посланий пользователю будет решена. 

ЗЫ. Может PlaySound и внутренние ресурсы создаваемые советником воспроизводить звуком может? 

не знаю у меня в советнике - где происходит какое не будь действие, проигрывает

                     ObjectsDeleteAll(0,InpObjDownNameG);
                     IndicatorDelete();
                     PlaySound("ok.wav");
                     if(InpChartInd && Obj_SELLChartInd())
                        return;

естественно своя мелодия или звук
 

 
Serhii Shevchuk:

Могу посмотреть, но не раньше, чем завтра вечером. Если сами до того времени не разберетесь.

Maxim Kuznetsov:

и не выйдет :-) 

зачем вы в HTTP заголовки передаёте опции команд curl ???

блин, ну хоть почитайте книжек, полистайте примерчиков...а то действительно, мы всем кагалом пишем вам статью

так где взять пример с выводом в бинарный файл!? ))

пытаясь разобраться, я минимизировал синтаксис самой url команды


curl -X GET -u ^
apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB ^
--output hello_world.wav ^
https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST

с ее помощью скачиваю wav файл с словом TEST

далее убираю опции

//+------------------------------------------------------------------+
//|                                                   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 = "-u apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB --output hello_world.wav";
   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST";
   ResetLastError();
   int res = WebRequest("GET",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);
     }
  }
//+------------------------------------------------------------------+


в заголовке сейчас опция авторизации -u за которой сервер ждет apikey. Вроде все логично, но что-то в синтаксисе все еще неверно

результат выполнения кода - "Webrequest4Voice (EURCHF,D1) Ошибка загрузки 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', код 401"

Подскажете? ))

 
Nikolai Karetnikov:

так где взять пример с выводом в бинарный файл!? ))

пытаясь разобраться, я минимизировал синтаксис самой url команды


с ее помощью скачиваю wav файл с словом TEST

далее убираю опции


в заголовке сейчас опция авторизации -u за которой сервер ждет apikey. Вроде все логично, но что-то в синтаксисе все еще неверно

результат выполнения кода - "Webrequest4Voice (EURCHF,D1) Ошибка загрузки 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', код 401"

Подскажете? ))

Что означает ошибка 401?
 

Чтобы перевести запрос HTTP из опций curl в параметры WebRequest, надо:

1. в общих чертах, в википедии, посмотреть как устроен HTTP

2. в документации Curl глянуть какая опция что значит и зачем служит

3. прочесть справку по WebRequest и посмотреть примеры которых даже в этой ветке немало

4. писать код, осознавая содеянное :-) что, зачем, почему подставляется.

вы явно ожидаете что все 4 пункта за вас сделают. Понимаю, что выходные, времени мало, идей много. Надо быстро

Но это всё равно придётся сделать самому