GithubHelp home page GithubHelp logo

moritz-weber / mucke Goto Github PK

View Code? Open in Web Editor NEW
214.0 4.0 9.0 18.55 MB

mucke - android music player

License: GNU General Public License v3.0

Dart 99.95% Shell 0.05%
flutter music android music-player f-droid fdroid

mucke's Introduction

Build Test Coverage Status Translation status

mucke


A music player that gets the best out of your local collection.

Features

  • Like songs to hear them more often in shuffle mode.
  • Exclude songs from playing in shuffle mode.
  • Link songs together to play them back-to-back in shuffle mode.
  • Create smart playlists by filtering and sorting your library.
  • Customize your landing page for a quick start.

Previews

    

Download

Get it on F-Droid

Or get the latest APK from the Releases section.

Translations

mucke uses Weblate for community translations of the app. Feel free to contribute to any language you know:

Translation status

Donating

mucke is a hobby project. Its development progress is largely limited by time and mood 😉 Money won't change that, so there is no option to donate to mucke.

However, if you enjoy mucke and want to support the project monetarily, you could donate to the projects that mucke depends on. This is a short list of developers, you could support instead:

Thanks

Thanks to @maxxs.arts for designing the logo 🤘

mucke's People

Contributors

friederhannenheim avatar moritz-weber avatar poussinou avatar weblate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

mucke's Issues

Adding info to songs

Is your feature request related to a problem? Please describe.
When i download some music from newpipe i get a m4a file this file has no coverart or artist name on it.

Describe the solution you'd like
Add a button so you can edit the coverart and name in the player .
For the coverart direct the user to his filesystem so he can pic a cover.

For the name make a box were the user can type in a name

Describe alternatives you've considered
Add a button so you can edit the coverart and name in the player.
Direct the user to a cover page from ex. Youtube music or spotify (linke in playnite if you pick a cover for a game over there) and if the user cant find a cover over there direct the user to his filesystem so he can pic a cover over there.

For the name make a box were the user can type in a name

Implement song blocking

Current problem:
Changing a song's properties (such as 'blocked') falls in the MusicDataStore as this is the place where the data is handled.
BUT: it could change the current song, which would need to trigger the background task and the AudioStore to refresh the information...

Could be easier with the background task as single source for music data (the library itself AND the current songs).

Flac support

I notice the readme says it only supports mp3 files but it's playing my flac files just fine. Just though you might want to know.

Improve dependency injection

The current implementation of InjectionWidget is cumbersome and doesn't feel right.
Gather further information about GetIt, Provider etc and implement best practice.

UX improvements: tapping the Heart is laggy

The Heart at the Currently playing screen. The one in the middle under the big Album tile.
The one on the Song's minipage is in the same way laggy. I think it may be a synchronous DB write or alike.

Sync Playlists

I would really like to sync some of my playlists between mucke and other music plays (or just mucke on the desktop once that's supported).

One way this could be achieve is if some playlists existed as m3u files on disk. Then they could easily be synced between computers.

Bug: Media folder selection doesn't support files from external documents providers

Hello, I want to play music stored in a smb share, since this app support SAF, I installed and properly configured CIFS Document provider, but after selecting folders in smb, it shows the path is /, and clicking on Update library doesn't detect songs as expected.

To reproduce:

  • Click manage library folders in Settings
  • Add a folder from external sources (for example, the CIFS Document provider) in the file picker

Thank you.

Bugs in Queue

  • audio source gets messed up when dragging a previous song to the current index
  • add after manual songs is buggy

Not possible to start playing excluded songs

When tapping on a song marked for exclusion, nothing will happen (or crash).
If an excluded song is selected manually, it should be included in the playback.
If an excluded song is picked randomly as the starting song, another song should be picked automatically.

Bug in display of blocked songs

  1. listen to a song
  2. block this song
  3. go to album (song is marked as blocked)
  4. select (another) song for "play next"
  5. go back to currently playing
  6. song is not marked as blocked

AlbumArtSwipe jumps to wrong index

To replicate:

  • play a song somewhere in the middle of the queue
  • move the previous song directly after the currently playing song
  • skip to next in the QueuePage
  • result: AlbumArtSwipe has the cover of the previous song

UX improvements: more swipe actions + animations

some more UX ideas:

  1. more swipe actions could be very nice: pulling up the playing bar (the opposite action is implemented already though without the animation)
  2. tapping the Heart is laggy#58
  3. SOLVED: Play Queue worth an easily found button but not the label "NEXT UP" on top
  4. On HOLD: Sometimes pushing Back doesn't lead out of the album contents and shows Home tab.

Pages of deleted albums/artists stay visible

When going from an album/artist page to settings to update the library, the artist/album page stays in the navigation stack (=visible) even if the corresponding songs are removed from the library.

Updating library infinite loading

I experience an infinite loading when trying to update my library.

here's my testing to when it happens:

✅updates successful
❌infinite loading

✅[device storage]\Music\[any folder]
✅[SD storage]\Music\[any folder]
❌[SD storage]\Music

I am unable to test, whether the music folder moved from SD Card to internal storage would load, as it is too large (7.243 entries, 49,08 GB total).
the subfolder that loaded successfully on SD and internal both have a size of roughly 1500files at 4.5gb and it loads within 10 to 15 seconds. the main music folder though won't be loaded even after hours.

device info:
redmi 9c
android 10 (QP1A.190711.020
miui 12 (12.0.14 stable (QCREUXM))

Quick way to play an album without shuffle

Currently there's no way to play an album from start to finish without going to the currently playing view and disabling shuffle.
I can think of 2 ways to implement this:
We could introduce a setting to always play songs in order when playing them from an album (i.e. when the user clicks on a song while on the album page). Alternatively we could put buttons for shuffle/playing in order at the top of the album page. Or we could do both. I would prefer doing both since sometimes you may want to start playing songs in an album starting from the selected song.

What do you think of this? I would like to implement this if you don't mind.

Finish smart list feature

  • form validation
  • UI on home page
  • add form for artist selection
  • filter blocked songs
  • filter / order by year
  • order by time of db entry (new songs)

[FR] smart lists: show albums

instead of separate tracks, i.e. group tracks in a list into albums.
E.g. I want to see most played albums in a smart list.

Thanks a lot for this app: I was thrilled when found it in the FDroid. The good smart lists is one mandatory feature for me when using a music player

Cover image not displayed in some cases

I have noticed that when playing some of my audio files the album cover isn't displayed. After some fiddling I'm pretty sure this affects files where the covers don't have a 1:1 aspect ratio. Tested with FLAC and MP3.

Steps to reproduce: Ripped CD and added image (500x488p) on Linux using EasyTag (EasyTag categorises the image as "Cover (front)"), send over to smartphone, rescan library, open song. Album art not displayed.

Fix: Resized image to 488x488 pixels, added using EasyTag, sent to smartphone, rescanned library. Cover art displays correctly.

I'm running Mucke v1.1.0 on a Fairphone 4 eith Android 12 stock.

Implement filters for song scanning

Currently, the song scanning can find audio files that can't be played by the app. To keep the library clean, a combination of workarounds should be implemented:

  1. Filter by file extension: Provide safe defaults (e.g. mp3, flac, ogg, wav) and let the user modify this list.
  2. Let users manually exclude individual files from the library. Essentially, adding them to a blacklist for scanning. With multiselect, one could easily exclude whole albums and keep the library clean.

See: https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12193#note_1195476076

Support more file types

Hello,
First of all, thanks for this great app.
I have mainly .m4a songs on my phone, so it would be great to have the possibility to play these songs.
If it is not possible, maybe a mention of which type of files are supported can be useful.

Replaygain support

Would it be possible to add replaygain support? Most of the other open source music players include it.

Cleanup use cases and stores

  • get rid of current use cases and refactor their dependent stores
  • refactor tests for deleted use cases
  • add tests for untested store methods
  • streamline observables (see AlbumsPage vs. SongsPage)

Sorting Naturally

As far as I can tell, sorting is currently done alphabetically, which leads to unexpected behaviour when playing audio files in correct album order that contain numbers. Currently files will be played in this order:

  • Song 1
  • Song 10
  • Song 100
  • Song 2
  • Song 3

Expected behaviour:

  • Song 1
  • Song 2
  • Song 3
  • Song 10
  • Song 100

Solution could probably be sorting by natural compare rather than alphabetical

Dispose AudioPlayer correctly

Currently AudioPlayer is not dispose in the stop() method of AudioHandler. This may lead to resources not being release correctly.

Implement persistence

The app state should be stored persistently and loaded on startup.
Steps to test an implementation with moor:

  • create moor table as key-value store
  • extend MusicDataSource interface to set/get/watch values (until a better place for this is found)
  • implement PersistenceManager that handles type conversions
  • implement persistence for ShuffleMode as an example

Enhance queue page

  • multi select
  • show info about current Playable (type, name, number of songs available, length of queue)
  • indicate origin of songs (or at least indicate manually queued songs)
  • maybe: try reduced playback controls on this page

better indicator to jump to current song

Mucke sometimes gets killed by the ActivityManager for using too much CPU

I haven't found a pattern on when this happens yet. Here is the logcat output:

01-05 19:48:09.072  1519  1626 I ActivityManager: Start proc 14062:rocks.mucke/u0a426 for pre-top-activity {rocks.mucke/com.ryanheise.audioservice.AudioServiceActivity}
01-05 19:48:26.246  1519  7696 E ClipboardService: Denying clipboard access to rocks.mucke, application is not in focus nor is it a system service for user 0
01-05 19:52:13.593  1519  6358 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=rocks.mucke/com.ryanheise.audioservice.AudioServiceActivity bnds=[35,1171][237,1515]} from uid 10170
01-05 19:52:13.616  1519  6358 E ClipboardService: Denying clipboard access to rocks.mucke, application is not in focus nor is it a system service for user 0
01-05 19:52:41.144  1519  8816 W ActivityManager: Background started FGS: Disallowed [callingPackage: rocks.mucke; callingUid: 10426; uidState: CAC ; intent: Intent { cmp=rocks.mucke/com.ryanheise.audioservice.AudioService }; code:DENIED; tempAllowListReason:<null>; targetSdkVersion:31; callerTargetSdkVersion:31; startForegroundCount:2; bindFromPackage:null]
01-05 19:52:41.147  1519  8816 W ActivityManager: startForegroundService() not allowed due to mAllowStartForeground false: service rocks.mucke/com.ryanheise.audioservice.AudioService
01-05 19:56:13.059  1829  1829 V AudioMediaPlayerWrapper: trySendMediaUpdate(): Metadata has been updated for rocks.mucke
01-05 19:56:13.293  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke
01-05 19:56:25.288  1829  1829 V AudioMediaPlayerWrapper: trySendMediaUpdate(): Metadata has been updated for rocks.mucke
01-05 19:56:25.532  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke
01-05 19:59:52.440  1829  1829 V AudioMediaPlayerWrapper: trySendMediaUpdate(): Metadata has been updated for rocks.mucke
01-05 19:59:52.688  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke
01-05 20:00:04.182  1829  1829 V AudioMediaPlayerWrapper: trySendMediaUpdate(): Metadata has been updated for rocks.mucke
01-05 20:00:04.433  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke
01-05 20:03:23.626  1829  1829 V AudioMediaPlayerWrapper: trySendMediaUpdate(): Metadata has been updated for rocks.mucke
01-05 20:03:23.882  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke
01-05 20:03:27.518  1519  1625 I ActivityManager: Killing 14062:rocks.mucke/u0a426 (adj 900): excessive cpu 52860 during 300071 dur=664073 limit=10
01-05 20:03:27.695  1519  1923 V MediaSessionRecord: Removing dead callback in pushSessionDestroyed, this=rocks.mucke/media-session (userId=0), callback package=rocks.mucke, exception=android.os.DeadObjectException
01-05 20:03:27.696  1519  1823 I WindowManager: WIN DEATH: Window{6e38f83 u0 rocks.mucke/com.ryanheise.audioservice.AudioServiceActivity}
01-05 20:03:27.696  8844  8844 D MediaTimeout: Session destroyed for 0|rocks.mucke|1124|null|10426
01-05 20:03:27.697  1519  1823 W InputManager-JNI: Input channel object '6e38f83 rocks.mucke/com.ryanheise.audioservice.AudioServiceActivity (client)' was disposed without first being removed with the input manager!
01-05 20:03:27.698  1829  1829 W AudioMediaPlayerWrapper: The session was destroyed rocks.mucke
01-05 20:03:27.698  1829  1829 D MediaPlayerList: sessionUpdatedCallback(): packageName: rocks.mucke
01-05 20:03:27.699  1829  1829 D MediaPlayerList: Removing media player rocks.mucke
01-05 20:03:27.699  1829  1829 D MediaPlayerList: rocks.mucke doesn't have a browse service. Recycle player ID.
01-05 20:03:27.707  1519  1624 W UsageStatsService: Unexpected activity event reported! (rocks.mucke/com.ryanheise.audioservice.AudioServiceActivity event : 23 instanceId : 188649197)
01-05 20:03:27.903  8844  9032 D PeopleSpaceWidgetMgr: Sbn doesn't contain valid PeopleTileKey: null/0/rocks.mucke

Implement queue

  • implement actions to set/retrieve queue from background task
  • implement UI to display queue
  • implement logic to play next song in queue after current one finished

BUGS

  • NextIndicator and Previous/NextButton are not updating, when CurrentlyPlaying wasn't focused

Setting for when a song is marked as listened

I've noticed that songs arw only marked as listened after listening to it for some time and not if you just listen to 5 seconds of it. A setting to set the time one needs to listen to a song for it to increment the listen counter would be great.

Handle missing files

Missing files need to be handled, when they were deleted from the device. This should not require a manual database update.

Enhance search page

  • Find smart lists and playlists.
  • Clarify and improve visuals of headers (indicate tap action).
  • Add complete list of song results to queue when playing a song from search.
  • Keep scroll position when collapsing/expanding a section.
  • Show song updates

[FR] album tiles

i.e. show albums as tiles, not the list.
This may be opt-in option
The same may be good for artists when artist photos will be added

Android Widget

I'm not sure how easy it is to build up an Android home screen widget in Flutter.
So as a temporary solution I suggest to add intents for the Universal Music Player widget.
Thanks for the player, it's great!

Ideas for Home Page

  • Artist of the day
  • History (played albums, playlists etc)
  • Shortcuts (artists,...) maybe with different styles (button, card,...)
  • List of playlists (with sorting options and option to hide playlists)
  • Options for enabling/selecting and sorting these blocks
  • Options for Shuffle All Button

Cleanup GetIt

The injection container feels kind of hacky. Clean this up and do it the right way

Dragging a song before the currently playing song

  1. Drag a song from the queue to the position right before the current song.
  2. Dragged song will be highlighted as current song.
  3. Currently playing song continues playing. And is the next song in queue as well.

Fix library update

The current implementation is broken and crashes regularly.
After the update only the songs, albums and artists currently present on the device should be in the database. Other entries should be deleted.
If the metadata of a file (path is constant) changes, the entry should be updated. If the path changes (title etc is constant), the entry should be updated as well to not loose additional information stored in the database.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.