y de nuevo dll y el mercado - página 14

 
Ре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...
 
Que alguien intente ejecutar el .wav desde la carpeta Files. Me pregunto si funciona).
 
//+------------------------------------------------------------------+
//|                                                       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
:

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\
 
Alexsandr San:

Sí, funciona, he copiado toda la carpeta

Eso sí que es una esperanza)).
 
Реter Konow:
Eso sí que es esperanza)).

comprobado dos veces la canción y ejecutado de nuevo

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

comprobó la canción una vez más corriendo

https://yadi.sk/d/EGsTJGYBmDFnGg
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

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

por supuesto su propia melodía o sonido

 
Serhii Shevchuk:

Puedo echar un vistazo, pero no antes de mañana por la noche. Si para entonces no lo has resuelto tú mismo.

Maxim Kuznetsov:

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


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

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


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? ))

 
Nikolai Karetnikov:

¿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? ))

¿Qué significa el error 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.

Pero todavía tienes que hacerlo tú mismo.