e di nuovo dll e mercato - pagina 28

 
TheXpert:

il problema è il carattere nullo finale.

e se si ottiene un errore da webrequest, ci possono benissimo essere informazioni extra nel parametro del risultato.

per esempio:

questo scarica il file - solo il formato deve essere sbagliato, non suona.

Istantanea3

 
Alexsandr San:

Questo è il modo in cui carica il file - ma il formato deve essere sbagliato, quindi non suonerà.


Se fosse stato caricato un file .wav corretto, avrebbe suonato.

Funziona così.

Colpo4

 

Ancora una volta non capisco.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <JAson.mqh>
void OnStart()
  {

   char    post[],result[];
   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";
//---

// original json file
//{"input":{"text":"M"},"voice":{"languageCode":"en-gb"},"audioConfig":{"audioEncoding":"LINEAR16"}}
////

  jsonbody = "{\"input\":{\"text\":\"M\"},\"voice\":{\"languageCode\":\"en-gb\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";
  StringToCharArray(jsonbody,post);
  ArrayResize(post, StringToCharArray(jsonbody,post) - 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[];


        CJasonResult.Deserialize(result);
        lBase64String = CJasonResult["audioContent"].ToStr();
        StringToCharArray(lBase64String,lBase64ResultArray,0,WHOLE_ARRAY,CP_ACP);
        
        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);
     }
  }


Ottengo un flusso Json, prendo solo la stringa necessaria, la metto in un array e decodifico l'array.

Ecco cosa non capisco della decodifica

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

che tipo di matrice [in] matrice chiave.

L'Aiuto dice solo che dovrebbe essere lì e basta. Cosa contiene e qual è il suo significato?


 
Nikolai Karetnikov:

Il riferimento dice che deve essere lì e basta. Cosa contiene e a cosa serve?

Rendilo nullo o riempilo di zeri, non ne hai bisogno per base64

 
TheXpert:

renderlo di dimensioni zero o nulle, base64 non ne ha bisogno

quindi, il codice ha una dimensione zero, ma ho aggiunto [1] e l'ho azzerato


l'array contenente Base64 entra in CryptDecode e il binario risultante è vuoto

 
TC non si arrende)))) Questo è buono! Rispetto.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

Tuttavia, questo metodo non è sicuro e non molte persone vorranno usarlo.

In questo modo, puoi caricare i file e usare qualche comando per eseguire cose come .....

uno script - caricare, creare una cartella e copiare in quella cartella.

Foto di

 

Bene, come promesso, ho parlato con un agente IBM. Ecco il nostro semplice e breve dialogo:

Ora stai chattando con Lorenzo.

Oggi

Io il 2 giugno, 3:31 PM

Ciao, ho una domanda sul servizio Text To Speech. Il limite del piano gratuito è di 10 000 000 simboli al mese, ma il piano gratuito di Google offre fino a 4 000 000 simboli. Allora, puoi spiegarmi questa enorme differenza o che mi sbaglio?

Ciao!

C'è un gruppo più adatto che può aiutarvi. Posso trasferirla a questo gruppo in modo che possano rispondere alla sua domanda?

Ok!

Sarò subito da voi.

ok

Grazie per aver tenuto!

Sì, in realtà non sto sostenendo questo prodotto. Si prega di contattare il mio collega via e-mail all'indirizzo Juan.Jose.Montero1@ibm.com

Sarà felice di aiutarvi o di fissare una chiamata!

Va bene per te?

Bene, gli scriverò, grazie mille!

Grazie a voi!

C'è qualcos'altro in cui posso aiutarla oggi?

Beh, non proprio. Buona giornata!

//------------------------------------------------------------

Sono stato sviato dall'agente di vendita e la domanda aveva a che fare con le tariffe e i limiti del loro servizio. Mi ha suggerito di scrivere una lettera a qualcuno chiamato José Juan.

Productivity - США - Справка по MetaTrader 5
Productivity - США - Справка по MetaTrader 5
  • www.metatrader5.com
Индекс производительности труда показывает изменение объема выпущенной продукции, приходящегося на одного работника. Этот показатель полезен для предсказания инфляции и прироста объема производства. Если стоимость труда увеличивается соответственно увеличению производительности, и, кроме того, маловероятно увеличение производственных издержек...
 
TheXpert:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String))

L'ultima goccia, per così dire.

Grazie!

Questo è un bel cinque! )

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <JAson.mqh>
void OnStart()
  {

   char    post[],result[];
   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";
//---

// original json file
//{"input":{"text":"M"},"voice":{"languageCode":"en-gb"},"audioConfig":{"audioEncoding":"LINEAR16"}}
////

  jsonbody = "{\"input\":{\"text\":\"MetaTrader 5 is a free application for traders allowing to perform technical analysis and trading operations in the Forex and exchange markets.\"},\"voice\":{\"languageCode\":\"en-gb\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";
  StringToCharArray(jsonbody,post);
  ArrayResize(post, StringToCharArray(jsonbody,post) - 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);
     }
  }
Motivazione: