Thanks for your proactive support.
Indeed looks much better now (no more last-track crash), but still track titles & album arts are not passed to Playback UI view: only track# is.
Queue shows the AlbumArt, but track titles do not match (but album name is fine).
I still noticed a crash for a disk that does not have musikBrainz infoSep 21 14:48:31 volumio volumio[17618]: CDIO: cdio
Sep 21 14:48:31 volumio volumio[17618]: info: {
Sep 21 14:48:31 volumio volumio[17618]: "loaded": false,
Sep 21 14:48:31 volumio volumio[17618]: "disc": null
Sep 21 14:48:31 volumio volumio[17618]: }
Sep 21 14:48:31 volumio volumio[17618]: /data/plugins/music_service/cdio_paranoia/index.js:194
Sep 21 14:48:31 volumio volumio[17618]: artist: disc.artist,
Sep 21 14:48:31 volumio volumio[17618]: ^
Sep 21 14:48:31 volumio volumio[17618]: TypeError: Cannot read property 'artist' of null
Sep 21 14:48:31 volumio volumio[17618]: at ControllerCdio.listRoot (/data/plugins/music_service/cdio_paranoia/index.js:194:29)
Sep 21 14:48:31 volumio volumio[17618]: at ControllerCdio.handleBrowseUri (/data/plugins/music_service/cdio_paranoia/index.js:124:29)
Sep 21 14:48:31 volumio volumio[17618]: at CoreCommandRouter.executeOnPlugin (/volumio/app/index.js:986:29)
Sep 21 14:48:31 volumio volumio[17618]: at CoreMusicLibrary.executeBrowseSource (/volumio/app/musiclibrary.js:327:43)
Sep 21 14:48:31 volumio volumio[17618]: at Socket.<anonymous> (/volumio/app/plugins/user_interface/websocket/index.js:579:32)
Sep 21 14:48:31 volumio volumio[17618]: at emitTwo (events.js:106:13)
Sep 21 14:48:31 volumio volumio[17618]: at Socket.emit (events.js:191:7)
Sep 21 14:48:31 volumio volumio[17618]: at /volumio/node_modules/socket.io/lib/socket.js:503:12
Sep 21 14:48:31 volumio volumio[17618]: at _combinedTickCallback (internal/process/next_tick.js:73:7)
Sep 21 14:48:31 volumio volumio[17618]: at process._tickCallback (internal/process/next_tick.js:104:9)
Sep 21 14:48:31 volumio systemd[1]: volumio.service: main process exited, code=exited, status=1/FAILURE
You may want to protect against that (for any type of missing info maybe, setting any field to sth “empty” by default), and fallback to just track#s if no info is available (including cd-text from cd-info)
Actually I re-installed from scratch on a new image, to double-check install problems I initially had which lead to Volumio crash at first preference panel setup: I confirm it’s still there (though I did not report initially).
This issue comes from the failed linking command to libdiscid.so due to a typo in install.sh: it should be:
sudo ln -s /usr/lib/arm-linux-gnueabihf/libdiscid.so.0 /usr/lib/arm-linux-gnueabihf/libdiscid.so
(note the missing hf in arm-linux-gnueabihf in the second argument path).
Interestingly I could play CD without altering original mpd.conf / mpd.conf.tmpl files: indeed by default all input plugins are enabled, so we can run out-off standard mpd.conf.
cdparanoia does NOT need to be installed either, as only libcdio13 is needed and is already part of base install (mpd dependency).
Install procedure is then simpler, since Volumio’s built-in mpd has been compiled with all necessary input plugins support: only eject and MusicBrainz stuff are needed dependencies (libdiscid; note, it seems libmusicbrainz may be a preferred method to extract data looking forward?)
I also noticed a promise error in onStop routine L67: it should do:
return defer.promise;
(did not check if there are other similar mismatches. getTracksFromMusicBrainz(drive) may not return promises consistently for instance).
Thanks, things like these will be easier to fix with PRs.
Other issues:
Ejecting disk without stopping playback lead to some sound issues as mpd seems to keep playing buffer remaings…You may want to manage such kind of rude exit.
Pause/Stop do not work as expected: once paused, playback can not be resumed.
Just cosmetic stuff: wouldn’t a name like “CD Player” plugin or “AudioCD” plugin be easier to understand for users, rather than reference to a library name?
Would you consider adding ripping capability (with abcde for instance) into same plugin, or rather leave that for other plugin?
EDIT: added notes on simplified install