Реter Konow: Se um arquivo de som puder ser reproduzido da pasta Arquivos, onde é pré-gravado pelo consultor especializado, então a solução do problema será real, se o arquivo de som resultante for integral.
Não! A documentação diz que os arquivos de som devem ser armazenados na pasta Sounds.
https://www.mql5.com/ru/docs/common/playsound
Esta é uma questão crítica para o tema. Se o arquivo não for reproduzido da pasta Arquivos, então o PlaySound está fora de questão. Então, não há necessidade de devolver nada do servidor. Por quê? A menos que o PlaySound de repente deixe de trabalhar com o recurso interno da EA, o que duvido muito...
Bem, então você nem sempre tem que acreditar na documentação))))
Agora, se o TC receber arquivos de áudio válidos do servidor, então regravados em um lugar e reproduzidos na hora, então a tarefa de solução universal para a locução de mensagens de texto para o usuário será resolvida.
ZS. O PlaySound também pode reproduzir o som dos recursos internos criados pela EA? Então, não há necessidade de escrever o arquivo em Arquivos. Salve imediatamente o arquivo no recurso e reproduza-o.
Реter Konow: Bem, você nem sempre precisa acreditar na documentação))))
Agora, se o TC receber arquivos de som válidos do servidor, então regrave-os em um lugar e reproduza-os na hora, então o problema da solução universal de voz-off de mensagens de texto para o usuário será resolvido.
ZS. Talvez o PlaySound possa tocar o som a partir de recursos internos criados pela EA?
Não sei, em meu Conselheiro Especialista - onde há alguma ação, ela joga
eu o uso para baixar um arquivo wav com a palavra TESTE nele
então remova as opções
//+------------------------------------------------------------------+//| 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);
}
}
//+------------------------------------------------------------------+
no cabeçalho agora é a opção de autorização -u, atrás da qual o servidor espera pela apikey. Parece fazer sentido, mas algo na sintaxe ainda está errado
O resultado da execução do código é"Webrequest4Voice (EURCHF,D1) Erro de carregamento '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 traduzir uma solicitação HTTP das opções de enrolar para parâmetros WebRequest, você tem que fazê-lo:
1. em geral, veja a wikipedia para ver como o HTTP está estruturado
2. Verifique na documentação Curl para ver o que significam as opções e por que elas são usadas
3. Leia a ajuda do WebRequest e veja exemplos, mesmo neste tópico muitas vezes
4. você deve escrever o código estando ciente do que fez :-) o que, por que e por que é usado.
Você está obviamente esperando que todos os 4 pontos sejam feitos por você. Eu entendo que é fim de semana, o tempo é curto e você tem muitas idéias. Tem que ser rápido.
Se um arquivo de som puder ser reproduzido da pasta Arquivos, onde é pré-gravado pelo consultor especializado, então a solução do problema será real, se o arquivo de som resultante for integral.
Alguém tente executar o .wav a partir da pasta Arquivos. Será que funciona)).
sim funciona eu copiei a pasta inteira
C:\Users\San\AppData\Roaming\MetaQuotes\Terminal\3 DE8A6E768D9369994F541727D733DE8\MQL5\Files\Sounds\sim funciona eu copiei a pasta inteira
Agora isso, isso é esperança)).
checou a canção e a executou novamente
https://yadi.sk/d/EGsTJGYBmDFnGgchecou a canção novamente e a iniciou
https://yadi.sk/d/EGsTJGYBmDFnGgBem, você nem sempre precisa acreditar na documentação))))
Não sei, em meu Conselheiro Especialista - onde há alguma ação, ela joga
é claro que sua própria melodia ou som
Eu posso dar uma olhada, mas não antes de amanhã à noite. Se você ainda não tiver resolvido sozinho até lá.
e você não vai :-)
por que você coloca as opções de comando de ondulação nos cabeçalhos HTTP?
Por que você ao menos não lê alguns livros, olha alguns exemplos... caso contrário, todos nós escreveremos um artigo para você
Então, onde posso obter um exemplo com a saída para um arquivo binário? ))
tentando descobrir, minimizei a sintaxe do próprio comando url
eu o uso para baixar um arquivo wav com a palavra TESTE nele
então remova as opções
no cabeçalho agora é a opção de autorização -u, atrás da qual o servidor espera pela apikey. Parece fazer sentido, mas algo na sintaxe ainda está errado
O resultado da execução do código é"Webrequest4Voice (EURCHF,D1) Erro de carregamento 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401".
Você pode me dar uma dica? ))
Então, onde podemos obter um exemplo com saída para um arquivo binário!? ))
tentando descobrir, minimizei a sintaxe do próprio comando url
baixe um arquivo wav com a palavra TESTE nele
então remova as opções
no cabeçalho agora a opção de autorização -u atrás da qual o servidor espera pela apikey. Parece fazer sentido, mas algo na sintaxe ainda está errado
resultado do código -"Webrequest4Voice (EURCHF,D1) Erro de carregamento 'https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST', código 401"
Você pode me dar uma dica? ))
Para traduzir uma solicitação HTTP das opções de enrolar para parâmetros WebRequest, você tem que fazê-lo:
1. em geral, veja a wikipedia para ver como o HTTP está estruturado
2. Verifique na documentação Curl para ver o que significam as opções e por que elas são usadas
3. Leia a ajuda do WebRequest e veja exemplos, mesmo neste tópico muitas vezes
4. você deve escrever o código estando ciente do que fez :-) o que, por que e por que é usado.
Você está obviamente esperando que todos os 4 pontos sejam feitos por você. Eu entendo que é fim de semana, o tempo é curto e você tem muitas idéias. Tem que ser rápido.
Mas você ainda tem que fazer isso você mesmo.