Первая реализация захвата музыки
This commit is contained in:
+82
@@ -0,0 +1,82 @@
|
||||
using System.Text;
|
||||
using Windows.Media.Control;
|
||||
|
||||
Console.OutputEncoding = Encoding.UTF8;
|
||||
Console.Title = "MusicBridge Agent";
|
||||
|
||||
Console.WriteLine("Подключаемся к медиаплееру Windows...");
|
||||
|
||||
var manager =
|
||||
await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
|
||||
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
var session = manager.GetCurrentSession();
|
||||
|
||||
if (session is null)
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("MUSICBRIDGE");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Медиаплеер не найден.");
|
||||
Console.WriteLine("Включи музыку в браузере или приложении.");
|
||||
}
|
||||
else
|
||||
{
|
||||
var media = await session.TryGetMediaPropertiesAsync();
|
||||
var playback = session.GetPlaybackInfo();
|
||||
var timeline = session.GetTimelineProperties();
|
||||
var position = timeline.Position;
|
||||
var updatedAt = timeline.LastUpdatedTime;
|
||||
var now = DateTimeOffset.UtcNow;
|
||||
|
||||
if (playback.PlaybackStatus ==
|
||||
GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing
|
||||
&& updatedAt > DateTimeOffset.UnixEpoch
|
||||
&& updatedAt <= now)
|
||||
{
|
||||
var elapsed = (now - updatedAt).TotalSeconds;
|
||||
var rate = playback.PlaybackRate ?? 1.0;
|
||||
|
||||
position += TimeSpan.FromSeconds(elapsed * rate);
|
||||
}
|
||||
|
||||
if (position < timeline.StartTime)
|
||||
position = timeline.StartTime;
|
||||
|
||||
if (timeline.EndTime > timeline.StartTime
|
||||
&& position > timeline.EndTime)
|
||||
position = timeline.EndTime;
|
||||
|
||||
Console.Clear();
|
||||
Console.WriteLine("MUSICBRIDGE");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine($"Трек: {media.Title}");
|
||||
Console.WriteLine($"Исполнитель: {media.Artist}");
|
||||
Console.WriteLine($"Состояние: {playback.PlaybackStatus}");
|
||||
Console.WriteLine($"Позиция: {FormatTime(position)}");
|
||||
Console.WriteLine($"От плеера: {FormatTime(timeline.Position)}");
|
||||
Console.WriteLine($"Обновлено: {updatedAt.ToLocalTime():HH:mm:ss}");
|
||||
Console.WriteLine($"Конец трека: {FormatTime(timeline.EndTime)}");
|
||||
Console.WriteLine($"Источник: {session.SourceAppUserModelId}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Выход: Ctrl + C");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Не удалось прочитать плеер: {ex.Message}");
|
||||
}
|
||||
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
|
||||
static string FormatTime(TimeSpan time)
|
||||
{
|
||||
return time.TotalHours >= 1
|
||||
? $"{(int)time.TotalHours}:{time.Minutes:00}:{time.Seconds:00}"
|
||||
: $"{(int)time.TotalMinutes}:{time.Seconds:00}";
|
||||
}
|
||||
Reference in New Issue
Block a user