et encore dll et marché - page 28

 
TheXpert:

le problème est le caractère nul à la fin.

et si vous obtenez une erreur de webrequest, il peut très bien y avoir des informations supplémentaires dans le paramètre de résultat.

par exemple :

cela télécharge le fichier - seulement le format doit être mauvais, il n'est pas lu.

Instantané3

 
Alexsandr San:

C'est ainsi qu'il charge le fichier - mais le format doit être incorrect, donc il ne sera pas lu.


Si un fichier .wav correct était chargé, il serait lu.

Ça se joue comme ça.

Shot4

 

Encore une fois, je ne comprends pas.

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


Je reçois un flux Json, je prends seulement la chaîne nécessaire, je la mets dans un tableau et je décode le tableau.

Voilà ce que je ne comprends pas dans le décodage.

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

quel type de tableau [dans] Tableau de clés.

L'aide dit juste qu'elle devrait être là et c'est tout. Que contient-il et quelle est sa signification ?


 
Nikolai Karetnikov:

La référence dit qu'il doit être là et c'est tout. Que contient-il et quel est son intérêt ?

Rendez-le nul ou remplissez-le de zéros, vous n'en avez pas besoin pour la base64.

 
TheXpert:

rendez-le de taille zéro ou nulle, la base64 n'en a pas besoin.

donc, le code a une taille nulle, mais j'ai ajouté [1] et l'ai remis à zéro.


le tableau contenant Base64 entre dans CryptDecode et le binaire résultant est vide

 
TC n'abandonne pas)))) C'est bien ! Respect.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String)) ;
 

Cependant, cette méthode n'est pas sûre et peu de gens voudront l'utiliser.

De cette façon, vous pouvez télécharger des fichiers et utiliser une commande pour exécuter des choses comme ......

un seul script - télécharger, créer un dossier et copier dans ce dossier.

Photo par

 

Eh bien, comme promis, j'ai parlé à un agent IBM. Voici notre dialogue simple et court :

Vous êtes maintenant en train de chatter avec Lorenzo.

Aujourd'hui

Me on Jun 2, 3:31 PM

Bonjour, j'ai une question sur le service Text To Speech. La limite de votre plan gratuit est de 10 000 000 de symboles par mois, mais le plan gratuit de Google offre jusqu'à 4 000 000 de symboles. Alors, pouvez-vous m'expliquer cette énorme différence, ou que je me trompe ?

Salut !

Il existe un groupe plus approprié qui peut vous aider. Puis-je vous transférer vers ce groupe afin qu'ils puissent répondre à votre question ?

Ok !

Je suis à vos côtés.

ok

Merci de patienter !

Oui, en fait, je ne soutiens pas ce produit. Veuillez contacter mon collègue par courriel à l'adresse Juan.Jose.Montero1@ibm.com.

Il se fera un plaisir de vous aider ou de planifier un appel !

C'est bon pour vous ?

Eh bien, je vais lui écrire, merci beaucoup !

Grâce à vous !

Je peux vous aider pour autre chose aujourd'hui ?

Eh bien, pas vraiment. Bonne journée à tous !

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

J'ai été dérouté par l'agent commercial et la question portait sur les tarifs et les limites de leur service. J'ai suggéré d'écrire une lettre à un certain Jose Juan.

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

La dernière goutte, pour ainsi dire.

Merci !

C'est un high five ! )

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