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

 
nkaretnikov:

¿no es posible reproducir un archivo wav desde una caja de arena sin una DLL?

de ayuda

Por ejemplo, si el archivo de audio Demo.wav se encuentra en la carpeta terminal_data_directory\MQL5\Files, entonces la llamada PlaySound() debe ser escrita de esta manera:

//--- reproducir el archivo de sonido Demo.wav desde el directorio de datos de la terminal
PlaySound("\\Files\\Demo.wav");

El problema es que el propio motor de playsound es defectuoso. No combina los sonidos, sino que deja de reproducir el anterior en cuanto llega un nuevo comando.

Hay una exigencia en el mercado de que el producto debe funcionar fuera de la caja y no depender de módulos de terceros. pero es posible hacer un movimiento radical - para hacer una solución de caja en la muleta playsound y si usted tiene algún módulo, por ejemplo en kodobase, utilizar una solución normal a través del motor de viento.

 
nkaretnikov:

Veo que eres una persona con experiencia, ¿puedes ayudarme a escribir un ejemplo de referencia de enchufe?

La documentación está aquíhttps://cloud.ibm.com/docs/text-to-speech?topic=text-to-speech-usingWebSocket

Entiendo queinstance_id es GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB

Mientras leo el documento...

¿Qué es exactamente lo que falla en su consulta? Hay buenos ejemplos en la documentación.

Ahora no tengo tiempo, y es algo inútil.

En cuanto a tu enlace - si no puedes usar WebSocket - mejor no usar, te ahorrarás mucho tiempo (si no tienes experiencia con ello). Existen otras opciones además de WebSocket.

Документация по MQL5: Сетевые функции / SocketCreate
Документация по MQL5: Сетевые функции / SocketCreate
  • www.mql5.com
//|                                                SocketExample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Отправка команды на сервер                                       |...
 
Andrei Trukhanovich:

de ayuda

Por ejemplo, si el archivo de sonido Demo.wav se encuentra en la carpeta terminal_data_directory\MQL5\Files, la llamada PlaySound() debe escribirse de esta manera:

//--- reproducir el archivo de sonido Demo.wav desde el directorio de datos de la terminal
PlaySound("\\Files\\Demo.wav");

El problema es que el propio motor de playsound es defectuoso. No combina los sonidos, sino que deja de reproducir el anterior en cuanto llega un nuevo comando.

el mercado exige que el producto funcione out of the box y no dependa de módulos de terceros. pero es posible dar un paso radical y hacer una solución de caja sobre la muleta de playsound y si se tiene algún módulo, por ejemplo en kodobase, utilizar una solución normal a través del motor de viento. que entiendo puede hacer reconocimiento de texto también.

¡ese es mi punto exactamente! )

Sí, de dos maneras.

El primer modo es PlaySound y las pausas se basan en la velocidad de pronunciación. Pero me encontré con esto y en la etapa de llamar a las características nativas de Windows TTS, cuando la segunda frase entra en un flujo ocupado, obtenemos un error en tiempo de ejecución. Por lo tanto, hay un retraso en la clase basado en la velocidad de pronunciación de 100 caracteres por minuto. Básicamente salimos de esta situación.

Método 2 - Generar el archivo de prueba mediante código cerrado y reproducirlo mediante código abierto con las DLLs habilitadas

 
Serhii Shevchuk:

¿Por qué escribir algo innecesario en la carpeta? PlaySound puede reproducir a partir de recursos, véase "Uso de recursos" en el enlace

P.D. No lo he probado, pero como está escrito en la documentación, debe ser posible.

Pues bien, el ordenador quiere una solución universal en la que no tengamos que integrar los recursos de sonido en el Asesor Experto. Quiere diseñar un sistema de interacción entre el Asesor Experto y el servidor, en el que el primero crea un archivo de texto con las palabras que AHORA necesita decir el usuario, y el servidor las convierte en .wav y las devuelve al Asesor Experto. A continuación, el Asesor Experto, sin saberlo, escribe el archivo en lugar del archivo anterior (con la locución anterior del servidor) y llama a PlaySound para reproducir la nueva locución.

Este esquema no puede funcionar.
 
Реter Konow:
Pues bien, TC quiere una solución universal, en la que no sea necesario integrar los recursos sonoros en Expert Advisor de antemano. Quiere diseñar un sistema de interacción entre el Asesor Experto y el servidor, en el que el primero crea un archivo de texto con las palabras que AHORA debe decir el usuario, y el servidor las convierte en .wav y las envía de vuelta al Asesor Experto. A continuación, el Asesor Experto, sin saberlo, escribe el archivo en lugar del archivo anterior (con la locución anterior del servidor) y llama a PlaySound para reproducir la nueva locución.

Este esquema no puede funcionar.

Me refería a usar ResourceCreate

Crear un recurso a partir de los datos recibidos. Y luego reproducirlo con PlaySound. Pero no he encontrado exactamente esa conexión en los ejemplos (no estoy seguro de que funcione). Por eso he borrado el mensaje anterior.

Документация по MQL5: Общие функции / ResourceCreate
Документация по MQL5: Общие функции / ResourceCreate
  • www.mql5.com
[in]  Относительный путь к файлу, содержащему данные для ресурса. Если путь начинается с обратной косой черты "\" (пишется "\\"), то файл ищется относительно папки Если второй вариант функции вызывается для...
 
Serhii Shevchuk:

Me refería a usar ResourceCreate

Crear un recurso a partir de los datos recibidos. Y luego reproducirlo con PlaySound. Pero no he encontrado exactamente ese enlace en los ejemplos (no estoy seguro de que funcione). Así que he borrado el mensaje anterior.

Buena idea. Puedo intentarlo, aunque no estoy seguro)).
 
Serhii Shevchuk:

¿Qué es exactamente lo que no funciona en su consulta? Hay buenos ejemplos en la documentación .

Ahora mismo no tengo tiempo para averiguar el protocolo del hablador, y es inútil.

En cuanto a su enlace - si usted no puede utilizar WebSocket - mejor no utilizar, se ahorrará un montón de tiempo (si no hay experiencia con él). Existen otras opciones además de WebSocket.

esto es lo que falla https://www.mql5.com/ru/forum/342293/page12#comment_16633648

El archivo se crea, pero está vacío. Su nombre



es diferente del archivo que se descarga mediante el comando curl



Es una especie de insinuación de que el código que escribiste

//+------------------------------------------------------------------+
//|                                                   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 = headers + "-u apikey:GR1bb3zVMs9fcNKL6pA9-5zj9ptWliCu6eh9oupUnpZB";
   headers = headers + " --header \"Content-Type: application/json\"";
   headers = headers + " --header \"Accept: audio/wav\"";
   headers = headers + " --data \"{\"text\":\"hello world\"}\"";
   headers = headers + " --output hello_world.wav";
//output hello_world.wav ^

   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com";
//--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com"
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
//--- обнуляем код последней ошибки
   ResetLastError();
//--- загрузка html-страницы с Yahoo Finance
   int res = WebRequest("POST",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);
     }
  }
//+------------------------------------------------------------------+


no forma correctamente la sintaxis de WebRequest.

Es decir, no consigue que el WebRequest haga lo que hace curl

и снова dll и маркет
и снова dll и маркет
  • 2020.05.31
  • www.mql5.com
День добрый! Правило №1 dll на Маркете запрещен...
 
Nikolai Karetnikov:

esto es lo que no funciona https://www.mql5.com/ru/forum/342293/page12#comment_16633648

.....

Puedo mirarlo, pero no antes de mañana por la tarde. Si para entonces no lo has resuelto tú mismo.

 
Si el archivo de sonido se puede reproducir desde la carpeta Files, donde está pregrabado por el EA, la solución del problema será realista si el archivo de sonido resultante es coherente.
 
Nikolai Karetnikov:

esto es lo que no funciona https://www.mql5.com/ru/forum/342293/page12#comment_16633648

El archivo se crea, pero está vacío. Su nombre



es diferente del archivo descargado por el comando curl



Esto da a entender que el código que escribiste


no forma correctamente la sintaxis de WebRequest.

Es decir, no puedes hacer que WebRequest haga lo que hace curl

y no lo harás :-)

¿por qué se pasan las opciones del comando curl en las cabeceras HTTP?

bueno, al menos lee algunos libros, revisa algunos ejemplos... de lo contrario, todos te escribiremos un artículo