I know that Simple Scrobbler at least does this already… if provided by the player. I don’t know which players (if any) actually read this information and pass it on.
Thanks,
Good to know that the code exists in Simple Scrobbler.
I will test out a few more players and maybe find one that supports it.
Great. Please do report back if you find any that work.
While reading the API
it seems that only
mbid | String | No | A MusicBrainz Recording ID <https://musicbrainz.org/doc/MBID>
is supported.
Nothing to report unfortunately.
After testing most of the listed players
none had mbid value in the intent broadcast.
I couldn’t find any app that provided mbid by the player, so I forked Vanilla Music Player https://github.com/vanilla-music/vanilla
and modified it to read/store the value and send it using Scrobble Droid API with simple-last-fm-scrobbler
Most players read metadata through Android’s inbuilt MediaMetadataRetriever
which does not have the option to read MBIDs. This is the reason why very few players have support for MBIDs. I have opened a request with Android Open Source project to change this. Interested users may visit https://issuetracker.google.com/issues/158468801 for updates.
So, this fork will be merged to upstream? Is there any news?
I created a PR back in October, it wasn’t merged.
That’s great! Any chance you could provide an apk? puppy eyes
I have posted a feature request for VLC: https://code.videolan.org/videolan/vlc-android/-/issues/1458
I try to build your fork but didn’t get any mbid submission, when i look the debug console in android studio I don’t see what data is send to the scrobbler. How can I debug this ?
If I can get it work I will submit another merge request since you close yours
Vanilla can read the mbid :
VanillaMusic: Broadcasting :94f809bd-21b0-4a17-8a4e-aa590e48075a
simple scrobble don’t receive the mbid :
2021-05-13 11:19:39.499 5379-27935/com.adam.aslfms D/Scrobbler: ListenBrainz: Track [mTrack=Tijuana, mArtist=Manu Chao, mAlbum=Próxima estación... Lado B, mAlbumArtist=, mDuration=185, mMbId=, mMusicAPI=MusicAPI [clashWithScrobbleDroid=0, enabled=1, id=1, msg=generic receiver, name=Vanilla Music, pkg=ch.blinkenlights.android.vanilla], mQueued=false, mRating=, mRowId=240, mSource=P, mTimePlayed=0, mTracknr=, mUnknownDuration=false, mWhen=1620897425, mWhenToCountTimeFrom=-1]
here is the code I used to have the log from vanilla :
Log.v("VanillaMusic", "Broadcasting :" + song.mbid)
I don’t know how to get the full string send to simple scrobbler from sendBroadcast(intent);
seem like vanilla user scroble droid format instead of the stock format to sendbroadcast
files :
- sls : https://github.com/simple-last-fm-scrobbler/sls/blob/04380f4ea9224ba12d4682b7605fa3b6f9c6cc77/app/src/main/java/com/adam/aslfms/receiver/ScrobbleDroidMusicReceiver.java
- vanilla : https://github.com/smoralis/vanilla/blob/df97baf01fcbbb6cb70d73786e99055a1fb2c0b7/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java
The best player I found for my Android was Sony Music Center (but it had several different names in the past).
How can I test if it sends the MBID to Simple Scrobbler (I know it used to scrobble with that app), if this test is still useful, here?
I made a fork of mpv-android
which supports complete scrobbling.
This fork supports scrobbling all the metadata available in the audio file including the MBIDs. However, it only works if
- You select your music through the File Picker (Legacy) option
- You go to
Settings>Advanced>Edit mpv.conf
, and add these lines
script=liblistenbrainz_mpv.so
script-opts=listenbrainz-user-token={YOUR_USER_TOKEN}
If you want better playback quality with high quality audio gear, and don’t care about a slight decrease in battery life, add this line
audio-swresample-o=resampler=soxr,precision=27
The source code for the backend can be found here
You can find an APK here!
It’s me again! I’ve made a plugin for PowerAmp that can scrobble complete and accurate information to MusicBrainz. It does this by reading the file you’re playing with it’s own tag reading library, and then scrobbling it itself.
- This plugin is battle-tested, and I’ve been using it for the entire year so far (see StratusFearMe21's Listens - ListenBrainz)
- This plugin also caches listens that couldn’t make it to ListenBrainz, so offline listens won’t be lost.
- This plugin always runs in the background to see what you’re listening to. If you want to make sure that it is running, enable the notifications permission in the app’s system settings page
- This plugin doesn’t launch at boot (I don’t know how to do that, sorry)
- This plugin assumes that nothing is playing in PowerAmp when the plugin launches, if something is, click the X button in the playing notification to stop PowerAmp temporarily.
- The source code I wrote uses a lot of dependencies on my local system, so I can’t post it to GitHub just yet. But I can assure you that my code only sends web-requests to ListenBrainz, is hand-written (no ChatGPT here), and is mostly written in Rust, so you shouldn’t have to worry about any load when this plugin is running.
- As a side-effect of this, the APK only works on arm chips, sorry Android emulators.
Note
This plugin will request access to your full filesystem, this is so that it can read your audio files directly from disk, without relying on PowerAmp’s lack of metadata. This app will also ask if it can run in the background, it needs to do this to monitor what PowerAmp is playing. As stated above, most of the code for this plugin is written in Rust, and it will spend most of it’s time doing literally nothing, don’t be concerned with battery usage here!
You can find an APK here
Can you get by with requesting only the READ_EXTERNAL_STORAGE
permission (or maybe even just READ_MEDIA_AUDIO
if you’re targeting API level 33)?
Right now, the app looks like it’s requesting MANAGE_EXTERNAL_STORAGE
and WRITE_EXTERNAL_STORAGE
. As I understand it, MANAGE_EXTERNAL_STORAGE
is only intended for e.g. file managers that really need full access, and requesting it will probably prevent the app from getting approved for the Play Store.
Well, I wasn’t really planning on putting this on the Play Store, but I can probably address your concern
Okay, that should do it. I updated the APK so that it only needs the READ_MEDIA_AUDIO
permission