そしてまた、DellとMarket - ページ 31

 
Andrei Trukhanovich:

私が言いたいのは、そんなことはどうでもいいということです。

あなたのコードはロシア語にほぼ対応しています)

注意力が眠ってしまったようです ))

 
Реter Konow:

どういたしまして。

ところで、TCに言っておかなければならないことがある。

とても不思議なエントリーです。なぜ、こんな変な方法でpost配列のサイズを指定するのでしょう。StringToCharArray 関数は、動的配列自体に正しいサイズを設定 します。ArrayResizeはここでは不要なよう です。

これは、まさに私が理解していることです。

MQL5リファレンス / データ変換 / StringToCharArray

端末0もターゲット配列にコピーされ、文字列のサイズに合わせてダイナミック配列の サイズを適宜大きくすることができる。

 
Nikolai Karetnikov:

というのは、まさにクリアです。

MQL5リファレンス / データ変換 / StringToCharArray

端末0も受信者配列にコピーされ、必要に応じて動的配列の サイズを文字列のサイズに合わせて大きくすることができる。

確かに私はコーディングの女衒ではありませんが、文字列から文字への変換を行う関数を繰り返し呼び出すことで配列のサイズを変えているのでしょうか)))

それができるんですね。

  int q = StringToCharArray(jsonbody,post,0,-1,CP_UTF8);
  ArrayResize(post, q - 1);

そうでなければ、同じ文字列の変換を2回呼び出すことになる。しかも、2回目は1回目をキャンセルする。

 

また、ドキュメントにある「または」という言葉にも注目してください。

[in] コピーする配列の要素数.結果文字列の長さを定義する。 デフォルトは -1 で,これは配列の最後までコピーする,つまり 端末 0 を満たすことを意味します.端末 0 もコピー先の配列にコピーされ,必要なら動的配列の サイズを文字列サイズに合わせて大きくすることができます.動的配列のサイズが文字列の長さより大きい場合、配列のサイズは縮小されない。

この末尾のNULLがあるかどうかはわからないが、配列のポストのサイズを小さくするので、末尾のNULLがない場合は閉じ括弧がなくなる可能性がある。

逆変換によって文字変換された文字列の完全性を確認することは価値がある。

 
やったー!!!(笑Said "one, two"))
 
#include <JAson.mqh>
void OnStart()
  {

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


  jsonbody = "{\"input\":{\"text\":\"one, two\"},\"voice\":{\"languageCode\":\"en-gb\",\"name\":\"en-GB-Wavenet-B\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";  
  jsonbody = "{\"input\":{\"text\":\"раз, два, три, четыре, пять, вышел зайчик погулять\"},\"voice\":{\"languageCode\":\"ru-RU\",\"name\":\"ru-RU-Wavenet-B\"},\"audioConfig\":{\"audioEncoding\":\"LINEAR16\"}}";

 
   
  int q = StringToCharArray(jsonbody,post,0,-1,CP_UTF8);
  ArrayResize(post, q - 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,result_headers);
     }
  }
 
1、2、3、4、5、ウサギは散歩に行った! ))))
 
TC、やりましたね。これがあなたの成功ですコードの小さなミスだけが見逃された。直したらうまくいきました! ))))
 
あとは、STT(speach to text)をマスターして、EAの音声制御を実現するといいと思います。仕組みは同じで、クラウドサービス(Googleなど)に接続し、WebRequestを使って 変換された音声から「ライブ」テキストストリームを要求し、それを解析して機能に送信します。非常に斬新な仕上がりになっています。
 
Реter Konow:
1、2、3、4、5、ウサギは散歩に行った! ))))

はい!うまくいきました!!かっこいい

これだけでいいJasop.mqh

JP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Файл успешно загружен, размер 264457 байт.
MQ      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Заголовки сервера: Content-Type: application/json; charset=UTF-8
DH      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: Origin
EN      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: X-Origin
OD      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Vary: Referer
IO      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Content-Encoding: gzip
ID      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Date: Wed, 03 Jun 2020 02:05:48 GMT
MO      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Server: ESF
GE      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Cache-Control: private
EP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-XSS-Protection: 0
MD      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-Frame-Options: SAMEORIGIN
CR      0       05:05:49.668    22WebRequest (GBPNZD,H2)        X-Content-Type-Options: nosniff
PP      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Alt-Svc: h3-27=":443"; ma=2592000,h3-25=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
QL      0       05:05:49.668    22WebRequest (GBPNZD,H2)        Transfer-Encoding: chunked
LI      0       05:05:49.668    22WebRequest (GBPNZD,H2)
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
ForecastOscilator_HTF The ForecastOscilator indicator with the timeframe selection option available in the input parameters. Flat_HTF The Flat indicator with the timeframe selection option available in the input parameters. FX5_SelfAdjustingRSI_HTF The...
ファイル:
result.zip  126 kb