☰
SUB/WAVE 核心概念解析:为什么 AI 电台是“广播“而不是“播放列表“
2026/10/13 1:45:11 网站建设 项目流程

【免费下载链接】subwave

Personal internet radio: Agentic AI DJ

项目地址:https://gitcode.com/gh_mirrors/su/subwave
点击查看免费下载

SUB/WAVE 是一款自托管的个人 AI 网络电台:所有听众连接同一条 Icecast 直播流,同一时刻听到同一场广播,而由 AI DJ 负责选歌、报时、说天气和在歌曲之间串场。它刻意不是"播放列表"——没有随机乱序,没有跳过按钮,也没有"为你推荐的下首歌"。本文用大白话拆解它的 6 个核心概念,帮你看懂这套 AI 电台的设计哲学。

一条共享广播流:为什么它不是播放列表

播放列表是"你控制的一张歌单",广播是"你加入的一场播出"。SUB/WAVE 属于后者:

  • 只有一条流。所有设备(网页、手机 App、Sonos、车机)都连接到同一个 Icecast mount,每个字节都同步——这正是它成为"电台"而不是"点唱机"的原因。
  • AI 是 DJ,不是曲库。音乐全部来自你自己的曲库(通过 Navidrome 提供),LLM 只负责决定"下一首放什么"并在歌曲间隙开口说话。它不生成音乐,也不代替你的品味。
  • 自托管、可替换。一台 Linux 机器 +docker compose up -d即可开播,LLM 服务商可以在管理界面随时切换,无需重新部署。

这张截图里的细节很有代表性:"Next on the platter: nothing cued – Marlowe decides at the run-out"(下一首尚未确定——由 DJ 在歌曲收尾时决定)。在 SUB/WAVE 里,你看到的永远是"正在播",而不是"接下来要播的 10 首"。

没有 skip 按钮:广播的哲学底线

这是新手最常问的问题:为什么不能跳过一首歌?

答案写在 README.md 里:歌曲播完是唯一自然的过渡点,节奏归 DJ 管,不归听众管。运营者(也就是你自己)可以通过管理 API 跳歌,但普通听众不行。

这个"底线"换来了三样东西:

  1. 真实的播出感——所有人共享同一个时间线,点歌请求按顺序在自然间隙插入,而不是各听各的;
  2. 过渡的工程质量——混音管线(liquidsoap/radio.liq)可以精确地围绕"歌曲结束"安排交叉淡化、串场口播甚至 stem 混音,因为边界是确定的;
  3. 节目结构——没有随时打断,节目表、整点报时、台标口播才能像真正的电台一样准时运转。

AI DJ 如何选歌和串场:不是曲库生成器

AI 在这套电台里扮演的是"人",而不是"搜索引擎":

  • 选歌:默认启用 agent 模式,模型带着一组"发现工具"(按声音搜、按歌词搜、按情绪搜、按能量搜……)在你的曲库里主动搜索,再用一次done提交选择;超时或失败会自动回退到候选池模式,任何情况下都不会断播。
  • 串场:台标、整点报时、天气、新闻、给点歌听众的回应——都由 LLM 写稿、TTS 合成,并在合适的间隙播出,音乐会自动"让路"(ducking)。
  • 人设:最多 24 个 DJ persona,各有独立的声音、语气和幽默度旋钮;一个节目甚至可以有 3 位嘉宾主持互相接话。

左侧的Queue(接下来播什么)、中间的Booth Log(DJ 每一次选歌的完整推理记录)、右侧的Manual Voice(运营者随时插一句话上播)——这就是"广播间"的视角。

DJ 的耳朵:它真的"看懂"了你的曲库

选歌不是玄学。内置的分析器会为每首歌测量 BPM、调性、响度、情绪,甚至歌曲结尾的真实形态(长渐弱还是冷不丁停住),串场长度据此自适应。所有分析结果在/observatory页面聚成一张数据艺术地图:

每颗点是一首歌,颜色是能量值。点进去能看到完整"档案":BPM、调性、情绪、embedding 指纹和向量空间里的近邻。曲库从几百首到几万首都能承载——这就是 AI DJ"品味"的物质基础。

节目表(Shows)与播放列表(Playlists)的区别

很多新手以为它们是二选一,其实它们是两层,Show 可以使用 Playlist:

Playlist(播放列表)Show(节目)
本质一组有名字的歌节目表上的一格播出时段
有固定时间❌✅(这本来就是它的意义)
有 persona / 主题 / 过滤条件❌✅
位置Navidrome / Admin → PlaylistsAdmin → Shows、Schedule

一句话判断法:"固定时段、固定人设的节目"用 Show;"随处可取的一组歌"用 Playlist;"这一小时只播这些歌"= Show 锚定 Playlist 并打开 strict 模式。24×7 的节目网格让深夜档安静、通勤档提气,每格都能指定自己的 persona、情绪和技能——这是"广播"才有的时间结构。详细对比见 docs/concepts.md。

用大白话点歌 + 为什么坚持自托管

听众可以说"放点更上头的"或"来首 Radiohead",DJ 会理解意图、在下一个自然间隙把歌插进队列,并念一句回应。整套广播逻辑(队列、会话、DJ agent、调度器、台标)集中在 controller/src/broadcast/,选歌与曲库交互在 controller/src/music/,想深入机制可以读 docs/internals/broadcast.md。

而自托管是这一切的前提:

  • 音乐不出你的服务器——曲库、收听记录、点歌历史全在自己手里;
  • LLM 想换就换(Ollama、OpenAI、Anthropic、Google、DeepSeek 等),每日 token 预算超限后会"降级":少说话,但音乐不停;
  • 部署文档在 DEPLOY.md,从零到开播大致是:
curl -fsSL https://cli.getsubwave.com | sh # 安装并启动 subwave setup # 连接 Navidrome 曲库 + LLM

小结:一句话记住 SUB/WAVE

播放列表是"我控制什么",SUB/WAVE 是"我加入什么"。

一条共享流、一个有性格的 AI DJ、一张 24×7 的节目表、一座你完全自持的服务器——这就是"广播"而不是"播放列表"的全部含义。📻

【免费下载链接】subwave

Personal internet radio: Agentic AI DJ

项目地址:https://gitcode.com/gh_mirrors/su/subwave
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询