plietar / librespot

Open Source Spotify client library
MIT License
1.13k stars 187 forks source link

How to select a device? #251

Closed mrkskwsnck closed 6 years ago

mrkskwsnck commented 6 years ago

I am setting up a Raspberry Pi Zero W with HiFiBerry DAC+ Zero. Librespot is already compiled with portaudio as backend (took me about three hours). Running librespot also is getting discovered by Spotify Desktop and iOS. But no sound is playing at all, because I don't know how to select HiFiBerry as output device for librespot.

By selecting --device hw:1 librespot is just panicking:

$ RUST_BACKTRACE=full target/release/librespot --cache cache/ --name RaspberryPi --bitrate 320 --backend portaudio --device hw:1
INFO:librespot: librespot ddfc28f (2017-08-04). Built on 2017-09-21. Build ID: rJJCEoXq
INFO:librespot_core::session: Connecting to AP "lon3-accesspoint-a65.ap.spotify.com:4070"
INFO:librespot_core::session: Authenticated as "example" !
INFO:librespot_core::session: Country: "DE"
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
thread '<unnamed>' panicked at 'Could not find device', /checkout/src/libcore/option.rs:819:4
stack backtrace:
   0:   0x81c3c3 - std::sys::imp::backtrace::tracing::imp::unwind_backtrace::h4a3f30dd20167fa4
                       at /checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1:   0x81807b - std::sys_common::backtrace::_print::h4a7fbe3a5f75cfb4
                       at /checkout/src/libstd/sys_common/backtrace.rs:71
   2:   0x820047 - std::panicking::default_hook::{{closure}}::h9164f75a40b058a4
                       at /checkout/src/libstd/sys_common/backtrace.rs:60
                       at /checkout/src/libstd/panicking.rs:380
   3:   0x81fd37 - std::panicking::default_hook::he597c309155ca4e4
                       at /checkout/src/libstd/panicking.rs:396
   4:   0x820597 - std::panicking::rust_panic_with_hook::h9ae6e19961ee0965
                       at /checkout/src/libstd/panicking.rs:611
   5:   0x8203f3 - std::panicking::begin_panic_new::h3c26628f57b502d0
                       at /checkout/src/libstd/panicking.rs:553
   6:   0x820387 - std::panicking::begin_panic_fmt::hbf00541eb92aa1ec
                       at /checkout/src/libstd/panicking.rs:521
   7:   0x820323 - rust_begin_unwind
                       at /checkout/src/libstd/panicking.rs:497
   8:   0x853e53 - core::panicking::panic_fmt::h955f7c5ec61a82d4
                       at /checkout/src/libcore/panicking.rs:92
   9:   0x853eb3 - core::option::expect_failed::h8803036c181026b6
                       at /checkout/src/libcore/option.rs:819
  10:   0x503b3f - <librespot::audio_backend::portaudio::PortAudioSink<'a> as librespot::audio_backend::Open>::open::hb41529db86e8fccf
  11:   0x503587 - librespot::audio_backend::mk_sink::ha5c48b3fa5b7ca65
  12:   0x4aa73f - std::sys_common::backtrace::__rust_begin_short_backtrace::h5b996a4fecfb23c6
  13:   0x4aa8f7 - std::panicking::try::do_call::ha94d1225f4a3bfc7
  14:   0x8274c3 - __rust_maybe_catch_panic
                       at /checkout/src/libpanic_unwind/lib.rs:98
  15:   0x4b827b - <F as alloc::boxed::FnBox<A>>::call_box::h7f6d04f3119db696
  16:   0x81f32f - std::sys::imp::thread::Thread::new::thread_start::hefdfded04cf21299
                       at /checkout/src/liballoc/boxed.rs:661
                       at /checkout/src/libstd/sys_common/thread.rs:21
                       at /checkout/src/libstd/sys/unix/thread.rs:84

The devices listed by librespot:

$ target/release/librespot --cache cache/ --name RaspberryPi portaudio --device ?
INFO:librespot: librespot ddfc28f (2017-08-04). Built on 2017-09-21. Build ID: rJJCEoXq
INFO:librespot_core::session: Connecting to AP "lon6-accesspoint-a16.ap.spotify.com:4070"
INFO:librespot_core::session: Authenticated as "example" !
INFO:librespot_core::session: Country: "DE"
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
- bcm2835 ALSA: - (hw:0,0)
- bcm2835 ALSA: IEC958/HDMI (hw:0,1)
- snd_rpi_hifiberry_dac: - (hw:1,0)
- sysdefault
- default (default)
- dmix

The devices listed from /proc/asound/cards:

$ cat /proc/asound/cards 
 0 [ALSA           ]: bcm2835 - bcm2835 ALSA
                      bcm2835 ALSA
 1 [sndrpihifiberry]: HifiberryDac - snd_rpi_hifiberry_dac
                      snd_rpi_hifiberry_dac

The devices listed by aplay:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
mrkskwsnck commented 6 years ago

Now I got it. I was trying to get librespot to work with the wrong audio backend. So I needed to compile it again with the correct features: cargo build --release --features alsa-backend