Первая реализация захвата музыки

This commit is contained in:
2026-09-08 23:23:55 +03:00
commit 8941a6b473
29 changed files with 966 additions and 0 deletions
+82
View File
@@ -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}";
}