e novamente dll e mercado - página 28

 
TheXpert:

o problema é o caráter nulo terminante.

e se você receber um erro de solicitação na web, pode muito bem haver informações extras no parâmetro de resultado.

por exemplo:

isto baixa o arquivo - apenas o formato deve estar errado, não toca.

Instantâneo3

 
Alexsandr San:

É assim que ele carrega o arquivo - mas o formato deve estar errado, de modo que ele não vai tocar.


Se um arquivo .wav adequado fosse carregado, então ele jogaria.

Ele joga assim.

Tiro4

 

novamente não entendo.

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


Eu recebo um fluxo Json, pego apenas o fio necessário, coloco em uma matriz e decodifico a matriz.

Eis o que eu não entendo de decodificação

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

que tipo de matriz [em] matriz chave.

A Ajuda apenas diz que deve estar lá e é tudo. O que ela contém e qual é seu significado?


 
Nikolai Karetnikov:

A referência diz que tem que estar lá e é isso. O que ele contém e para que serve?

Torná-lo nulo ou enchê-lo com zeros, você não precisa dele para base64

 
TheXpert:

torná-lo de tamanho zero ou nulo, você não precisa dele para base64

portanto, o código tem um tamanho zero, mas eu acrescentei [1] e zerei-o


o conjunto contendo a Base64 entra no CryptDecode e o binário resultante está vazio

 
TC não desiste)))) Isso é bom! Respeito.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

No entanto, este método não é seguro e poucas pessoas vão querer usá-lo.

Desta forma, você pode carregar arquivos e usar algum comando para executar coisas como .....

um roteiro - carregar, criar uma pasta e copiar para essa pasta.

Foto por

 

Bem, como prometido, eu falei com um agente da IBM. Aqui está nosso diálogo simples e curto:

Agora você está conversando com Lorenzo.

Hoje

Eu em 2 de junho, 3:31 PM

Olá, eu tenho uma pergunta sobre o serviço de Texto para Discurso. O limite de seu plano gratuito é de 10 000 000 de símbolos por mês, mas o plano gratuito do Google oferece até 4 000 000 de símbolos. Então, você pode me explicar essa enorme diferença, ou que eu estou enganado?

Hi!

Há um grupo mais adequado que pode ajudá-lo. Posso transferi-lo para este grupo para que eles possam responder à sua pergunta?

Ok!

Vou já ter com vocês.

ok

Obrigado por aguardar!

Sim, na verdade eu não estou apoiando este produto. Favor entrar em contato com meu colega através do e-mail Juan.Jose.Montero1@ibm.com

Ele terá prazer em ajudá-lo ou agendar uma ligação!

Isso é bom para você?

Bem, eu vou escrever-lhe, muito obrigado!

Graças a você!

Há mais alguma coisa em que eu possa ajudá-lo hoje?

Bem, nem por isso. Tenha um bom dia !

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

Fui desviado pelo agente de vendas e a pergunta tinha a ver com as tarifas e limites de seu serviço. Sugeriu que eu escrevesse uma carta para alguém chamado José Juan.

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

A última gota, por assim dizer.

Obrigado!

Isso é um máximo de cinco! )

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