그리고 다시 dll과 시장 - 페이지 12

 
nkaretnikov :

파일에 쓸 필요가 없습니다. 여기 WebRequest 메서드의 형식을 일치시키는 방법을 알아내야 합니다.

"다운로드"은(는) 무슨 뜻인가요? EA에서 재생하려면 텍스트 변환 후 얻은 사운드 파일을 사운드 폴더에 넣어야 합니다. Expert Advisor의 사운드는 WebRequest가 아닌 PlaySound 기능에 의해 생성되며 사운드 폴더에서 오디오 파일을 가져옵니다. 나는 그 과제가 거의 풀 수 없다고 말한다.
 
Реter Konow :
"다운로드"은(는) 무슨 뜻인가요? EA에서 재생하려면 텍스트 변환 후 얻은 사운드 파일을 사운드 폴더에 넣어야 합니다. Expert Advisor의 사운드는 WebRequest가 아닌 PlaySound 기능에 의해 생성되며 사운드 폴더에서 오디오 파일을 가져옵니다. 나는 그 과제가 거의 풀 수 없다고 말한다.

흠...

DLL 없이 샌드박스에서 wav 파일을 재생하는 것은 불가능합니까?

 
nkaretnikov :

흠...

DLL 없이 샌드박스에서 wav 파일을 재생하는 것은 불가능합니까?

그는 어떻게 샌드박스에 들어가게 될까요? 변환 후 결과 파일을 샌드박스에 배치해야 합니다. 웹 요청은 이 작업을 수행하지 않습니다. 사운드 폴더에서 자동 모드로 녹음하는 방법은 무엇입니까?
 
Реter Konow :
그는 어떻게 샌드박스에 들어가게 될까요?

WebRequest의 결과는 서버에서 다운로드한 WAV 파일이라고 가정합니다. 다음은 다음 코드의 결과입니다.

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



이 단계에서 문제는 hello_world.wav가 비어 있다는 것입니다. WebRequest 호출 형식이 분명히 잘못되었습니다.

 
Nikolai Karetnikov :

WebRequest의 결과는 서버에서 다운로드한 WAV 파일이라고 가정합니다. 다음은 다음 코드의 결과입니다.



이 단계에서 문제는 hello_world.wav가 비어 있다는 것입니다. WebRequest 호출 형식이 분명히 잘못되었습니다.

소켓이나 웹 요청을 통해 서버에서 유효한 사운드 파일을 수신하더라도 사운드 폴더에 쓸 수 없으므로 PlaySound 에서 재생할 수 없습니다.
 
Реter Konow :
소켓이나 웹 요청을 통해 서버에서 유효한 사운드 파일을 수신하더라도 사운드 폴더에 쓸 수 없으므로 PlaySound에서 재생할 수 없습니다.

PlaySound 가 DLL 없이 wav 파일을 재생하는 유일한 방법입니까?

 
Nikolai Karetnikov :

PlaySound가 DLL 없이 wav 파일을 재생하는 유일한 방법입니까?

네.
 
Реter Konow :
소켓을 통해 서버에서 또는 Expert Advisor에 대한 웹 요청을 통해 유효한 사운드 파일을 수신하더라도 사운드 폴더에 쓸 수 없습니다. 즉, PlaySound에서 재생할 수 없습니다.

주제에 대한 위 참조 - 모든 것이 가능하지만 사용자의 의지가 필요합니다.

 
Реter Konow :
네.

짜증)

 
Реter Konow :
네.

잠깐, 이건 어때

//--- terminal_data_directory\MQL5\Files\ 폴더에서 Demo.wav 사운드 파일 재생
    PlaySound ( "\\Files\\Demo.wav" );

https://www.mql5.com/ru/docs/runtime/resources

Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...