Dubya.WindowsMediaController 2.0.0

Additional Details

Versions contain multiple issues and will no longer be maintained/supported. Please use a non-deprecated version.

There is a newer version of this package available.
See the version list below for details.
dotnet add package Dubya.WindowsMediaController --version 2.0.0                
NuGet\Install-Package Dubya.WindowsMediaController -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Dubya.WindowsMediaController" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Dubya.WindowsMediaController --version 2.0.0                
#r "nuget: Dubya.WindowsMediaController, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Dubya.WindowsMediaController as a Cake Addin
#addin nuget:?package=Dubya.WindowsMediaController&version=2.0.0

// Install Dubya.WindowsMediaController as a Cake Tool
#tool nuget:?package=Dubya.WindowsMediaController&version=2.0.0                

Windows Media Controller

This repository provides a wrapper for developers to more easily get information from and interact with the Windows 10/11 OS media interface.

Windows 10 Media Interface

This allows for a better understanding and control of the Media Sessions and can have many different applications. Some features include:

  • Control playback on individual Media Sessions (Spotify, Chrome, etc)
  • Get media information of currently playing (Song, Author, Thumbnail, etc)

Requirements

  • Windows 10 (Build 17763+) or Windows 11
  • The ability to talk to Windows Runtime. (In a majority of cases, this will not be an issue)
  • .NET Framework 4.6+ or .NET Core 3.0+

How To Use

Initialization:

mediaManager = new MediaManager();

mediaManager.OnAnySessionOpened += MediaManager_OnAnySessionOpened;
mediaManager.OnAnySessionClosed += MediaManager_OnAnySessionClosed;
mediaManager.OnAnyPlaybackStateChanged += MediaManager_OnAnyPlaybackStateChanged;
mediaManager.OnAnySongChanged += MediaManager_OnAnySongChanged;

await mediaManager.Start();

Class Structure:

MediaManager:

ReadOnlyDictionary<string, MediaSession> CurrentMediaSessions;
bool IsStarted { get; }
GlobalSystemMediaTransportControlsSessionManager WindowsSessionManager { get; }

delegate void OnAnySessionOpened(MediaManager.MediaSession session);
delegate void OnAnySessionClosed(MediaManager.MediaSession session);
delegate void OnAnyMediaPropertyChanged(MediaManager.MediaSession sender, GlobalSystemMediaTransportControlsSessionMediaProperties args);
delegate void OnAnyPlaybackStateChanged(MediaManager.MediaSession sender, GlobalSystemMediaTransportControlsSessionPlaybackInfo args);

MediaManager.MediaSession:

readonly string Id;
GlobalSystemMediaTransportControlsSession ControlSession { get; }

delegate void OnSessionClosed(MediaManager.MediaSession session);
delegate void OnMediaPropertyChanged(MediaManager.MediaSession sender, GlobalSystemMediaTransportControlsSessionMediaProperties args);
delegate void OnPlaybackStateChanged(MediaManager.MediaSession sender, GlobalSystemMediaTransportControlsSessionPlaybackInfo args);

Getting Some Info:

  • Getting PlaybackInfo (Seeing what actions are available/Is paused or playing, etc)

    • Returns: GlobalSystemMediaTransportControlsSessionPlaybackInfo
    • mediaSession.ControlSession.GetPlaybackInfo()
  • Getting current MediaProperties (Currently playing title, author, thumbnail, etc)

    • Returns: GlobalSystemMediaTransportControlsSessionMediaProperties
    • await mediaSession.ControlSession.TryGetMediaPropertiesAsync()

Useful Microsoft Documentations:

Samples

  • Sample.CMD - A very barebone console application for developers to get a feel of how their use-case might act.

Sample.CMD

  • Sample.UI - A WPF media controller

Sample.UI

Credit

  • Luca Marini (gitlab) - Helped me understand the Windows API
  • Google (materialui) - Utilizing their play icon to create our icon
  • Kinnara (ModernWpf) - Utilized the ModernWpf library to create the UI sample
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
.NET Framework net461 is compatible.  net462 is compatible.  net463 was computed.  net47 is compatible.  net471 is compatible.  net472 is compatible.  net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (3)

Showing the top 3 popular GitHub repositories that depend on Dubya.WindowsMediaController:

Repository Stars
VRCWizard/TTS-Voice-Wizard
Speech to Text to Speech. Song now playing. Sends text as OSC messages to VRChat to display on avatar. (STTTS) (Speech to TTS) (VRC STT System) (VTuber TTS)
unchihugo/FluentFlyout
A simple and modern audio flyout for Windows 10/11, built with Fluent 2 Design principles.
BoiHanny/vrcosc-magicchatbox
The ultimate companion, whether you're on desktop or in VR, we've got you covered with our handy integrations in a compact and modern UI