et encore dll et marché - page 14

 
Реter Konow:
Si un fichier sonore peut être lu à partir du dossier Fichiers, où il est pré-enregistré par le Conseiller Expert, alors la solution du problème sera réelle, si le fichier sonore résultant est intégral.
Non ! La documentation indique que les fichiers sonores doivent être stockés dans le dossier Sounds.
https://www.mql5.com/ru/docs/common/playsound

Il s'agit d'une question essentielle pour le sujet. Si le fichier ne peut pas être lu à partir du dossier Files, PlaySound est hors de question. Il n'est donc pas nécessaire de renvoyer quoi que ce soit du serveur. Pourquoi ? A moins que PlaySound n'échoue soudainement à fonctionner avec la ressource interne de l'EA, ce dont je doute fortement...
 
Quelqu'un a essayé de lancer le .wav depuis le dossier Files. Je me demande si ça marche.))
 
//+------------------------------------------------------------------+
//|                                                       Sounds.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   PlaySound("\\Files\\Sounds\\alert.wav");
   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\request.wav");
   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\email.wav");
  }
//+------------------------------------------------------------------+
Реter Konow
:

Quelqu'un a essayé de lancer le .wav depuis le dossier Files. Je me demande si ça marche.))

oui, ça marche, j'ai copié le dossier entier

C:\Users\San\AppData\Roaming\MetaQuotes\Terminal\3 DE8A6E768D9369994F541727D733DE8\MQL5\Files\Sounds\
 
Alexsandr San:

oui, ça marche, j'ai copié le dossier entier

Maintenant, c'est l'espoir.))
 
Реter Konow:
Ça, c'est de l'espoir.))

j'ai revérifié la chanson et je l'ai relancée.

   Sleep(1*1000);
   PlaySound("\\Files\\Sounds\\Kazka.wav");
https://yadi.sk/d/EGsTJGYBmDFnGg
 
Alexsandr San:

La chanson a été vérifiée une nouvelle fois.

https://yadi.sk/d/EGsTJGYBmDFnGg
Alors, il ne faut pas toujours croire la documentation))))

Maintenant, si le CT reçoit des fichiers audio valides du serveur, puis les réenregistre à un endroit et les joue à la volée, alors la tâche de la solution universelle pour la voix off des messages texte à l'utilisateur sera résolue.

ZS. PlaySound peut-il également lire le son des ressources internes créées par EA ? Il n'est alors pas nécessaire d'écrire le fichier dans Files. Enregistrez immédiatement le fichier sur la ressource et jouez-le.
 
Реter Konow:
Eh bien, vous ne devez pas toujours croire la documentation))))

Maintenant, si le TC peut recevoir des fichiers sonores valides du serveur, puis les réenregistrer en un seul endroit et les lire à la volée, alors la tâche d'une solution universelle pour la vocalisation des messages texte à l'utilisateur sera résolue.

ZS. Peut-être que PlaySound peut jouer le son à partir de ressources internes créées par EA ?

Je ne sais pas, dans mon conseiller expert, quand il y a de l'action, il joue

                     ObjectsDeleteAll(0,InpObjDownNameG);
                     IndicatorDelete();
                     PlaySound("ok.wav");
                     if(InpChartInd && Obj_SELLChartInd())
                        return;

bien sûr sa propre mélodie ou son propre son

 
Serhii Shevchuk:

Je peux y jeter un œil, mais pas avant demain soir. Si vous ne l'avez pas encore compris vous-même.

Maxim Kuznetsov:

et vous ne le ferez pas :-)

pourquoi mettre les options de la commande curl dans les en-têtes HTTP ?

Pourquoi ne pas au moins lire quelques livres, regarder quelques exemples... sinon, nous allons tous vous écrire un article...

Où puis-je trouver un exemple de sortie vers un fichier binaire ? ))

En essayant de comprendre, j'ai minimisé la syntaxe de la commande url elle-même.


curl -X GET -u ^
apikey:GR1bb3zVMs9fcNKL6pA9-5 zj9ptWliCu6eh9oupUnpZB ^
--output hello_world.wav ^
https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST

je l'utilise pour télécharger un fichier wav avec le mot TEST dedans

puis supprimer les options

//+------------------------------------------------------------------+
//|                                                   WebRequest.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   char cost_char_data[];
   string  result_headers;
   
   headers = "-u apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB --output hello_world.wav";
   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST";
   ResetLastError();
   int res = WebRequest("GET",url,headers,1000,cost_char_data,result,result_headers);
   if(res==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         //PrintFormat("Заголовки сервера: %s",headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("output hello_world.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+


dans l'en-tête se trouve maintenant l'option d'autorisation -u, derrière laquelle le serveur attend l'apikey. Cela semble avoir du sens, mais quelque chose dans la syntaxe est toujours erroné.

Le résultat de l'exécution du code est"Webrequest4Voice (EURCHF,D1) Error loading 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', code 401".

Pouvez-vous me donner un indice ? ))

 
Nikolai Karetnikov:

alors où peut-on obtenir un exemple avec une sortie vers un fichier binaire ? ))

En essayant de comprendre, j'ai minimisé la syntaxe de la commande url elle-même.


télécharger un fichier wav contenant le mot TEST

puis supprimer les options


dans l'en-tête maintenant l'option d'autorisation -u derrière laquelle le serveur attend l'apikey. Cela semble avoir du sens, mais quelque chose dans la syntaxe est toujours erroné.

code result -"Webrequest4Voice (EURCHF,D1) Erreur de chargement de 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', code 401".

Des conseils ? ))

Que signifie l'erreur 401 ?
 

Pour traduire une requête HTTP des options curl en paramètres WebRequest, vous devez :

1. en général, regardez sur wikipedia pour voir comment HTTP est structuré

2. vérifiez dans la documentation Curl ce que signifient les options et pourquoi elles sont utilisées.

3. lire l'aide de WebRequest et voir des exemples, même dans ce fil de discussion beaucoup

4. vous devez écrire du code en étant conscient de ce que vous avez fait :-) quoi, pourquoi et pourquoi il est utilisé.

Vous attendez manifestement que les 4 points soient faits pour vous. Je comprends que c'est le week-end, que le temps est compté et que vous avez beaucoup d'idées. Il faut que ce soit rapide.

Mais vous devez quand même le faire vous-même.