e novamente dll e mercado - página 31

 
Andrei Trukhanovich:

meu ponto é que isso não importa.

seu código (quase) trabalha para a Rússia).

a atenção tem adormecido, aparentemente ))

 
Реter Konow:

Seja bem-vindo!

A propósito, preciso dizer à TC que este aqui:

Uma entrada muito estranha. Por que especificar o tamanho da matriz postal de uma forma tão estranha? A funçãoStringToCharArray estabelece o tamanho certo para a própria matriz dinâmica.ArrayResize parece ser supérfluo aqui.

Isto é exatamente o que eu entendo.

Referência MQL5 / Conversão de dados / StringToCharArray

O terminal 0 também será copiado para a matriz de destino, e o tamanho da matriz dinâmica pode ser aumentado conforme necessário para caber no tamanho da corda.

 
Nikolai Karetnikov:

isto é exatamente o que está claro.

Referência MQL5 / Conversão de dados / StringToCharArray

O terminal 0 também será copiado para a matriz receptora e o tamanho da matriz dinâmica pode ser aumentado para caber no tamanho da corda, se necessário.

Eu certamente não sou um pedante codificador, mas você está mudando o tamanho da matriz ao chamar repetidamente a função que realiza a conversão de string-to-char?)))

Você poderia fazer isso:

  int q = StringToCharArray(jsonbody,post,0,-1,CP_UTF8);
  ArrayResize(post, q - 1);

Caso contrário, estamos chamando a conversão da mesma seqüência duas vezes. Além disso, a segunda vez cancela a primeira.

 

Além disso, anote a palavra "ou" na documentação:

[em] Número de elementos de matriz a copiar. Define o comprimento da cadeia de resultados. O padrão é -1, o que significa copiar para o final da matriz, ou atender ao terminal 0. O terminal 0 também será copiado para a matriz de destino, e o tamanho da matriz dinâmica pode ser aumentado para corresponder ao tamanho da cadeia, se necessário. Se o tamanho da matriz dinâmica for maior do que o comprimento da corda, então o tamanho da matriz não será reduzido.

Não sabemos se este terminal nulo está lá ou não, mas reduzimos o tamanho do poste da matriz, então podemos perder o suporte de fechamento se nenhum terminal nulo estiver lá.

Vale a pena verificar a integridade do cordão convertido por inversão de marcha.

 
Eu consegui! disse "um, dois"))
 
#include <JAson.mqh>
void OnStart()
  {

   char    result[];
   char    post[];
   string  url="https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w";
   string  headers;
   string  result_headers;
   int     status;
   
   
   string jsonbody;
   headers = "Content-Type: application/json";


  jsonbody = "{\"input\":{\"text\":\"one, two\"},\"voice\":{\"languageCode\":\"en-gb\",\"name\":\"en-GB-Wavenet-B\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";  
  jsonbody = "{\"input\":{\"text\":\"раз, два, три, четыре, пять, вышел зайчик погулять\"},\"voice\":{\"languageCode\":\"ru-RU\",\"name\":\"ru-RU-Wavenet-B\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";

 
   
  int q = StringToCharArray(jsonbody,post,0,-1,CP_UTF8);
  ArrayResize(post, q - 1);
  status=WebRequest("POST",url,headers,100000,post,result,result_headers);

   
   if(status==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //---
      StringSetLength(url,StringFind(url,"/",8));
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(status==200)
        {
        CJAVal  CJasonResult;
        string lBase64String;
        char lBase64ResultArray[];
        char lBinaryDataArray[];
        char lkey[1];


        CJasonResult.Deserialize(result);
        lkey[0]=0;
        lBase64String = CJasonResult["audioContent"].ToStr();
        StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
        CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         PrintFormat("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
           
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,lBinaryDataArray,0,ArraySize(result));

            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\result.wav");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,status,result_headers);
     }
  }
 
Um, dois, três, quatro, cinco, o coelhinho foi dar uma volta! ))))
 
TC, você conseguiu. Este é o seu sucesso! Apenas um pequeno erro no código foi perdido. Eu consertei e funcionou! ))))
 
Agora, sugiro dominar o STT (speach to text) para criar um controle de voz para a EA. O esquema é o mesmo: conectar a algum serviço de nuvem (Google, por exemplo) e usar WebRequest para solicitar um fluxo de texto "ao vivo" do discurso convertido, que depois analisamos e enviamos para a funcionalidade. O resultado é muito inovador.
 
Реter Konow:
Um, dois, três, quatro, cinco, o coelhinho foi dar uma volta! ))))

Sim! Funciona!!! legal

só precisa mais desteJasop.mqh

JP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Файл успешно загружен, размер 264457 байт.
MQ      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Заголовки сервера: Content-Type: application/json; charset=UTF-8
DH      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: Origin
EN      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: X-Origin
OD      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: Referer
IO      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Content-Encoding: gzip
ID      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Date: Wed, 03 Jun 2020 02:05:48 GMT
MO      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Server: ESF
GE      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Cache-Control: private
EP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-XSS-Protection: 0
MD      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-Frame-Options: SAMEORIGIN
CR      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-Content-Type-Options: nosniff
PP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Alt-Svc: h3-27=":443"; ma=2592000,h3-25=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
QL      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Transfer-Encoding: chunked
LI      0       05:05:49.668    22WebRequest (GBPNZD,H2)
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
ForecastOscilator_HTF The ForecastOscilator indicator with the timeframe selection option available in the input parameters. Flat_HTF The Flat indicator with the timeframe selection option available in the input parameters. FX5_SelfAdjustingRSI_HTF The...
Arquivos anexados:
result.zip  126 kb