New Volumio Spotify Plugin Open Beta-Testing

Raspberry pi 3b+ 1gb.
System version: 3.251
DAC: WiFi to Pi + digiOne transport to Rotel A11 (Dual Wolfson DACs) via RCA
Account: Spotify Premium

Everything appears to be working correct in terms of sounds, accessibility, control, i.e., tracks play & shuffle, repeat, etc. as previously.

Confirm bitrate information not showing. But apart from that seems to be good to use.

Found one, which happens sometimes.

open a playlist, press the top play,


manual select another song from the list. Spotify doesn’t respond anymore. Seems only happening when Spotify doesn’t start with the 1st track but with the 2nd in the list. (see generated errors below)

(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 156)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 157)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 158)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 159)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 160)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 161)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 162)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 163)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 164)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 165)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 166)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 167)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 168)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 169)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 170)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 171)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 172)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 173)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 174)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 175)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 176)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 177)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 178)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 179)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 180)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 181)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 182)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 183)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 184)
(node:947) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 185
info: CoreStateMachine::play index undefined
info: CoreStateMachine::setConsumeUpdateService undefined
info: CorePlayQueue::getTrack 0
info: CoreStateMachine::startPlaybackTimer
info: CorePlayQueue::getTrack 0
info: [1654855477127] ControllerSpotify::clearAddPlayTrack
info: Setting this device active
[Vollibrespot] : Fetching autoplay context uri
[Vollibrespot] : Event: TrackChanged { old_track_id: SpotifyId { id: 169131416778762624668144728879161915021, audio_type: Track }, track_id: SpotifyId { id: 169131416778762624668144728879161915021, audio_type: Track } }
[Vollibrespot] : error 400 for uri hm://autoplay-enabled/query?uri=
[Vollibrespot] : AutoplayError: MercuryError
[Vollibrespot] : Fetching autoplay context uri
[Vollibrespot] : Event: PlaybackStopped { track_id: SpotifyId { id: 169131416778762624668144728879161915021, audio_type: Track } }
[Vollibrespot] : Event: TrackChanged { old_track_id: SpotifyId { id: 169131416778762624668144728879161915021, audio_type: Track }, track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[SpotifyConnect]  Cash In Cash Out
[SpotifyConnect]  Device palyback is inactive
info: [1654855477510] ControllerSpotify::pushState
info: CoreCommandRouter::servicePushState
info: CoreStateMachine::pushState
info: CorePlayQueue::getTrack 0
info: CoreCommandRouter::executeOnPlugin: volumiodiscovery , saveDeviceInfo
info: CoreCommandRouter::volumioPushState
info: CorePlayQueue::getTrack 0


info: CoreStateMachine::syncState   stateService stop
info: CoreStateMachine::syncState   currentStatus stop
info: CoreStateMachine::pushState
info: CorePlayQueue::getTrack 0
info: CoreCommandRouter::volumioPushState
info: No code
info: CoreStateMachine::pushState
info: CorePlayQueue::getTrack 0
info: CoreCommandRouter::volumioPushState
[Vollibrespot] : error 400 for uri hm://autoplay-enabled/query?uri=
[Vollibrespot] : AutoplayError: MercuryError
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Event: PlaybackLoading { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: Next { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: TrackChanged { old_track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track }, track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[SpotifyConnect]  Yet To Come
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Event: PlaybackLoading { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: Next { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: TrackChanged { old_track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track }, track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[SpotifyConnect]  Yet To Come
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Event: PlaybackLoading { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: Next { track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[Vollibrespot] : Event: TrackChanged { old_track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track }, track_id: SpotifyId { id: 44297638265135597052020947814365872690, audio_type: Track } }
[SpotifyConnect]  Yet To Come
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load 
Skipping to next track
[Vollibrespot] : Loading  with Spotify URI 
[Vollibrespot] :  is not available
[Vollibrespot] : Unable to load ```

Thanks for all time and effort you have put into this.

Overall working and sounding great.

Running volumio 3.251 (free) on rpi3 + Iqaudio DAC + with wireless connection. Spotify Family Account

Test results

  1. Create playlist from Spotify. Play a few songs. Pause. Add a few additional songs to the play list from my NAS rather than spotify. Move the NAS song up the playlist to be the next song to play. Start playing the spotify track again.

At end of the song, it doesn’t proceed to the next (non spotify song on the list)

NAS is rpi2 running OpenMediaVault with mp3 file on ext4 filesystem.

Log file is here

http://logs.volumio.org/volumio/rxWUld7.html

  1. Volume of a song in spotify is much lower, compared to the same track played from my NAS. Enough of a difference that if your playlist has a mixture of both then the volume is uncomfortably higher when you get to a track from your NAS.

http://logs.volumio.org/volumio/7Xc0wDd.html

  1. Played a track from my NAS. When the track finished it replayed, rather than moving onto the next track in the playlist which was a spotify track

http://logs.volumio.org/volumio/kTFxOhY.html

Thank you for the great (and fast) work.

I also can confirm the queue issue.
The sound quality is perfect.

If i play track 9 music is stopped after the track has finished. Clicking next continues with track 4 and not with track 10 as expected.

br
Josef

Running volumio 3.251 (free) on rpi3 + Iqaudio DAC + with wireless connection. Spotify Family Account

Verified as per other testers, that the playlist stops at track 10. Here is the log file

http://logs.volumio.org/volumio/qXULAsP.html

Edit

It’s not track 10. It’s random. Cleared the queue completely and created a new queue with 5 tracks. It stopped after each track and I had to manually select the next one.

Edit 2

Definite not random - not even random numbers are random. The issue occurs after you manually select a track from the playlist, it doesn’t automatically move to the next track from thereon.

http://logs.volumio.org/volumio/OlFywi7.html

Also got interesting behaviour where after it played the last track in the queue, the web interface looked like it replaying the last song (had a countdown) but wasn’t actually playing the track again. (You might struggle to find it in the log as I didn’t get a refreshed copy of the after it happened - I will post a new log if it happens again.)

2 Likes

Works well. No issues. On 3.301. X86

Hi!

For me, it stopps after every song!

OS info
Version of Volumio: 3.251
Hostname: musicsewing
Kernel: 5.10.92-v7l+
Governor: performance
Uptime: 0 days, 22 Hrs, 55 Minutes, 29 Seconds

Audio info
Hw audio configured: HiFiBerry DAC Plus
Mixer type: Hardware
Number of channels: 2
Supported sample rate: 44100 48000 88200 96000 176400 192000

Board info
Manufacturer: Raspberry Pi Foundation
Model: Raspberry Pi 4 Model B Rev 1.5
Version: b03115
Firmware Version: Jan 20 2022 13:56:48 - bd88f66f8952d34e4e0613a85c7a6d3da49e13e2

CPU info
Brand: BCM2711
Speed: 1.5Ghz
Number of cores: 4
Physical cores: 4
Average load: 2%
Temperature: 57°C

Memory info
Memory: 1962272 Ko
Free: 1115536 Ko
Used: 846736 Ko

Storage info
INTERNAL storage - Size: 12163Mo
Used: 702Mo
Available for storage: 10830Mo (89%)
1 Like
  • Model: Raspberry Pi 4 Model B Rev 1.4

  • HiFiBerry DAC2 Pro via wifi

  • Volumio Premium 3.251

  • When playing a playlist or an album from within the app, it does not automatically play the next song (as reported above).

  • When playing a playlist or an album in “Spotify Connect” mode from my phone to Volumio, it does automatically play the next song when playing

  • Otherwise sounds and looks great - thank you for your amazing, super-fast work!

When I send my playlist to spotify, it plays each song without problem, when I start to manually move from song to song there is that when I finish that track the playback stops and does not continue. Volume is fine

Model: Raspberry Pi 3
Volumio: 3.198 (Free)
Wired Connection
Spotify Familiar Account

My log:

Volumio for Raspberry Pi (5.10.92+ armv6l) Version 3.2.51

-Soptify login OK
-Can select spotify playlist and add it to queue
-Play/pause status not change when click. Song time never updated. If refresh web browser shows the new time but not updated it.
-After every song stops playing

Same over here.
I can access Spotify.
Great job

Hence playback stops after each song when using the Volumio web User interface
When using the Spotify app playback works great.

1 Like

• Raspberry Pi 4 Model B
• Rev 1.4
• ChipDip DAC (DSP Machine 1)
• wifi
• Volumio Premium 3.251, Spotify Premium
• When playing an album from within the app, it does not automatically play the next song.
• When playing a playlist, everything is fine. Continuous playback of all songs.
• Can’t open… Go to Artist and Go to Album
• Frequency and bit rate not displayed
Otherwise sounds and looks great!
Thank you for your amazing work!
Just in time!

• Raspberry Pi zero W
• Raspiaudio DAC
• wifi
• Volumio Premium 3.251, Spotify Premium
• When playing an album from within the app, it does not automatically play the next song.
• When playing a playlist, the very first time everything is fine. Continuous playback of all songs. After the first time it now won’t continuously play if playing a playlist directly. The song ends but the play timer keeps incrementing.
• Can’t open… Go to Artist and Go to Album
• Frequency and bit rate not displayed

Thank you for all the work!

Edit: If I touch anything after I play a playlist it stops going to the next song automatically, a workaround is to turn off my DAC save, reboot, turn on DAC save reboot. Then I can play a playlist again, but just once.

Hey Weaten, I don’t have foreign language on my system. However, my PeppyMeter doesn’t work (no movement on needles). How did you get it to work? I changed the output_name = peppyalsa on both files, stop.conf.tmpl and sopped.conf.

Before installing Spotify disable peppymeter plugin and enable again after installation. It was mentioned in some post.

Spotify doesn’t see Volumio with this plugin as a play target. It only starts seeing it when I play Spotify from inside Volumio. I cannot start playback to Volumio from Spotify app on my phone or computer.

I also have to untick “show local devices only” in the Spotify app which is weird as there is no network weirdness, it’s all the same wifi LAN, no subnets or things like that.

Also Volumio identifies as a projector in the app.

This was not an issue with the old plug-ins, back when the authentication worked.

Volumio 3.251
Rpi 2
Spotify Premium

1 Like

I am not seeing a way to save an artist after you search for one to My Top Artists? Is this something not yet available in this version of the plug? Other than that so far so good, great job on pulling this together.

Spotify Premium

  • Version of Volumio: 3.251
  • Model: Raspberry Pi 4 Model B Rev 1.2
  • Hw audio configured: HiFiBerry DAC2 HD
    Using Wireless connection

haven’t changed anything. just a default install of peppy_meter and Spotify

1 Like

Even disabled, the plugin is still updated when alsa output is changed (ex enabling FusionDsp).
That was already the case with Spotify connect 2.
probably because this.getAdditionalConf(‘audio_interface’, ‘alsa_controller’, ‘outputdevice’);
is still here.

Works fine here
Raspberry PI 3B
Volume 3,251
Spotify Premium