Реter Konow: Si un archivo de sonido puede ser reproducido desde la carpeta Files, donde está pregrabado por el Asesor Experto, entonces la solución del problema será real, si el archivo de sonido resultante será integral.
No! La documentación dice que los archivos de sonido deben ser almacenados en la carpeta Sounds.
https://www.mql5.com/ru/docs/common/playsound
Esta es una cuestión crítica para el tema. Si el archivo no se reproduce desde la carpeta Files, entonces PlaySound está descartado. Entonces no es necesario devolver nada del servidor. ¿Por qué? A no ser que de repente PlaySound no funcione con el recurso interno de EA, cosa que dudo mucho...
Bueno, entonces no hay que creer siempre en la documentación)))
Ahora, si el TC recibirá archivos de audio válidos desde el servidor, para luego volver a grabarlos en un lugar y reproducirlos sobre la marcha, entonces se resolverá la tarea de la solución universal para la locución de los mensajes de texto al usuario.
ZS. ¿Puede PlaySound reproducir también el sonido de los recursos internos creados por EA? Entonces no es necesario escribir el archivo en Archivos. Guarda inmediatamente el archivo en el recurso y reprodúcelo.
Реter Konow: Bueno, no siempre hay que creer en la documentación)))
Ahora bien, si el TC recibe archivos de sonido válidos del servidor, los vuelve a grabar en un lugar y los reproduce sobre la marcha, entonces la tarea de una solución universal para vocalizar los mensajes de texto al usuario estará resuelta.
ZS. ¿Tal vez PlaySound pueda reproducir el sonido de los recursos internos creados por EA?
No sé, en mi Asesor Experto - donde hay alguna acción, juega
lo uso para descargar un archivo wav con la palabra TEST
luego eliminar las opciones
//+------------------------------------------------------------------+//| 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);
}
}
//+------------------------------------------------------------------+
en la cabecera ahora está la opción de autorización -u, detrás de la cual el servidor espera el apikey. Parece tener sentido, pero algo en la sintaxis sigue estando mal
El resultado de la ejecución del código es"Webrequest4Voice (EURCHF,D1) Error al cargar 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401".
¿dónde podemos conseguir un ejemplo con salida a un archivo binario? ))
tratando de entenderlo, he minimizado la sintaxis del propio comando url
descargar un archivo wav con la palabra TEST
luego eliminar las opciones
en la cabecera ahora la opción de autorización -u detrás de la cual el servidor espera el apikey. Parece tener sentido, pero algo en la sintaxis sigue estando mal
resultado del código -"Webrequest4Voice (EURCHF,D1) Error al cargar 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401"
Para traducir una petición HTTP de las opciones de curl a los parámetros de WebRequest, hay que:
1. en general, mira la wikipedia para ver cómo está estructurado el HTTP
2. consulte la documentación de Curl para ver qué significan las opciones y por qué se utilizan
3. leer la ayuda de WebRequest y ver ejemplos, incluso en este hilo mucho
4. Debes escribir el código siendo consciente de lo que has hecho :-) qué, por qué y para qué se utiliza.
Evidentemente, esperas que los 4 puntos se hagan por ti. Entiendo que es fin de semana, que el tiempo es escaso y que tienes muchas ideas. Tiene que ser rápido.
Si un archivo de sonido puede ser reproducido desde la carpeta Files, donde está pregrabado por el Asesor Experto, entonces la solución del problema será real, si el archivo de sonido resultante será integral.
Que alguien intente ejecutar el .wav desde la carpeta Files. Me pregunto si funciona).
Sí, funciona, he copiado toda la carpeta
C:\Users\San\AppData\Roaming\MetaQuotes\Terminal\3 DE8A6E768D9369994F541727D733DE8\MQL5\Files\Sounds\Sí, funciona, he copiado toda la carpeta
Eso sí que es esperanza)).
comprobado dos veces la canción y ejecutado de nuevo
https://yadi.sk/d/EGsTJGYBmDFnGgcomprobó la canción una vez más corriendo
https://yadi.sk/d/EGsTJGYBmDFnGgBueno, no siempre hay que creer en la documentación)))
No sé, en mi Asesor Experto - donde hay alguna acción, juega
por supuesto su propia melodía o sonido
Puedo echar un vistazo, pero no antes de mañana por la noche. Si para entonces no lo has resuelto tú mismo.
y no lo harás :-)
¿por qué se ponen las opciones del comando curl en las cabeceras HTTP?
Por qué no lees al menos algunos libros, revisas algunos ejemplos... si no, te escribiremos todos un artículo
¿dónde puedo conseguir un ejemplo con salida a un archivo binario? ))
tratando de entenderlo, he minimizado la sintaxis del propio comando url
lo uso para descargar un archivo wav con la palabra TEST
luego eliminar las opciones
en la cabecera ahora está la opción de autorización -u, detrás de la cual el servidor espera el apikey. Parece tener sentido, pero algo en la sintaxis sigue estando mal
El resultado de la ejecución del código es"Webrequest4Voice (EURCHF,D1) Error al cargar 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401".
¿Puedes darme una pista? ))
¿dónde podemos conseguir un ejemplo con salida a un archivo binario? ))
tratando de entenderlo, he minimizado la sintaxis del propio comando url
descargar un archivo wav con la palabra TEST
luego eliminar las opciones
en la cabecera ahora la opción de autorización -u detrás de la cual el servidor espera el apikey. Parece tener sentido, pero algo en la sintaxis sigue estando mal
resultado del código -"Webrequest4Voice (EURCHF,D1) Error al cargar 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401"
¿Puedes darme una pista? ))
Para traducir una petición HTTP de las opciones de curl a los parámetros de WebRequest, hay que:
1. en general, mira la wikipedia para ver cómo está estructurado el HTTP
2. consulte la documentación de Curl para ver qué significan las opciones y por qué se utilizan
3. leer la ayuda de WebRequest y ver ejemplos, incluso en este hilo mucho
4. Debes escribir el código siendo consciente de lo que has hecho :-) qué, por qué y para qué se utiliza.
Evidentemente, esperas que los 4 puntos se hagan por ti. Entiendo que es fin de semana, que el tiempo es escaso y que tienes muchas ideas. Tiene que ser rápido.
Pero todavía tienes que hacerlo tú mismo.