ve yine dll ve market - sayfa 31

 
Andrei Trukhanovich :

Önemli değil.

kodunuz (neredeyse) rusça için çalışıyor. farkındalık testi

dikkat uykuya daldı, görünüşe göre))

 
Реter Konow :

Rica ederim!

Bu arada, TC'ye şunu söylemeniz gerekiyor:

Çok garip bir giriş. Yazı dizisinin boyutunu neden bu kadar garip bir şekilde belirtin. StringToCharArray işlevinin kendisi, dinamik bir dizi için istenen boyutu ayarlar. ArrayResize burada gereksiz görünüyor.

işte bu, açık

MQL5 Referansı / Veri Dönüşümü / StringToCharArray

0 terminali de hedef diziye kopyalanırken dinamik dizinin boyutu, gerekirse dizenin boyutuna uyacak şekilde artırılabilir.

 
Nikolai Karetnikov :

işte bu, açık

MQL5 Referansı / Veri Dönüşümü / StringToCharArray

0 terminali de hedef diziye kopyalanırken dinamik dizinin boyutu, gerekirse dizenin boyutuna uyacak şekilde artırılabilir.

Tabii ki, kodlama konusunda bilgiç değilim, ancak dizeyi bir karaktere dönüştüren işlevi tekrar tekrar çağırarak dizinin boyutunu değiştiriyor musunuz?)))

Bu şekilde mümkündür:

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

Aksi takdirde, aynı dizenin dönüşümünü iki kez çağırırız. Ayrıca, ikinci kez birinciyi iptal eder.

 

Ayrıca, belgelerde "veya" kelimesine dikkat edin:

[içinde] Kopyalanacak dizi öğelerinin sayısı. Sonuç dizesinin uzunluğunu belirtir. Varsayılan -1'dir, bu, dizinin sonuna veya terminal 0 ile karşılaşılıncaya kadar kopyalama anlamına gelir.Terminal 0 , hedef diziye de kopyalanır, gerekirse dinamik dizinin boyutu sığdırmak için artırılabilir. dizenin boyutu. Dinamik dizinin boyutu, dizenin uzunluğundan büyükse, dizinin boyutu küçülmez.

Bu sıfır terminalinin var olup olmadığını bilmiyoruz, ancak post dizisinin boyutunu küçültüyoruz, bu nedenle, orada terminal sıfır yoksa sondaki braketi kaybedebiliriz.

Ters dönüşümle büyüye dönüştürülen dizenin bütünlüğünü kontrol etmeye değer.

 
başardım! "Bir, iki"))
 
#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);
     }
  }
 
Bir, iki, üç, dört, beş, tavşan yürüyüşe çıktı!))))
 
TS, sen yaptın. Bu senin başarın! Sadece kodda küçük bir hata gözden kaçmış. Düzelttim ve işe yaradı!
 
Şimdi, bir danışman için bir ses kontrolü oluşturmak için STT'de (speach to text) ustalaşmayı öneriyorum. Şema aynıdır - bir tür bulut hizmetine (örneğin aynı Google'a) bağlanırız ve WebRequest aracılığıyla dönüştürülmüş konuşmadan "canlı" bir metin akışı talep ederiz, ardından ayrıştırır ve işlevsele göndeririz. Çok yenilikçi olun.
 
Реter Konow :
Bir, iki, üç, dört, beş, tavşan yürüyüşe çıktı!))))

Evet ! İşler !!! serin

sadece bu JAson.mqh'ye ihtiyacınız var

JP       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Файл успешно загружен, размер 264457 байт.
MQ       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Заголовки сервера: Content-Type: application/json; charset=UTF- 8
DH       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Vary: Origin
EN       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Vary: X-Origin
OD       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Vary: Referer
IO       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Content-Encoding: gzip
ID       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Date: Wed, 03 Jun 2020 02 : 05 : 48 GMT
MO       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Server: ESF
GE       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        Cache-Control: private
EP       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        X-XSS-Protection: 0
MD       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        X-Frame-Options: SAMEORIGIN
CR       0        05 : 05 : 49.668      22 WebRequest (GBPNZD,H2)        X-Content-Type-Options: nosniff
PP       0        05 : 05 : 49.668      22 WebRequest (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      22 WebRequest (GBPNZD,H2)        Transfer-Encoding: chunked
LI       0        05 : 05 : 49.668      22 WebRequest (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...
Dosyalar:
result.zip  126 kb