
radio-dj 是一个约8.7 MB的Go二进制程序,可将本地音乐文件夹转化为全天候AI DJ网络电台。它自动编排曲目、生成实时语音解说(含天气/知识/点歌),并通过标准Icecast协议输出MP3/AAC流。整个系统无需Docker,内存占用50–60 MB(含依赖),可在Raspberry Pi等低配设备运行。支持GLM、OpenAI、Ollama等任意OpenAI兼容LLM,TTS通过edge-tts实现多语言语音合成。提供macOS launchd/Linux systemd服务化部署,以及PWA安装能力,界面采用新粗野主义设计风格,含磁带动画、历史记录、DJ日志与点歌列表三面板。

核心架构:LLM导演+技能文本+音频流水线
radio-dj 的智能并非端到端黑盒,而是由三个可干预层构成:
- LLM导演层:每个曲目组(tanda)由一次结构化LLM调用规划,决定播放顺序与解说内容。输入包含曲目元数据、当前时间、地理位置、点歌队列;输出为JSON格式的播报脚本与播放指令
- 技能文本层:所有节目片段(如开场白、天气模板、点歌话术)存储于
~/.radio-dj/skills/目录的纯文本文件中。编辑即生效,无需重编译。支持条件变量注入(如{artist}、{listener_name}),实现动态内容生成 - 音频处理层:TTS语音与音乐流经sidechaincompress实时混音,DJ讲话时自动降低背景音乐音量(类似硬件混音台闪避效果)。编码器默认macOS用aac_at、Linux用libmp3lame,可通过
RDJ_ENCODER环境变量切换,流挂载点随之变化(/stream.aac 或 /stream.mp3)
这种分层设计使“AI DJ”行为高度透明可控:不满意某类解说?直接改skills文件;想换知识源?调整LLM prompt中的搜索策略;需适配方言?替换TTS命令即可。
部署流程与关键配置项
一键安装(推荐)
curl -fsSL https://github.com/johncrash64/radio-dj/raw/master/install.sh | bash
脚本自动检测OS、安装icecast/ffmpeg/edge-tts、下载预编译二进制或从源码构建。
手动构建
- macOS:
brew install icecast ffmpeg && pipx install edge-tts - Linux:
sudo apt-get install icecast2 ffmpeg && pipx install edge-tts - 通用:
git clone ... && cd radio-dj && go build -o radio-dj .
核心环境变量
| 变量 | 说明 | 示例值 |
|---|---|---|
| ZAI_API_KEY | LLM API密钥(任何OpenAI兼容端点) | sk-… / ollama本地无需设置 |
| RDJ_LIBRARY | 音乐文件夹绝对路径 | ~/Music/library |
| RDJ_LOCATION | 用于天气/时间播报的地理位置 | “La Paz” / “Shanghai” |
| RDJ_VOICE_CMD | TTS合成命令模板 | edge-tts –voice zh-CN-XiaoxiaoNeural –text {text} –write-media {out} |
| RDJ_ENCODER | 音频编码器(可选) | libmp3lame / aac_at |
服务化与访问
radio-dj serve: 启动交互式向导,配置写入~/.radio-dj/config.jsonradio-dj install: 注册为系统服务(macOS launchd / Linux systemd/OpenRC),重启自启- Web界面:
http://localhost:7710 - 音频流:
http://localhost:7702/stream.aac(或/stream.mp3)
PWA安装
- Chrome/Edge: 地址栏安装图标
- macOS Safari: 文件→添加到Dock
- iOS Safari: 共享→添加到主屏幕
应用壳离线可用,但直播流需网络连接。
使用边界与实操注意事项
尽管设计轻量,仍需注意以下限制:
- 音乐库要求:仅支持本地文件夹,不支持云存储/流媒体订阅;文件需含有效ID3标签,否则曲目介绍可能缺失信息
- LLM成本控制:每首歌曲间触发一次LLM调用,高频播报场景下token消耗显著;建议使用便宜模型(如GLM-4-Flash)处理常规解说,仅特殊时段用高端模型
- TTS质量依赖:edge-tts为微软Azure TTS免费接口,音质良好但非顶级;追求专业播音级需替换为付费TTS API并修改
RDJ_VOICE_CMD - 网络搜索风险:趣味知识功能依赖LLM联网能力,若提供商禁用搜索或返回错误结果,可能导致播报中断;可改用Wikipedia API作为稳定备选
- 并发点歌处理:网页/API点歌无速率限制,恶意刷单可能污染播报队列;生产环境建议前置反爬或审核机制
- 编码器兼容性:部分老旧播放器不支持AAC流,如遇问题强制切换
RDJ_ENCODER=libmp3lame输出MP3 - 版权合规:工具本身不提供音乐,用户须确保所用曲目具备公开广播授权;私人收藏仅限个人收听,不得用于商业电台
对于个人爱好者,这是零成本搭建个性化电台的最简方案;对社区/小型组织,可作为低成本内容分发渠道。但其“AI DJ”本质是规则+LLM的混合体,无法替代真人主持的情感临场感。建议将其定位为“自动化背景声景生成器”,而非“虚拟主持人”——当听众期待的是陪伴感而非完美播报时,适度的机械感反而成为风格标识。
相关导航


Sora 视频去水印

在线视频压缩

Lofi Radio Web

TubeTrim

SUB/WAVE

GlobalRadio






