radio-dj

3个月前发布 75 00

radio-dj 是一个 Go 二进制文件(约 9 MB),可运行一个完整的电台。它会从你的音乐库中挑选曲目,AI DJ 会在歌曲之间进行讲解——曲目介绍、时间播报、实时天气、带有网络搜索的趣味知识,以及现场点歌祝福——并广播标准的 Icecast MP3 流,任何播放器都可以收听。

所在地:
美国
收录时间:
2026-08-07
radio-djradio-dj

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日志与点歌列表三面板。

radio-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_KEYLLM API密钥(任何OpenAI兼容端点)sk-… / ollama本地无需设置
RDJ_LIBRARY音乐文件夹绝对路径~/Music/library
RDJ_LOCATION用于天气/时间播报的地理位置“La Paz” / “Shanghai”
RDJ_VOICE_CMDTTS合成命令模板edge-tts –voice zh-CN-XiaoxiaoNeural –text {text} –write-media {out}
RDJ_ENCODER音频编码器(可选)libmp3lame / aac_at

服务化与访问

  • radio-dj serve: 启动交互式向导,配置写入 ~/.radio-dj/config.json
  • radio-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的混合体,无法替代真人主持的情感临场感。建议将其定位为“自动化背景声景生成器”,而非“虚拟主持人”——当听众期待的是陪伴感而非完美播报时,适度的机械感反而成为风格标识。

相关导航