moritz-weber / mucke Goto Github PK
View Code? Open in Web Editor NEWmucke - android music player
License: GNU General Public License v3.0
mucke - android music player
License: GNU General Public License v3.0
The injection container feels kind of hacky. Clean this up and do it the right way
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.
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
The app state should be stored persistently and loaded on startup.
Steps to test an implementation with moor:
I tried to install the 1.0.1 apk, but I get the following message
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.
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
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:
See: https://gitlab.com/fdroid/fdroiddata/-/merge_requests/12193#note_1195476076
better indicator to jump to current song
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))
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.
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!
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:
Expected behaviour:
Solution could probably be sorting by natural compare rather than alphabetical
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).
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.
Missing files need to be handled, when they were deleted from the device. This should not require a manual database update.
The current implementation of InjectionWidget is cumbersome and doesn't feel right.
Gather further information about GetIt, Provider etc and implement best practice.
Would it be possible to add replaygain support? Most of the other open source music players include it.
BUGS
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.
Current state of navigation is confusing.
References:
https://moor.simonbinder.eu/docs/advanced-features/isolates/
This is needed for #1 as MediaItems can't be passed in customAction.
Also for #3 and future playback features.
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.
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.
Could you add the German language.
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.
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
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.
Current behavior is just weird. Investigate audio_session usage for this issue.
To replicate:
Investigate if switch to Duration (like MediaItem) makes sense.
Yes => Refactor
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:
Thank you.
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.
some more UX ideas:
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
Currently AudioPlayer is not dispose in the stop() method of AudioHandler. This may lead to resources not being release correctly.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.