并再次进行dll和营销 - 页 28

 
TheXpert:

问题是结尾的空字符。

如果你从webrequest 得到一个错误,结果参数中很可能有额外的信息。

例如:

这就下载了文件--只是格式肯定不对,不能播放。

快照3

 
Alexsandr San:

这就是它加载文件的方式--但格式肯定不对,所以无法播放。


如果加载一个适当的.wav文件,那么它就会播放。

它是这样玩的。

射击4

 

我又不明白了。

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


我得到一个Json流,只取需要的字符串,把它放入一个数组,然后对数组进行解码。

以下是我对解码不理解的地方

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

什么类型的数组[in] 关键数组。

帮助》只是说它应该在那里,仅此而已。它包含什么内容,其意义是什么?


 
Nikolai Karetnikov:

参考资料说它必须在那里,就是这样。它包含什么内容,它的意义是什么?

使其为空,或者用零来填充,对于base64来说,你不需要它。

 
TheXpert:

使其成为零尺寸或空尺寸,base64不需要它。

所以,代码的大小为零,但我添加了[1]并将其归零


含有Base64的数组进入CryptDecode,得到的二进制文件是空的

 
TC不放弃))))这很好!尊重。
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String))。
 

然而,这种方法并不安全,没有多少人会愿意使用它。

这样,你可以上传文件,并使用一些命令来运行,如.....

一个脚本 - 上传,创建一个文件夹并复制到该文件夹。

图片来源

 

好吧,如约而至,我和一个IBM的代理人谈了话。下面是我们简单而简短的对话。

你现在正在和洛伦佐聊天。

今天

我于6月2日下午3:31

你好,我有一个关于文字转语音服务的问题。你的免费计划限制是每月10 000 000个符号,但谷歌免费计划提供多达4 000 000个符号。那么,你能向我解释一下这个巨大的差异,或者说我搞错了吗?

你好!

有一个更合适的团体可以帮助你。我可以把你转到这个小组,以便他们能够回答你的问题吗?

好的!

我就在你身边。

ok

谢谢你的支持!

是的,实际上我并不支持这个产品。请通过电子邮件与我的同事联系,Juan.Jose.Montero1@ibm.com。

他将很乐意帮助你,或安排一个电话!

这对你来说可以吗?

好吧,我会给他写信的,非常感谢!

感谢你!

今天还有什么我可以帮助你的吗?

嗯,不是真的。祝你有个愉快的一天!

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

我被销售人员牵着鼻子走,问题与他们的服务费率和限制有关。建议我给一个叫何塞-胡安的人写一封信。

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

可以说是最后一根稻草。

谢谢你!

那是一个击掌!)

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