aome510 / spotify-player

A Spotify player in the terminal with full feature parity
MIT License
2.88k stars 129 forks source link

Add option to specify audio playback device #444

Open aurismat opened 2 months ago

aurismat commented 2 months ago

Is your feature already implemented in the latest master? Not that I am aware of; please correct me if that's the case.

Is your feature request related to a problem? Please describe. I've been using spotify-player for a couple weeks now and it has been excellent for daily use, except for one issue that I have run into on my Windows system - I cannot specify the playback device to output to my virtual audio cables(which I use for leveling audio for specific app groups: music, games, other programs etc).

librespot, which from what I understand spotify-player depends on as a library, has this option built-in (-d flag), and I think it'd be useful to implement something to that extent to spotify-player.

I have attempted to specify the audio device in the config file via device = "Playback device's name", but it had no effect(from what I glanced over the source, only seems to parse options listed in docs/config.md#device-configurations?)

Describe the solution you'd like I'd like to see one of these implementations added:

Describe alternatives you've considered My current botched solution to this is to launch librespot in the background with my specified audio device and then point spotify-player's config to that, and kill librespot when I'm done with spotify_player but IMO that is not exactly an elegant solution when spotify-player already has librespot as a library, hence me creating this FR. Below is the script that I use to do this, it is a Powershell script(and a very crude one), but it does the job for my use case.

librespot -n "librespot" -F computer --device "Virtual audio cable device" -q -u <redacted> -p <redacted> &
$job_id = Get-Job | Where-Object { $_.Command -match "librespot" } | Select-Object -ExpandProperty Id
spotify_player
Remove-Job $job_id -Force

Additional context I am not familiar with Rust myself, and I am aware that Windows support is probably low-priority, but I hope this FR will be considered. Thank you for your great work on this project!

LegionDzn commented 2 months ago

This can be done on windows. See: https://winaero.com/audio-output-device-apps-individually-windows-10/

aurismat commented 2 months ago

Normally, under Windows it can be done and I'm well aware of it; except it doesn't do anything at all in the case of spotify-player, and I have verified this with OBS by capturing that specific virtual audio cable's output between what spotify-player does on it's own vs what is supposed to happen by utilizing librespot and pointing it to that audio device.

Current behaviour, where spotify-player does not remap to the virtual cable image

What it should be doing, portrayed by having a librespot open and pointed to VB-Audio's Cable C Input. Note that Windows 10's audio device preferences has no effect over this. image