und wieder dll und Markt - Seite 28

 
TheXpert:

das Problem ist das abschließende Nullzeichen.

und wenn Sie eine Fehlermeldung von webrequest erhalten, kann es durchaus sein, dass der Ergebnisparameter zusätzliche Informationen enthält.

zum Beispiel:

lädt die Datei herunter - nur das Format muss falsch sein, sie lässt sich nicht abspielen.

Schnappschuss3

 
Alexsandr San:

So wird die Datei geladen - aber das Format muss falsch sein, so dass sie nicht abgespielt werden kann.


Wenn eine richtige .wav-Datei geladen war, wurde sie abgespielt.

Das geht so.

Schuss4

 

Ich verstehe es wieder nicht.

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


Ich erhalte einen Json-Stream, nehme nur die benötigte Zeichenkette, packe sie in ein Array und dekodiere das Array.

Was ich an der Dekodierung nicht verstehe, ist Folgendes

CryptDecode(CRYPT_BASE64,lBase64ResultArray,lkey,lBinaryDataArray);

welche Art von Array [in] Schlüssel-Array.

Die Hilfe sagt nur, dass es dort sein sollte und das ist alles. Was enthält er und welche Bedeutung hat er?


 
Nikolai Karetnikov:

Die Referenz besagt, dass es dort sein muss, und das war's. Was enthält er und was ist der Sinn davon?

Machen Sie ihn zu Null oder füllen Sie ihn mit Nullen, Sie brauchen ihn nicht für base64

 
TheXpert:

machen Sie es Null-Größe oder Null-Größe, base64 braucht es nicht

Der Code hat also eine Größe von Null, aber ich habe [1] hinzugefügt und die Größe auf Null gesetzt


das Array mit Base64 wird in CryptDecode eingegeben und die resultierende Binärdatei ist leer

 
TC gibt nicht auf)))) Das ist gut! Respekt.
 
Nikolai Karetnikov:
StringToCharArray(lBase64String,lBase64ResultArray,0,StringLen(lBase64String));
 

Diese Methode ist jedoch nicht sicher, und nur wenige Menschen werden sie anwenden wollen.

Auf diese Weise können Sie Dateien hochladen und einen Befehl verwenden, um Dinge wie ..... auszuführen.

ein Skript - hochladen, einen Ordner erstellen und in diesen Ordner kopieren.

Foto von

 

Nun, wie versprochen, habe ich mit einem IBM-Mitarbeiter gesprochen. Hier ist unser einfacher und kurzer Dialog:

Sie befinden sich jetzt im Chat mit Lorenzo.

Heute

Ich am 2. Juni, 3:31 PM

Hallo, ich habe eine Frage zum Text To Speech-Dienst. Ihr kostenloser Tarif ist auf 10 000 000 Symbole pro Monat begrenzt, aber der kostenlose Google-Tarif bietet bis zu 4 000 000 Symbole. Können Sie mir also diesen großen Unterschied erklären, oder irre ich mich?

Hallo!

Es gibt eine geeignetere Gruppe, die Ihnen helfen kann. Darf ich Sie an diese Gruppe weiterleiten, damit sie Ihre Frage beantworten können?

Gut!

Ich bin gleich bei Ihnen.

ok

Danke fürs Durchhalten!

Ja, eigentlich unterstütze ich dieses Produkt nicht. Bitte kontaktieren Sie meinen Kollegen per E-Mail unter Juan.Jose.Montero1@ibm.com

Er wird Ihnen gerne weiterhelfen oder einen Termin vereinbaren!

Ist das für Sie in Ordnung?

Gut, ich werde ihm schreiben, vielen Dank!

Vielen Dank an Sie!

Kann ich Ihnen sonst noch mit irgendetwas helfen?

Nun, nicht wirklich. Einen schönen Tag noch!

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

Ich wurde von der Verkäuferin abgelenkt, und die Frage hatte mit den Tarifen und den Grenzen ihres Dienstes zu tun. Er schlug mir vor, einen Brief an jemanden namens Jose Juan zu schreiben.

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

Der letzte Strohhalm, sozusagen.

Ich danke Ihnen!

Das ist ein High Five! )

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#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);
     }
  }
Grund der Beschwerde: