Library / SDK
digimezzo/dopamine-windows avatar
digimezzo/dopamine-windows

Dopamine for Windows: a C# music player built on CSCore and FFmpeg

Audio player which tries to make organizing and listening to music as simple and pretty as possible.

2,056 stars272 forksC#GPL-3.0

At a glance

What is it?
Dopamine is a Windows desktop music player written in C#, split into Core, Data, Services and Packager projects, with audio work delegated to CSCore and FFmpeg. The repository ships a GPL-3.0 licence, a PDF manual and a translation workflow, and its build instructions still assume the Windows 10 SDK.
Who is it for?
Dopamine suits a Windows desktop shop that wants a small music player in managed code and is willing to maintain its own build: copy Windows.winmd into the UnionMetadata folder, confirm the System.Runtime.WindowsRuntime.dll reference, and check that the CSCore dependency still compiles against your toolchain.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 21, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A Windows music player that delegates the audio work

Dopamine describes itself as an audio player which tries to make organizing and listening to music as simple and pretty as possible. It is written in C#, and the project is hosted by digimezzo under the name Dopamine-windows, with the homepage at digimezzo.github.io/site.

The interesting architectural decision is what Dopamine does not implement itself. Playback is powered by the CSCore sound library, and the README notes that the software uses code from FFmpeg licensed under LGPLv2.1, with FFmpeg source available separately. So the audio path is a stack of two established pieces while the player, library and interface around them are original. For a reader deciding whether to adopt the project, that matters in both directions: format support follows CSCore and FFmpeg rather than a bespoke decoder, and any redistribution has to respect the LGPL terms of the FFmpeg portion even though Dopamine itself is GPL-3.0.

The README also points readers to Dopamine 2 documentation as a PDF kept in the repository, and credits it as written from scratch by Theocharis Georgios. A manual in the repository rather than on a separate site is a small thing, but it means the documentation survives with the code.

How the solution is divided: Core, Data, Services and Packager

The repository layout shows the shape of the application. There is a Dopamine/ directory holding the main project and its images, plus Dopamine.Core/, Dopamine.Data/, Dopamine.Services/, Dopamine.Packager/ and Dopamine.Tests/, all tied together by Dopamine.sln. The naming is conventional, and it is worth reading the split as intent: Core for the domain, Data for storage and metadata, Services for the operations the interface calls, Packager for producing the installer, Tests for the test suite.

The presence of a dedicated packager project tells you the release is built from source rather than assembled by hand, and the presence of Dopamine.Tests tells you the project has automated coverage, even though the README says nothing about how much of the player it covers. Language files live under Dopamine/Languages in the repository, which is where translators are pointed.

For an engineer evaluating this, the practical question is which of these layers you would touch. Swapping the storage backend means working inside Dopamine.Data, changing playback behaviour means working around Core and the CSCore boundary, and changing the shipped artifact means working in Dopamine.Packager. The separation is a normal one for a C# desktop application and it makes partial reuse plausible, though the README does not document the projects as a supported library API.

Building from source on Windows 7 through 10

The compile instructions are the most concrete part of the README, and they name two file dependencies. The first is Windows.winmd, provided by the Windows 10 SDK, used for the system notifications. For Windows 10 build 10.0.17134.0 it sits under the UnionMetadata folder of the Windows Kits directory, and the instruction is to copy it to its parent folder so that it is available at this path:

text
C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd

The second dependency is a .NET Core reference assembly, which must be present on the machine:

text
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll

With both in place, the README states that Dopamine should compile without issues on Windows 7, 8, 8.1 and 10. If the assembly named Windows still cannot be found afterwards, the README points at issue #836 for more help locating it.

Two things follow from these steps. The build is tied to a Windows SDK layout, so a machine without the Windows 10 SDK installed cannot reproduce it, and the copy step means the project is not built in a hermetic environment. On a CI runner, those two files have to be provisioned explicitly.

Release tags from 2021 and 2024 against a 2026 push

The release list shows three recent tags: Dopamine 2.0.8 from 2021-04-10, then Dopamine 2.0.9 and Dopamine 2.0.10 from 2024-08-10 and 2024-08-11, published under the tag names v2.0.9.4000 and v2.0.10.4000. The last push to the repository was on 2026-10-16, and the repository is not archived.

That gap between a 2024 tag and a 2026 push is the kind of thing to check before you plan around the project. A tagged release is what a user of the downloads page gets. A repository that still receives commits is not the same thing as a project that ships installers on a schedule, and the difference matters when you are deciding whether an upgrade path will exist.

The naming convention of the tags also encodes the packaging scheme, with a four digit build counter appended to the marketing version. Whatever packaging pipeline the Packager project drives, it produces those suffixed artifacts.

Translations handled through pull requests on GitHub

Dopamine's localisation workflow is unusually explicit. The README explains that language files were arriving by Facebook, Twitter, e-mail and GitHub, that tracking them was getting hard, and that translations were getting lost, so contributions are being centralised on GitHub.

The procedure has two paths. For a language file that already exists, the instruction is to edit it directly on GitHub and send a pull request, with a link explaining how editing files in another user's repository works. For a new language file, the instruction is to open a pull request adding it, or to send an e-mail naming the language if you are unsure how to add it, after which the maintainer adds the file so it can be edited directly.

The mechanism is a straightforward one, and the interesting part is the reason for it. A single-player project with a scattered translator base wanted a reviewable, versioned channel for language changes, and it picked the pull request over a translation platform. If you contribute a language, expect the change to be reviewed as code, with the same merge and conflict handling that applies to any other file in the repository.

Licensing and the boundary of a Windows-only player

Dopamine carries the GPL-3.0 licence, with a LICENSE file at the top level, and the FFmpeg code it uses is under LGPLv2.1 with its source downloadable separately. A team embedding or redistributing Dopamine therefore has to satisfy both obligations, and the LGPL portion carries the condition that its source can be obtained. That is a compliance question rather than a legal opinion, but it belongs in any evaluation, and it is the clearest difference from an approach where you write your own player against FFmpeg directly under the LGPL terms and keep your own interface code outside a copyleft licence.

The second boundary is the platform itself. Every build instruction in the README is a Windows path, the compile target list is Windows 7, 8, 8.1 and 10, the system notifications rely on the Windows Runtime metadata, and the project is named dopamine-windows. There is no Linux, macOS or mobile build described anywhere in the README. For a product team that needs one music surface across several operating systems, this project is off the table regardless of how the interface looks.

Inside Windows, though, the scope is coherent: one player, one audio stack, and a codebase small enough that its structure is visible in the repository listing.

Editorial conclusion

Dopamine suits a Windows desktop shop that wants a small music player in managed code and is willing to maintain its own build: copy Windows.winmd into the UnionMetadata folder, confirm the System.Runtime.WindowsRuntime.dll reference, and check that the CSCore dependency still compiles against your toolchain. It is the wrong choice for a cross-platform team, because the README documents a Windows-only build, and the wrong choice for anyone who needs a signed installer from a store, since the project distributes downloads from its own site and GitHub releases. The newest tagged build is v2.0.10.4000 from 2024-08-11 while the last push was on 2026-10-16, so verify which artifact you are actually shipping before committing.

Frequently asked questions

Is Dopamine available for Linux or macOS?

The README documents Windows only, with compile instructions for Windows 7, 8, 8.1 and 10 and Windows SDK paths for building it. No other operating system build is described in the project documentation.

Which libraries does the Dopamine music player use for audio?

The README says the player is powered by the CSCore sound library and that it uses code from FFmpeg licensed under LGPLv2.1, with the FFmpeg source available separately.

How do I compile Dopamine from source?

Install the Windows 10 SDK, copy Windows.winmd into C:\Program Files (x86)\Windows Kits\10\UnionMetadata, and make sure the System.Runtime.WindowsRuntime.dll reference assembly exists under the .NETCore v4.5 reference assemblies folder. With both present the README says Dopamine compiles on Windows 7, 8, 8.1 and 10.

How can I contribute a translation to Dopamine?

Language files live in the Dopamine/Languages folder of the repository. For an existing file the README asks you to edit it on GitHub and open a pull request, and for a new language you should add it by pull request or e-mail the maintainer first.

Official sources

  1. digimezzo/dopamine-windows on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/digimezzo-dopamine-windows.svg)](https://hysenlabs.com/projects/digimezzo-dopamine-windows)

Was this useful?