y de nuevo dll y el mercado - página 28

 
TheXpert:

el problema es el carácter nulo de terminación.

y si obtiene un error de webrequest, es muy posible que haya información adicional en el parámetro de resultado.

por ejemplo:

esto descarga el archivo - sólo que el formato debe ser incorrecto, no se reproduce.

Instantánea3

 
Alexsandr San:

Así es como carga el archivo - pero el formato debe ser incorrecto, por lo que no se reproduce.


Si se cargaba un archivo .wav adecuado, entonces se reproducía.

Se juega así.

Tiro4

 

de nuevo no entiendo.

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


Obtengo un flujo Json, tomo sólo la cadena necesaria, la pongo en un array y decodifico el array.

Esto es lo que no entiendo de la decodificación

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

qué tipo de array [en] Arreglo de llaves.

La Ayuda sólo dice que debe estar ahí y nada más. ¿Qué contiene y cuál es su significado?


 
Nikolai Karetnikov:

La referencia dice que tiene que estar ahí y ya está. ¿Qué contiene y para qué sirve?

Hazlo nulo o llénalo de ceros, no lo necesitas para base64

 
TheXpert:

hacerla de tamaño cero o nulo, no la necesita para base64

por lo que el código tiene un tamaño cero, pero añadí [1] y lo puse a cero


la matriz que contiene Base64 entra en CryptDecode y el binario resultante está vacío

 
TC no se rinde)))) ¡Eso es bueno! Respeto.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

Sin embargo, este método no es seguro y no mucha gente querrá utilizarlo.

De esta manera, puedes subir archivos y utilizar algún comando para ejecutar cosas como .....

un script - subir, crear una carpeta y copiar en esa carpeta.

Foto de

 

Bueno, como prometí, hablé con un agente de IBM. Este es nuestro sencillo y breve diálogo:

Ahora estás chateando con Lorenzo.

Hoy

Yo el 2 de junio, 15:31

Hola, tengo una pregunta sobre el servicio Text To Speech. El límite de su plan gratuito es de 10 000 000 de símbolos al mes, pero el plan gratuito de Google ofrece hasta 4 000 000 de símbolos. Entonces, ¿puede explicarme esta gran diferencia, o que estoy equivocado?

¡Hola!

Hay un grupo más adecuado que puede ayudarte. ¿Puedo transferirte a este grupo para que puedan responder a tu pregunta?

¡Bien!

Ahora mismo estoy contigo.

ok

¡Gracias por esperar!

Sí, en realidad no apoyo este producto. Por favor, póngase en contacto con mi colega a través del correo electrónico Juan.Jose.Montero1@ibm.com

Estará encantado de ayudarle o de programar una llamada.

¿Te parece bien?

Bueno, le escribiré, ¡muchas gracias!

Gracias a ti.

¿Hay algo más en lo que pueda ayudarle hoy?

Bueno, en realidad no. Que tenga un buen día.

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

El agente de ventas me desvió y la pregunta tenía que ver con las tarifas y los límites de su servicio. Me sugirió que escribiera una carta a alguien llamado José Juan.

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

La gota que colma el vaso, por así decirlo.

Gracias.

¡Choca esos 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);
     }
  }