und wieder dll und Markt - Seite 27

 
Alexsandr San:

hier ist der erste Durchlauf - lud eine Textdatei mit russischem Text, einige Kritzeleien - aber es hat, speichern Sie die Datei als .wav


kopiert und eingefügt - im Archiv ist eine.wav-Datei im Format.wav gespeichert.

Schnappschuss2

Dateien:
 
Nikolai Karetnikov:

Nun, die Sache mit Google ist folgende

Sie geben den Stream in Base64 an. Ich konnte sie in mp3 umwandeln, aber nicht mit LINEAR16.

LINEAR16 sollte in wav umgewandelt werden

Der als LINEAR16 zurückgegebene Audioinhalt enthält auch einen WAV-Header.
Method: text.synthesize  |  Cloud Text-to-Speech  |  Google Cloud
Method: text.synthesize  |  Cloud Text-to-Speech  |  Google Cloud
  • cloud.google.com
Synthesizes speech synchronously: receive results after all text input has been processed. Request body The request body contains data with the following structure: Fields Response body If successful, the response body contains data with the following structure: The message returned to the client by the method. Fields The audio data bytes...
 

Frage an die Experten

Bezugnahme auf einen Google-Dienst im Code

Bei Google

1. nur eine Kopfzeile

2. der Schlüssel wird über eine Url übergeben

3. wir steuern den Motor über eine json-Datei.

In curl sieht das folgendermaßen aus

curl -X POST -H "Content-Type: application/json" -d @request.json https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w

request.json

{"input":{"text":"M"},"voice":{"languageCode":"en-gb"},"audioConfig":{"audioEncoding":"LINEAR16"}}

curl erhält die richtige Antwort



Implementieren Sie dies nun mit WebRequest


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  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)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         PrintFormat("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\test.mp3");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,status);
     }
  }

Aber die Antwort kommt zurück

2020.06.02 11:52:15.887 GoogleVoice (EURUSD,H1) Ошибка загрузки 'https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w', код 400

als ob der Server das Array, das ihm in der json-Variable short gesendet wird, nicht versteht

Entweder bilde ich das Feld falsch oder etwas anderes?

 
TheXpert:

LINEAR16 muss winkbar sein

müssen! ) Und das ist es auch.

Der Grund dafür ist.

Wenn Sie zusätzliche Zeichen entfernen und die bereinigte Zeichenfolge in Base64 "einspeisen", erhalten Sie eine PlaySound-lesbare wav-Datei

 
Nikolai Karetnikov:

müssen! ) Und zitiert.

Der Grund dafür ist.

Wenn Sie zusätzliche Zeichen entfernen und die bereinigte Zeichenfolge in Base64 "einspeisen", erhalten Sie eine PlaySound-Wav-Datei

es ist ein json :-) auf eine nette Art und Weise, sollten Sie den Wert von audioContent Schlüssel erhalten

 
Nikolai Karetnikov:


Möglicherweise können Sie ihn nicht lesen, also

         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\test.mp3");
Sie erhalten verschiedene Dateien
 
Alexsandr San:

Möglicherweise können Sie es nicht lesen, deshalb

Dateien erhalten unterschiedliche

DieProgrammausführung wird in der WebRequest-Phase unterbrochen, die Dateien )))) werden nicht erreicht.

 
Maxim Kuznetsov:

es ist ein json :-) auf eine nette Art und Weise, müssen Sie den Wert von audioContent erhalten

Oh, richtig! Danke!!! )))

 
Nikolai Karetnikov:

Aber die Antwort kommt zurück

als ob der Server die json array short nicht versteht

Entweder bilde ich das Feld selbst falsch oder etwas anderes?

Das Problem ist das nachgestellte Nullzeichen.

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\"}}";
  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)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         PrintFormat("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("result.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            PlaySound("\\Files\\test.mp3");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
      {
         PrintFormat("Ошибка загрузки '%s', код %d",url,status);
         Print("result: ", CharArrayToString(result));
      }
     }
  }

und wenn Sie einen Fehler von webrequest erhalten, gibt es sehr wahrscheinlich zusätzliche Informationen im Ergebnisparameter.

Zum Beispiel:

2020.06.02 12:29:27.935 google_speech (USDRUB,M30)      Ошибка загрузки 'https://texttospeech.googleapis.com/v1/text:synthesize?key=AIzaSyCaLxPh84wXpLkT-zOE04MlvHj3JhLXU0w', код 400
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)      result: {
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)        "error": {
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)          "code": 400,
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)          "message": "Invalid JSON payload received. Parsing terminated before end of input.\ncoding\":\"LINEAR16\"}}\u0000\n                    ^",
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)          "status": "INVALID_ARGUMENT"
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)        }
2020.06.02 12:29:27.935 google_speech (USDRUB,M30)      }
 
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:

Ich danke Ihnen! )