Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

 
 

Latest commit

 

History

28 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dynamic Island для Windows

Остров в духе iPhone у верхнего края экрана: показывает, что играет, громкость, таймер и системные события, а по клику раскрывается в плеер.

Написан на WPF (.NET 8) без сторонних пакетов — только Windows API.

Что умеет

  • Музыка. Обложка, название и эквалайзер для любого приложения с системной медиасессией (Spotify, браузер, Яндекс Музыка…). Цвет полосок берётся из обложки, и в тот же цвет окрашивается светлый ободок острова. При смене трека новая обложка выталкивает старую — влево для следующего трека, вправо для предыдущего. Обложка и полоски одни на остров, тост и плеер: между ними они не гаснут и не появляются заново, а переезжают и меняют размер вместе с формой острова.
  • Текст песни. Синхронные строки с LRCLIB прямо в компактном острове; он растягивается под длину строки.
  • Плеер. По клику — большая обложка, перемотка, «назад / пауза / вперёд» и подсветка в цветах обложки, которая движется под звук. Если у трека есть текст, плеер становится выше и показывает три строки: та, что поётся, стоит посередине и заливается светом слева направо, соседние — меньше и не в фокусе. На проигрышах вместо строки — три точки: они «дышат» и гаснут по одной к следующей строке.
  • Несколько источников. Если музыка есть сразу в нескольких приложениях (Spotify и вкладка браузера), Ctrl + колесо над островом листает их по кругу; остров называет приложение, к которому перешёл. Выбор держится, пока играть не начнёт другое приложение.
  • Живой спектр. Полоски считаются по реальному выводу звука (WASAPI loopback), а не случайно. На басу светится и ободок острова.
  • Громкость. Индикатор при изменении громкости; колесо мыши над островом её меняет. На 0 и 100% полоска тянется дальше, как резинка, и возвращается. Волны у значка динамика появляются и гаснут по одной, а при выключенном звуке на их месте рисуется крестик. Над раскрытым плеером колесо меняет громкость только того приложения, которое играет, — как его ползунок в системном микшере; уровень на секунду появляется слева от кнопок.
  • Таймер. От 1 до 99 минут. Пока играет музыка, таймер отделяется в отдельный «пузырь» рядом — вытягивается из острова, как капля. В раскрытом таймере остаток времени идёт кольцом вокруг кнопки паузы. Последние 10 секунд отсчёт краснеет и пульсирует. По окончании звонит, пока не кликнете: колокольчик качается, остров подрагивает, ободок вспыхивает.
  • Полка для файлов. Перетащите файлы на остров — он раскроется в полку и подержит их у себя; или нажмите «+» на полке (на пустой — саму полку) и выберите файлы в обычном окне. На полке — превью для фото и видео, иконки для остального. Пока на полке что-то лежит, рядом с островом висит пузырь с числом файлов. Файл с полки перетаскивается куда угодно — в папку, чат, письмо — и копируется туда, а оригинал остаётся на месте; положенный куда-то, он уходит с полки. Клик по файлу открывает его. Полка помнит файлы между запусками.
  • Заряд наушников. Процент заряда Bluetooth-наушников — в раскрытом острове и в плеере, при подключении и отдельным предупреждением на 20% и 10%. Показывается для устройств, которые сообщают заряд Windows (тот же процент, что в «Параметрах»).
  • Уведомления. Подключение зарядки, смена аудиоустройства (наушники, Bluetooth), Wi-Fi / Ethernet, включение и отключение VPN, режим «Не беспокоить» — луна в острове, а пока режим включён, она стоит и рядом с датой в раскрытых часах. У каждого уведомления значок стоит на подложке своего цвета и появляется по-своему: дуги Wi-Fi загораются по одной, потерянную сеть перечёркивает черта, галочка VPN рисуется или стирается, наушники «надеваются», при зарядке бьёт молния.
  • Не мешает. Прячется, когда на весь экран открыта игра или видео, не появляется в Alt-Tab и не забирает фокус.
  • Настройки. Текст песен, эффекты его строк в плеере (заливка, размер и размытие соседних), цветной ободок, громкость приложения в плеере, уведомления о сети, скрытие на полном экране и автозапуск выключаются на странице «Настройки» в меню.
  • Оформление. На соседней странице меню — размер острова (85–130%), отступ от верхнего края экрана (0–24 px), пульс ободка (насколько ярко он светится на басу: выключен, слабый, средний, сильный) и акцентный цвет: один из девяти вместо цветов обложки для полосок, подсветки плеера и ободка.

Управление

Действие Результат
Клик Раскрыть плеер или таймер, повторный клик — свернуть
Клик по обложке в плеере Открыть приложение, в котором играет музыка
Правый клик Меню: таймер, полка, настройки, оформление, закрыть остров; со страницы настроек или оформления — назад в меню
Клик колесом Спрятать остров на 5 секунд
Колесо мыши Громкость: общая, над раскрытым плеером — играющего приложения (в настройке таймера — минуты, на странице оформления — значение строки под курсором, на полке — листает файлы)
Ctrl + колесо Следующее или предыдущее приложение с музыкой
Клик по звонящему таймеру Выключить звонок
Перетащить файлы на остров Положить их на полку
«+» на полке или клик по пустой полке Выбрать файлы для полки в обычном окне
Перетащить файл с полки Скопировать его туда, куда отпустили
Клик по файлу на полке Открыть его; крестик в углу — убрать с полки
Клик по пузырю Открыть таймер или полку — ту половину, по которой кликнули

Скачать

Готовый DynamicIsland.exe лежит в релизах. Устанавливать ничего не нужно: скачайте и запустите. Подходит для 64-битных Windows 10 2004 (сборка 19041) и новее, Windows 11.

Файл не подписан, поэтому при первом запуске SmartScreen может предупредить о неизвестном издателе: «Подробнее» → «Выполнить в любом случае».

Сборка из исходников

Нужен .NET 8 SDK.

git clone https://github.com/mihailkotovski/DynamicIsland.git
cd DynamicIsland
dotnet run -c Release

Один exe-файл, которому не нужен установленный .NET — так же собирается релиз:

dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true -o publish

Выпуск новой версии

Релиз собирает GitHub Actions (release.yml) — достаточно запушить тег:

git tag v1.1.0
git push origin v1.1.0

Шрифты

Остров рисуется шрифтом SF Pro: файлы лежат в Fonts и встраиваются в exe при сборке. Шрифт принадлежит Apple и распространяется на условиях её лицензии. Без этих файлов используется Segoe UI.

Отладка

DynamicIsland.exe --view MediaBig
DynamicIsland.exe --timer 90

--view закрепляет одно состояние острова (Idle, Media, Timer, Volume, Charge, Toast, Notice, MediaBig, IdleBig, TimerBig, TimerSet, Menu, Settings, Look), --timer сразу запускает отсчёт на указанное число секунд.

Необработанные ошибки пишутся в %TEMP%\DynamicIsland.log.

Как устроено

Файл За что отвечает
MainWindow.xaml(.cs) Все состояния острова, переходы между ними (страницы меню сдвигаются вбок, строки въезжают по очереди), указатель
Spring.cs Пружина, на которой построено каждое движение
Goo.cs Чёрное тело острова: пилюля, пузырь и перемычка, которая тянется между ними и рвётся; ободок, его свет на басу и вспышки, пока звонит таймер
Squircle.cs Контур со сглаженными углами: скругление плавно выходит из прямой, как у Apple
Icon.cs Собственные иконки: громкость, наушники, сеть, VPN, таймер; составные появляются и меняются по частям
MediaService.cs Текущий трек через системную медиасессию (GSMTC), выбор между несколькими приложениями, цвет из обложки
Cover.cs Обложка: новая выталкивает старую в сторону, куда листается плейлист
SourceApp.cs Приложение, в котором играет музыка: переход к его окну, имя, его процессы
LyricsService.cs Поиск и разбор синхронного текста с LRCLIB
Lyric.cs Строка текста в плеере, которая заливается светом, пока её поют; точки на проигрышах
Spectrum.cs Захват вывода звука и разложение по частотам
Equalizer.cs, Aura.cs Полоски и подсветка плеера
AudioService.cs Громкость — общая и отдельного приложения — и смена устройства вывода (Core Audio)
Headset.cs Заряд Bluetooth-наушников
NetworkService.cs Состояние сети и VPN
Timer.cs, Ring.cs, Digits.cs Отсчёт, звонок, кольцо и перелистывание цифр
Settings.cs, Toggle.cs Настройки и оформление из меню, переключатель
RowList.cs Строки меню и подсветка, которая перетекает между ними за курсором
Native.cs Win32: поверх всех окон, полноэкранный режим, батарея, автозапуск, клавиши громкости и треков

Конфиденциальность

Единственный сетевой запрос — поиск текста на lrclib.net: туда уходят название трека и исполнитель. Больше приложение ничего никуда не отправляет. Если выключить «Текст песен» в меню, не будет и этого запроса.

Автозапуск включается записью в HKCU\Software\Microsoft\Windows\CurrentVersion\Run и выключается тем же переключателем. Остальные переключатели меню и оформление хранятся в HKCU\Software\DynamicIsland.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages