e di nuovo dll e mercato - pagina 12

 
nkaretnikov:

non c'è bisogno di scrivere sul file. WebRequest

Cosa significa "scaricare"? Il file audio ottenuto dopo la conversione del testo deve essere messo nella cartella Sounds affinché Expert Advisor possa riprodurlo. Il suono è creato in EA dalla funzione PlaySound, non da WebRequest, e prende un file audio dalla cartella Sounds. Vi dico che il compito è quasi impossibile.
 
Реter Konow:
Cosa intendi per "scaricare"? Il file audio ottenuto dopo la conversione del testo deve essere messo nella cartella Sounds perché Expert Advisor lo riproduca. La funzione PlaySound, non WebRequest, crea il suono in Expert Advisor, e prende un file audio dalla cartella Sounds. Vi dico che il compito è quasi impossibile.

Sì...

è impossibile riprodurre un file wav da una sandbox senza una DLL?

 
nkaretnikov:

Sì...

è impossibile riprodurre un file wav da una sandbox senza una DLL?

Come finirà nella sandbox? Dopo la conversione, è necessario mettere il file risultante nella sandbox. Webrequest non lo farà. Come si fa a scriverlo automaticamente nella cartella Sounds?
 
Реter Konow:
Come finirà nella sandbox?

Presumo che il risultato della WebRequest sarà un file WAV scaricato dal server. Ecco il risultato del seguente codice

//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+



il problema in questa fase è che hello_world.wav viene fuori vuoto, perché il formato della chiamata WebRequest è chiaramente sbagliato

 
Nikolai Karetnikov:

Presumo che il risultato della WebRequest sarà un file WAV scaricato dal server. Ecco il risultato del seguente codice



il problema in questa fase è che hello_world.wav viene fuori vuoto, perché il formato della chiamata WebRequest è chiaramente sbagliato

Anche se si ottiene un file audio valido dal server a EA tramite socket o webrequest, non è possibile scriverlo nella cartella Sounds, quindi PlaySound non sarà in grado di riprodurlo.
 
Реter Konow:
Anche se si ottiene un file audio valido dal server all'EA tramite socket o webrequest, non è possibile scriverlo nella cartella Sounds, il che significa che PlaySound non sarà in grado di riprodurlo.

PlaySound è l'unica opzione per riprodurre un file wav senza una DLL?

 
Nikolai Karetnikov:

PlaySound è l'unica opzione per riprodurre un file wav senza una DLL?

Sì.
 
Реter Konow:
Anche se si ottiene un file audio valido per l'EA dal server tramite socket o webrequest, non è possibile scriverlo nella cartella Sounds, il che significa che PlaySound non sarà in grado di riprodurlo.

vedi sopra sull'argomento - tutto è possibile, ma richiede la volontà dell'utente

 
Реter Konow:
Sì.

merdoso )

 
Реter Konow:
Sì.

Aspetta, che ne dici di questo

//--- riprodurre il file audio Demo.wav da terminal_data_directory\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-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...