{"id":50,"date":"2025-05-13T09:28:00","date_gmt":"2025-05-13T07:28:00","guid":{"rendered":"https:\/\/linuxundich.de\/en\/?p=50"},"modified":"2026-10-03T21:49:46","modified_gmt":"2026-10-03T19:49:46","slug":"gramophone-a-modern-material-3-music-player-for-android","status":"publish","type":"post","link":"https:\/\/linuxundich.de\/en\/android\/gramophone-a-modern-material-3-music-player-for-android\/","title":{"rendered":"Gramophone: A modern Material 3 music player for Android"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Everyone has a <a href=\"https:\/\/linuxundich.de\/tag\/spotify\/\">Spotify<\/a> account these days, right? For many people, music streaming has become a given. But there are still a few holdouts who won&#8217;t be lured into the cloud. People who would rather keep their music locally on their computer or smartphone, stay in control of their files, and have no interest in ads, tracking, or subscriptions. I&#8217;m one of them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Over the years, I&#8217;ve tried a lot of open-source music players on my <a href=\"https:\/\/linuxundich.de\/tag\/android\/\">Android<\/a> smartphone, with varying degrees of success. With <a href=\"https:\/\/github.com\/FoedusProgramme\/Gramophone\">Gramophone<\/a>, I&#8217;ve landed once again on an app that not only looks up to date, but also manages large music collections quickly and reliably. And it does so without any frills, trackers, or in-app purchases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modern Design with Material You<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first thing you notice about Gramophone is the elegant design. The app follows Google&#8217;s current <a href=\"https:\/\/m3.material.io\/\">Material 3 Design<\/a> all the way, better known as \u201cMaterial You\u201d. If you run a recent Android 12 or newer, you get an interface with perfectly matched colors, including dynamic accent colors that adapt to your chosen wallpaper. That goes not only for the app itself, but also for the app icon, which blends into the system&#8217;s colors seamlessly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Under the hood, Gramophone doesn&#8217;t rely on its own database. Instead, it uses Android&#8217;s <a href=\"https:\/\/developer.android.com\/training\/data-storage\/shared\/media?hl=de\">MediaStore API<\/a> to make your music library available in a flash. That saves resources and also keeps access smooth, even with large collections. What I like less is the filtering by artist. Gramophone uses the ID3 tag \u201cArtist\u201d instead of \u201cAlbum Artist\u201d. The result: if your collection is cleanly tagged, you will find many artists listed multiple times because of duets or collaborations, for example in the form \u201cArtist1; Artist2; Artist3\u201d.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;galleryId&quot;:&quot;6ac183e32927b&quot;}\" data-wp-interactive=\"core\/gallery\" class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac183e3679c7&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac183e3679c7\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"44933\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/05\/gramophone-android-01-461x1024.webp\" alt=\"Album view in Gramophone\" class=\"wp-image-44933\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Album view<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac183e36ab64&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac183e36ab64\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"44934\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/05\/gramophone-android-02-461x1024.webp\" alt=\"Duplicate artists\" class=\"wp-image-44934\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Artists<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac183e36d12b&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac183e36d12b\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"44935\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/05\/gramophone-android-03-461x1024.webp\" alt=\"Player in album view\" class=\"wp-image-44935\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Album player<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac183e36f513&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac183e36f513\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"44936\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/05\/gramophone-android-04-461x1024.webp\" alt=\"Player in full screen\" class=\"wp-image-44936\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Player<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac183e3727a5&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac183e3727a5\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"44937\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/05\/gramophone-android-05-461x1024.webp\" alt=\"Light mode\" class=\"wp-image-44937\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Light mode<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The full-text search lets you quickly filter for artists, albums, or individual songs. Especially handy: in the settings, you can define how Gramophone deals with very short audio files. By default, the app hides all files shorter than 60 seconds, such as ringtones or notification sounds, if anyone still uses those at all. You can set this filter to 0 under <em>Three-dot menu<\/em> \u00bb <em>Settings<\/em> \u00bb <em>Behavior<\/em> [CHECK: UI labels] to show all files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If songs are still missing, take a look at <em>Folder blacklist<\/em> [CHECK: UI label] as well. You may have excluded certain directories from the search. Sometimes a simple reboot of your phone helps, too, so that Android&#8217;s media scan picks up new files. For me, though, Gramophone has always added new songs to the collection automatically.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lyrics support and playlist feature<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Besides its simple controls, Gramophone also supports lyrics, as long as your music is tagged with synchronized lyrics. They show up right in the player, provided the metadata is there.<\/p>\n\n\n\n<p class=\"has-cyan-bluish-gray-background-color has-background wp-block-paragraph\"><strong>Question:<\/strong> I haven&#8217;t been that diligent in this area so far. Does anyone know a tool that could automatically add lyrics like this to a larger collection of MP3s? I doubt it&#8217;s that easy, since copyright surely plays a role here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Playing existing playlists works too, but only in read-only mode for now. You can&#8217;t create your own playlists directly in the app yet. According to the developers, that might change in the future. For me it&#8217;s not much of a roadblock, though, because I see apps like Gramophone purely as players and don&#8217;t want to fiddle around with playlists.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What is still urgently missing, in my opinion, is support for Android Auto. There is already a <a href=\"https:\/\/github.com\/FoedusProgramme\/Gramophone\/issues\/93\">bug report<\/a> for it, but the developer currently doesn&#8217;t have the time to tackle this feature. With Android Auto, I think the most important requirements for a modern music player on Android would be covered.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Formats: What works and what doesn&#8217;t?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Since Gramophone is kept as lean as possible, the app relies on the codecs built into Android. That means support for more exotic formats depends heavily on the Android system and on the device itself. Here are a few rules of thumb:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FLAC:<\/strong> Supported from Android 8 on. 32-bit FLAC files only work from Android 14 on.<\/li>\n\n\n<li><strong>ALAC:<\/strong> Doesn&#8217;t work in most cases, because Android usually doesn&#8217;t support this codec.<\/li>\n\n\n<li><strong>Dolby AC-3 \/ E-AC-3:<\/strong> Needs a device with the matching license. Many cheap devices don&#8217;t support these formats.<\/li>\n\n\n<li><strong>Opus:<\/strong> Only detected in the MediaStore from Android 10 on, so it only shows up in the library from that version.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">So if a song doesn&#8217;t play or stays completely silent even though the volume is fine, check the format.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A lean, good-looking music app<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gramophone is one of the few open-source music players that consistently follows Android&#8217;s current design guidelines. The project is actively maintained on GitHub. The latest release, <a href=\"https:\/\/github.com\/FoedusProgramme\/Gramophone\/releases\/tag\/1.0.16.1\">Gramophone 1.0.16.1<\/a>, came out in early March and shows that development keeps moving. You can also submit bugs and ideas via <a href=\"https:\/\/github.com\/FoedusProgramme\/Gramophone\/issues\">GitHub<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The app is licensed under the GPLv3 and is easy to install via <a href=\"https:\/\/f-droid.org\/packages\/org.akanework.gramophone\/\">F-Droid<\/a>, as an <a href=\"https:\/\/github.com\/FoedusProgramme\/Gramophone\/releases\/\">APK file directly from GitHub<\/a> or, if you prefer, through the <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=org.akanework.gramophone\">Google Play Store<\/a>. If you use an Android device, keep your music stored locally, and care about privacy, performance, and design, you should definitely give Gramophone a try.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Do you prefer keeping your music stored locally instead of streaming it? Then Gramophone is worth a look. This lean music player for Android is open source and uses the current Material 3 design. No trackers, no ads, no cloud required.<\/p>\n","protected":false},"author":2,"featured_media":73,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"lui_source_id":44928,"lui_source_hash":"11965ca2de9de0b2414d43cd4e40f8fd4585af68be2ef66789ee220125340aa9","lui_source_translated":"2026-10-03","lui_source_reviewed":true,"lui_via_url":"","lui_via_label":"","lui_source_url":"","lui_source_label":"","footnotes":""},"categories":[3],"tags":[],"class_list":["post-50","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":2,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/50\/revisions"}],"predecessor-version":[{"id":74,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/50\/revisions\/74"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/73"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/categories?post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/tags?post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}