音频后端【免费下载链接】spotifydA spotify daemon项目地址https://gitcode.com/gh_mirrors/sp/spotifyd点击查看免费下载spotifyd是一款以 UNIX 守护进程形式运行的开源 Spotify 客户端需要 Spotify Premium 账户它通过 Spotify Connect 协议在官方客户端中呈现为一个可控的播放设备。本指南以配置章节docs/src/configuration/README.md为骨架完整讲解配置文件与命令行参数的对应关系、认证LAN 发现与 OAuth 登录、音频后端与设备选择、缓存与 MPRIS 等全部配置项并结合 src/config.rs 等源码揭示默认值与参数解析原理。读完本文你将能够从零编写一份可运行的spotifyd.conf并根据自己的网络、音频和桌面环境精准调优。无需配置也能运行但配置让它更好用spotifyd的默认行为非常克制不携带任何配置运行时它会为绝大部分字段采用默认值此时你依然可以在同一局域网内通过官方 Spotify 客户端发现并控制这台设备。根据 src/config.rs 中的实现默认值包括音频后端与设备由系统默认提供Linux 上通常为 ALSA 的默认设备码率160kbit/sBitrate::Bitrate160音量控制方式softvol软件音量初始音量90范围 0–100超出会被警告并回退到默认值设备名Spotifyd主机名主机名来自gethostname见get_internal_config设备类型speaker缓存目录由系统推断Linux 上对应$XDG_CACHE_HOME下的 spotifyd 目录发现服务开启discovery !disable_discovery.unwrap_or(false)。不过纯默认配置只适用于最简单的局域网发现 播放场景。一旦你涉及固定设备名、指定输出声卡、固定码率、OAuth 单用户登录、缓存管理或 MPRIS 桌面控制就需要显式配置。spotifyd的所有配置项都有两种写法直接作为命令行参数传入适合临时验证或写入配置文件适合永久生效。本系列文档统一以--cli-arg表示命令行形式、config_value表示配置文件字段例如码率既可以写--bitrate 320也可以在配置文件中写bitrate 320。配置文件位置与加载顺序spotifyd启动时会按以下位置查找配置文件/etc/spotifyd.conf系统级$XDG_CONFIG_HOME/spotifyd/spotifyd.conf原文档写作$XDG_CONFIG_PATH未设置上述环境变量时的回退路径~/.config/spotifyd/spotifyd.conf。从源码 get_config_file 可以看到实际查找逻辑是先通过directories::ProjectDirs得到用户配置目录即第 2/3 条路径若该文件存在则优先使用否则回退到/etc/spotifyd.conf两者都不存在时打印 No config file specified. Running with default values 并继续运行。也就是说用户目录下的配置优先于系统级配置。如果你的配置文件放在其他位置可以用全局参数--config-path path-to-your-config显式指定这个参数在 CliConfig 中被定义为global true意味着它可以出现在命令行的任意位置。除了配置文件本身以下几个全局启动参数也值得先了解详见 CliConfig-v/--verbose日志级别计数参数0为 Info、1为 Debug、2及以上为 Trace见 src/main.rs--no-daemon以前台方式运行不脱离终端排错时几乎必用--pid PATH仅 Unix指定 PID 文件路径供进程管理使用子命令authenticate别名auth进入 OAuth 登录流程。一份完整的示例配置仓库自带的 contrib/spotifyd.conf 是官方维护的文档化示例配置几乎覆盖了全部字段且被单元测试test_example_configsrc/config.rs验证全部注释掉时为合法空配置取消注释后也必须是可被正确解析的配置。下面按原文分组完整列出并逐项注释[global] #---------# # GENERAL # #---------# # 在官方客户端 Connect 标签页中显示的名称 #device_name device_name_in_spotify_connect # 在 Spotify 客户端中显示的设备类型。 # 可选unknown, computer, tablet, smartphone, speaker, t_v, # a_v_r (Audio/Video Receiver), s_t_b (Set-Top Box), audio_dongle。 # 完整枚举见源码 DeviceType还包括 game_console、cast_audio、 # cast_video、automobile、smartwatch、chromebook、car_thing 等。 #device_type speaker # 用于存放凭据与音频缓存的目录。 # 默认推断一个合理的缓存目录Linux 上为 $XDG_CACHE_HOME。 # # 注意该路径不会被展开$HOME 或 ~ 这类环境变量/占位符不生效 #cache_path /full/path/to/cache/directory # 若为 true则不缓存音频数据缓存目录仅用于存放凭据。 #no_audio_cache true # 缓存目录的最大字节数示例值约 1GB #max_cache_size 1000000000 # 若为 truespotifyd 尝试绑定 dbus默认会话总线并暴露 MPRIS 控制接口。 # 无图形会话的无头环境下应设为 false 以避免报错若仍需 MPRIS # 请看下面的 dbus_type 选项。 #use_mpris true # 绑定 MPRIS 接口所使用的总线。 # 可选值session会话总线、system系统总线。 # 无图形会话的无头环境可以使用系统总线但可能需要添加相应 # 的 D-Bus 策略以允许 spotifyd 拥有该名称。 #dbus_type session #-----------# # DISCOVERY # #-----------# # 若为 true则关闭 zeroconf 发现。 # 当你想运行单用户实例时很有用。 #disable_discovery false # spotifyd 对外提供服务的 TCP 端口。 # 未设置时使用大于 1024 的随机端口。 # 若要通过 mDNS 在局域网内被发现需要放行防火墙中的 # mDNS 端口5353 UDP以及该随机/固定 zeroconf TCP 端口。 #zeroconf_port 1234 #-------# # AUDIO # #-------# # 播放音频所用的后端。运行 spotifyd --help 可查看可用列表。 # 编译期根据 feature 决定例如 macOS 常使用 portaudio。 #backend alsa # 音频输出设备ALSA 设备名或 pipe 文件。 # 列出合法设备可运行 aplay -L。 #device default # PCM 采样格式。可选 F32, S32, S24, S24_3, S16。 # 若遇到以下错误可尝试修改此值 # Alsa error PCM open ALSA function snd_pcm_hw_params_set_format # failed with error EINVAL: Invalid argument #audio_format S16 # 音量控制器各实现对手动调音量的处理不同。 # 可选值见 spotifyd --helpsoftvol / alsa / alsa_linear / none。 #volume_controller softvol # ! 仅 ALSA 后端相关 ! # ALSA 控制设备默认与 device 同名。 #control default # ! 仅 ALSA 后端相关 ! # spotifyd 使用的 ALSA mixer。 #mixer PCM # 音频码率96、160 或 320 kbit/s #bitrate 160 # 启动时音量0 到 100 之间 #initial_volume 90 # 若为 true开启歌曲之间的音量归一化。 #volume_normalisation true # 应用于每首歌曲的归一化前置增益dB。 #normalisation_pregain -10 #-------# # OTHER # #-------# # 音乐播放结束后基于之前的曲目开始播放相似歌曲。 # 默认情况下 spotifyd 从用户设置推断该值。 #autoplay true # 每首歌曲切换后在 shell 中执行的命令。 #on_song_change_hook echo \hook executed on $PLAYER_EVENT\ # spotifyd 连接 Spotify 使用的代理。 #proxy http://proxy.example.org:8080其中注释里的#-------ä是原文自带的笔误分隔线实际不影响解析。配置文件采用 TOML 格式顶层使用[global]或[spotifyd]段包裹全部键值。[global]与[spotifyd]两个段的作用虽然示例只用了[global]但 FileConfig 实际允许两种段名。当两者同时存在时spotifyd段的值会覆盖global段merge_with中采用自身值优先缺省时取另一段的合并策略见 merge_with。该行为有对应单元测试test_section_mergingsrc/config.rs验证spotifyd段与global段分别设置的字段合并结果以spotifyd段为准。段名可能来源于旧版本的习惯用法统一使用[global]即可。未知键与废弃键的处理配置解析使用了serde_ignored未知键不会被直接报错而是给出警告 Unknown key ... will be ignored。此外get_known_config_problemsrc/config.rs针对两类已知问题给出更具体的提示编译特性缺失当构建未启用alsa_backend时control、mixer会被忽略并提示 feature alsa_backend is missing in this build未启用dbus_mpris时use_mpris、dbus_type同理用户名/密码认证username、password、username_cmd、password_cmd、use_keyring这些历史字段会被忽略并提示 authentication with username and password is no longer supported by Spotify. Please usespotifyd authenticateinstead。这是对老教程中账号密码登录方式的重要纠偏——如今请统一使用 OAuth 登录。认证LAN 发现与 OAuth 单用户登录spotifyd支持两种认证方式详见 docs/src/configuration/auth.md。方式一局域网发现Discovery on LAN默认启用默认情况下spotifyd会在本地网络中以 Spotify Connect 设备身份做 mDNS 广播出现在官方客户端的可用设备列表中。在官方客户端里选中它即可听到声音从spotifyd设备播出。要让发现正常工作需要确保防火墙没有阻断以下两个端口5353 UDPmDNS 服务通告端口一个基于 TCP 的 zeroconf 端口默认随机选择也可以固定下来命令行--zeroconf-port/ 配置文件zeroconf_port。如果你打算使用下面的 OAuth 方式或希望它仅作为单用户实例可以关闭发现命令行--disable-discovery/ 配置文件disable_discovery true。注意默认情况下最后一次活跃的会话会被记住服务重启后会自动重连到该会话。方式二手动登录OAuth当发现方式在你的场景下不可行或者你更喜欢单用户实例时可以手动登录自己的 Spotify 账户此后spotifyd将默认连接到该账户。注意登录流程需要网页浏览器因此不建议在无头系统上直接执行。变通做法在一台有浏览器的机器上完成登录再把凭据文件复制到无头系统。凭据文件位置为cache_path/oauth/credentials.json。源码中get_cache(true)OAuth 分支正是把凭据目录设为cache_path下的oauth子目录src/config.rs。开始登录前请确认之后不会更改cache_path因为登录数据将存放在该位置。随后运行spotifyd authenticate子命令的可用选项见spotifyd auth --helpAuthenticate子命令支持--oauth-port默认端口8000见 src/config.rs。流程如下对应 src/oauth.rs 的实现spotifyd会在本机启动 OAuth 服务回调地址为http://127.0.0.1:oauth_port/login并自动打开浏览器在页面中登录你的 Spotify 账户并确认连接成功后浏览器会显示 Go back to your terminal :)此时可以关闭标签页回到终端。之后以前台模式运行验证登录是否生效spotifyd --no-daemon正常输出如下Loading config from ... [...] Login via OAuth as user your username. [...] Authenticated as your username !OAuth 流程申请了包括streaming、app-remote-control、playlist-read、user-library-*等在内的一长串 scope完整列表见 src/oauth.rs 的OAUTH_SCOPES登录成功后这些能力随会话生效。注意即使通过 OAuth 登录发现默认仍处于开启状态任何新的局域网连接都会中断当前会话。不需要时请用--disable-discovery/disable_discovery true关闭。音频配置后端、设备、码率与音量音频相关配置详见 docs/src/configuration/audio.md。在多数环境尤其 Linux 桌面上音频是开箱即用的Just Working™以下配置仅在特殊需求或故障排查时需要调整。后端-b/--backend不同平台/构建可用的音频后端列表通过spotifyd --help查看。源码中后端列表取自 librespot 的audio_backend::BACKENDSpossible_backends因此可用项由编译特性决定——例如 macOS 的 Homebrew 构建通常使用portaudioLinux 上常用alsa。配置文件中写入不存在的后端名会在解析时直接报错deserialize_backend会提示合法列表见 src/config.rs。设备选择--device默认输出设备不一定符合预期可以用--device/device指定具体设备。取值含义取决于后端ALSA 后端运行aplay -L列出可用设备名PulseAudio 后端运行pactl list short sinks列出可用名称。码率-B/--bitrate通过调整码率可在降低带宽占用与提高音质之间取舍。可选值仅96、160、320kbit/s默认160。解析器对非法值会拒绝Bitrate的反序列化只接受 96/160/320见 src/config.rsCLI 端则由PossibleValuesParser校验。音量控制器--volume-controller大多数情况下保持默认softvol软件音量即可。可选行为softvol默认软件音量对任何后端都有效alsa/alsa_linear让spotifyd的音量与输出设备的硬件音量同步。这两种模式下通常还要配合mixer指定要改变音量的设备none禁止用户调节音量。枚举定义见 VolumeController其中alsa/alsa_linear仅在启用alsa_backend特性时编译。alsa与alsa_linear对音量增减的映射曲线不同需要具体试听选择。其他音频选项spotifyd --help中还有更多音频相关参数这里结合 contrib/spotifyd.conf 与 src/config.rs 归纳几个高频项audio_formatPCM 采样格式可选F32、S32、S24、S24_3、S16默认S16。当遇到Alsa error PCM open ... EINVAL: Invalid argument类错误时把它改成S16往往能解决control/mixer仅 ALSA 后端相关control为 ALSA 控制设备默认与device同名mixer为使用的 mixer如PCMinitial_volume启动音量0–100默认 90。源码同时允许数字或字符串数字字符串形式会打印 should be a number rather than a string 的弃用警告见 number_or_string并校验范围volume_normalisation歌曲间音量归一化开关默认关闭normalisation_pregain归一化前置增益dB默认0.0。其他常用设置外观、缓存、MPRIS、钩子与代理详见 docs/src/configuration/other.md。设备外观用--device-name/device_name和--device-type/device_type自定义设备在客户端中的展示名称与类型。device_type的取值在示例配置中给出常用项unknown、computer、tablet、smartphone、speaker、t_v、a_v_r、s_t_b、audio_dongle完整枚举含game_console、cast_audio、automobile、smartwatch、chromebook等见 DeviceType。注意默认值设备名Spotifydhostname类型speaker。音频缓存设置--cache-path/cache_path即可启用音频数据缓存并用--max-cache-size/max_cache_size字节限制其大小no_audio_cache true则完全禁用音频缓存缓存目录仅用于凭据。注意cache_path不会被展开$HOME、~等占位符不生效必须写绝对路径。缓存路径同时是 OAuth 凭据oauth/credentials.json与 zeroconf 会话凭据zeroconf/子目录的存放位置见 get_cache。MPRIS 桌面集成在 Linux 桌面系统上构建启用了dbus_mpris特性时启用--use-mpris/use_mpris后桌面环境或playerctl等工具可以展示spotifyd的播放信息并控制它。相关配套项dbus_type绑定总线session默认适合桌面会话或system无图形会话的无头环境可用但可能需要额外 D-Bus 策略无头环境且不打算用 MPRIS 时建议use_mpris false以避免报错。MPRIS 接口的完整能力见 docs/src/advanced/mpris.md。另外use_mpris在源码中的默认取值为trueuse_mpris.unwrap_or(true)见 src/main_loop.rs无头部署请显式关闭。播放事件钩子on_song_change_hookon_song_change_hookCLI 别名--onevent指定一个在歌曲切换时执行的命令/脚本事件详情以环境变量形式注入如PLAYER_EVENT、TRACK_ID。主循环中每次收到 player 事件都会通过spawn_program_on_event在用户的 shell 中执行该命令src/main_loop.rs。完整的事件列表与脚本示例如 dunst 通知参见 docs/src/advanced/hooks.md。代理与其他proxyspotifyd连接 Spotify 服务器使用的 HTTP 代理http://URL。源码中仅接受 HTTP 代理其他 scheme 会打印 Only HTTP proxies are supported!见 proxy_urlautoplay播放结束后基于历史曲目自动播放相似歌曲默认从 Spotify 用户设置推断可显式覆盖。配置加载的源码级工作流把前面的内容串起来spotifyd的启动配置流程如下对应 src/main.rsCliConfig::parse()解析命令行参数clapload_config_file_values()读取配置文件解析 TOML → 合并[global]/[spotifyd]段 → 与命令行参数合并命令行优先级高于配置文件因为配置值先被读入随后merge_with以已有的 CLI 值为准get_internal_config()把合并结果转换为内部配置结构套用各项默认值、换算initial_volume0–100 映射到 0–65535 的 u16 音量空间、生成device_id对设备名做 SHA-1、选择 ditherer 等get_internal_config若未指定--no-daemon则后台化运行OAuth 子命令则直接进入登录流程。换言之配置的优先级从高到低为命令行参数 配置文件spotifyd段 global段 内置默认值。这套同一字段两种写法、来源可合并的设计让临时调试CLI与长期部署配置文件都能各得其所。常见部署提示systemd 部署仓库提供 contrib/spotifyd.service 作为 systemd 服务单元参考可结合 docs/src/installation/README.md 使用防火墙使用 LAN 发现时务必放行5353/UDPmDNS与 zeroconf TCP 端口随机或zeroconf_port指定的固定值无头环境关掉use_mpris或改用dbus_type systemOAuth 登录可先在有浏览器的机器上完成再复制oauth/credentials.json老配置迁移若配置里还有username/password它们会被忽略并提示改用spotifyd authenticate请及时迁移到 OAuth排查问题使用spotifyd --no-daemon -v前台运行并开启 Debug 日志能看到配置文件加载路径与连接细节。以上配置体系覆盖了从局域网即插即用到单用户 OAuth 硬件音量同步 桌面 MPRIS 控制的全部常见场景配合 contrib/spotifyd.conf 这份官方示例足以支撑一套稳定、可控的常驻 Spotify 播放服务。赞分享音频后端【免费下载链接】spotifydA spotify daemon项目地址https://gitcode.com/gh_mirrors/sp/spotifyd点击查看免费下载相关推荐AMD ROCm 5分钟上手新手如何搭建GPU计算环境并跑通第一个程序AMD ROCm 5分钟上手新手如何搭建GPU计算环境并跑通第一个程序 想用 GPU 加速一个耗时任务却卡在了环境配置第一步驱动、工具链、验证哪一步都有开发工具高性能计算文档rclone Jottacloud 后端完全指南认证模式、Remote 配置与高级选项详解rclone Jottacloud 后端完全指南认证模式、Remote 配置与高级选项详解 Jottacloud 是来自挪威的云存储服务rclone 通过CLI数据同步对象存储如何快速部署Hydra企业级认证服务从零到一的完整指南如何快速部署Hydra企业级认证服务从零到一的完整指南 Hydra是一款OpenID认证的企业级OAuth Provider采用Go语言开发具备云原生架构认证鉴权后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
