«Алло, Skype? Это .NET… Могу я записать тебя?»
Не знаю, как вы, а мне иногда нравится побыть кодером. Обычно это происходит тогда, когда я вижу приложение, которое я могу расширить, подключиться к нему, соединиться с ним или улучшить. Тогда я говорю себе: «Я действительно хочу это приложение, ведь можно сделать X», и затем осознаю, что я на самом деле в состоянии самостоятельно заставить программу делать X! Творческий порыв заставляет вернуться за клавиатуру …
Сегодняшнее сообщение как раз такого сорта. Гэл Ратнер (Gal Ratner) поглядел на Skype и, кажется, произнес: «Хотелось бы иметь возможность записывать звонки, которые я делаю с помощью Skype… Уверен, это будет клевый код…»
Он не только сделал это, но и поделился с нами.
Как записывать голосовые разговоры по Skype
Skype предоставляет общедоступный API для прослушивания и передачи сообщений всем программам на вашем ПК. Сообщения передаются через естественный оконный API и требуют использования внешних методов вызова.
В этой статье мы собираемся построить WPF-клиента, который будет взаимодействовать со Skype, регистрировать голосовые вызовы, перенаправлять входящие и исходящие потоки в файлы и, наконец, создавать полный файл беседы.
Давайте начнем с включения необходимых внешних методов:
...
Вот снимок кода из сообщения… Что я нашел интересным, так это как команды посылаются Skype. Это не способ, который обычно можно увидеть в COM или .NET API .
public static string RecordOutputCommand = @"ALTER CALL {0} SET_OUTPUT FILE=""{1}.output""";
public static string RecordInputCommand = @"ALTER CALL {0} SET_CAPTURE_MIC FILE=""{1}.input""";
private void RecordButton_Click(object sender, RoutedEventArgs e)
{
// Fill in the new conversation file name
string conversationFile = String.Format(Utils.SkypeConversationsFile, Utils.SkypeConversationsFolder, Utils.CurrentCallNumber);
FileNameTextBox.Text = conversationFile;
try
{
if (!Directory.Exists(Utils.SkypeConversationsFolder))
Directory.CreateDirectory(Utils.SkypeConversationsFolder);
}
catch (Exception ex)
{
MessageBox.Show("Cannot create directory " + Utils.SkypeConversationsFolder + ". " + ex.Message);
}
// Start recording
if (RecordButton.Content.ToString() == "Start Recording")
{
string recordOutputCommand = String.Format(Utils.RecordOutputCommand, Utils.CurrentCallNumber, conversationFile);
string recordInputCommand = String.Format(Utils.RecordInputCommand, Utils.CurrentCallNumber, conversationFile);
NativeCalls.SendSkypeMessage(recordOutputCommand);
NativeCalls.SendSkypeMessage(recordInputCommand);
RecordButton.Content = "Stop Recording";
}
else
{
// Stop recording
string recordEndOutputCommand = String.Format(Utils.RecordEndOutputCommand, Utils.CurrentCallNumber);
string recordEndInputCommand = String.Format(Utils.RecordEndInputCommand, Utils.CurrentCallNumber);
NativeCalls.SendSkypeMessage(recordEndOutputCommand);
NativeCalls.SendSkypeMessage(recordEndInputCommand);
RecordButton.Content = "Start Recording";
MakeConversationFile();
}
}
Снимок решения:
Заключение
Открытый API Skype содержит много более полезных команд, полную документацию можно найти здесь. С вашего разрешения я присоединил весь код к этому примеру и установщик msi для работы демонстрационной программы [Грег Дункан: щелкните здесь для загрузки…]
Если вы заинтересованы в расширении Skype, то можете начать с этой статьи…
Вот несколько ссылок, которые могут оказаться интересными:
Comments
- Anonymous
November 22, 2011
As your thinking,fully agree with your thoughts. Continue to write <a href="www.mlfhardwoodflooringltd.ca ">hardwood flooring in toronto</a> and tell us a great job