Ре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...
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
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 |//+------------------------------------------------------------------+voidOnStart()
{
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);
}
elsePrint("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
elsePrintFormat("Ошибка загрузки '%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".
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".
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.
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.
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\oui, ça marche, j'ai copié le dossier entier
Ça, c'est de l'espoir.))
j'ai revérifié la chanson et je l'ai relancée.
https://yadi.sk/d/EGsTJGYBmDFnGgLa chanson a été vérifiée une nouvelle fois.
https://yadi.sk/d/EGsTJGYBmDFnGgEh bien, vous ne devez pas toujours croire la documentation))))
Je ne sais pas, dans mon conseiller expert, quand il y a de l'action, il joue
bien sûr sa propre mélodie ou son propre son
Je peux y jeter un œil, mais pas avant demain soir. Si vous ne l'avez pas encore compris vous-même.
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.
je l'utilise pour télécharger un fichier wav avec le mot TEST dedans
puis supprimer les options
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 ? ))
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 ? ))
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.