Skype рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдЯреЛ рдЕрдиреБрд╡рд╛рджрдХ

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдорд┐рддреНрд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд░реВрд╕реА рд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╡рд╛рдХреНрдп рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдФрд░ рдореЗрд░реЗ рдорд┐рддреНрд░ рдХреЛ Google рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдиреБрд╡рд╛рджрдХ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред Google рд╕реЗ рдФрд░ Skype рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдмреЙрдЯ рдХреЛ рднреА рд╡рд╛рдВрдЫрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдХреЙрд▓ рдФрд░ рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдереЛрдбрд╝реА рдЦреЛрдЬ, рдФрд░ рдореБрдЭреЗ Skype4COM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реА рдЬреЛ рдЖрдкрдХреЛ Skype рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ NAudio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдФрд░ Google - xNet рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Skype4COM рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ

regsvr32 "__dll"

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА dll рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рд╣рдореЗрдВ Skype рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  //,   Skype if (!Skype.Client.IsRunning) { Skype.Client.Start(true, true); } //     Skype ((_ISkypeEvents_Event)Skype).AttachmentStatus += OurAttachmentStatus; //       Skype.CallStatus += CallStatusChanged; Skype.MessageStatus += ReceiveMessage; //  Skype Skype.Attach(8); 


рдЪреВрдВрдХрд┐ Skype рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдХрдм рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реБрдП:

 private void OurAttachmentStatus(TAttachmentStatus status) { if (status == TAttachmentStatus.apiAttachSuccess) textBox1.Text += "  "; } 


рдЕрдм рдЬрдм рд╣рдордиреЗ Skype рдЬреНрд╡рд╛рдЗрди рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 private void ReceiveMessage(ChatMessage pmessage, TChatMessageStatus status) { //   if (status == TChatMessageStatus.cmsReceived) { //     : string[] message = pmessage.Body.Split(':'); if (message.Length != 2) return; string mess = message[1]; string toLang = message[0]; //   string translate = GetTranslate(mess, toLang); //    byte[] bytes = GetFile(translate, toLang); Stream stream = new MemoryStream(bytes); //  Skype4COM     wav ,  mp3  wav. TimeSpan time = Mp3ToWav(stream, @"d:\test.wav"); //  Skype.PlaceCall(pmessage.FromHandle); //     pmessage.Chat.SendMessage(translate); //,       timer = new Timer(time.TotalMilliseconds); timer.Elapsed += FinishCall; timer.AutoReset = false; } } 


рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ xNet рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  private string GetTranslate(string message, string toLang) { //      - using (HttpRequest request = new HttpRequest()) { StringDictionary reqParams = new StringDictionary(); //  ,      , //         ,      string myLang; if (toLang == "en") { myLang = "ru"; } else { myLang = "en"; } //   - request.UserAgent = HttpHelper.RandomChromeUserAgent(); reqParams["text"] = message; reqParams["tl"] = toLang; reqParams["sl"] = myLang; reqParams["client"] = "x"; //    string s = request.Get( "http://translate.google.ru/translate_a/t", reqParams).ToText(); //    string translate = s.Substring(":\"", "\""); return translate; } } 


рдЕрдм рд╣рдо рдЙрдирдХреА рдЖрд╡рд╛рдЬ рдЕрднрд┐рдирдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 private byte[] GetFile(string translate, string toLang) { using (HttpRequest request = new HttpRequest()) { StringDictionary reqParams = new StringDictionary(); //   - reqParams["ie"] = "UTF-8"; reqParams["q"] = translate; reqParams["tl"] = toLang; reqParams["prev"] = "input"; //  byte[] bytes = request.Get( "http://translate.google.ru/translate_tts", reqParams).ToBytes(); return bytes; } } 


рдЕрдм рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ Wav рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдФрд░ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 public static TimeSpan Mp3ToWav(Stream mp3File, string outputFile) { //    mp3  using (Mp3FileReader reader = new Mp3FileReader(mp3File)) { //    var newFormat = new WaveFormat(16000, 16, 1); using (WaveStream pcmStream = new WaveFormatConversionStream(newFormat, reader)) { //     WaveFileWriter.CreateWaveFile(outputFile, pcmStream); //   return reader.TotalTime; } } } 


рдЕрдм рд╣рдо рдлрд╛рдЗрд▓ рдкреНрд▓реЗрдмреИрдХ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  private void CallStatusChanged(Call pcall, TCallStatus status) { //   ,     call = pcall; //   if (status == TCallStatus.clsInProgress) { //   pcall.set_InputDevice(TCallIoDeviceType.callIoDeviceTypeFile, @"d:\test.wav"); //   timer.Start(); } } 


рдЦреИрд░, рдХреЙрд▓ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдб:
  private void FinishCall(object sender, ElapsedEventArgs e) { call.Finish(); } 


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реЛрдВрдЧреА, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рдореБрдЭреЗ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реВрдВред

PS рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, Skype рдореЗрдВ рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред CallInputStatusChanged рдИрд╡реЗрдВрдЯ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдореИрдВрдиреЗ рдХрд┐рддрдирд╛ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрднреА рдирд╣реАрдВ рд╣реБрдЖред

Source: https://habr.com/ru/post/In139319/


All Articles