Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dusk Radio 日落电台

懂你品味的私人AI音乐电台

Dusk Radio 是一款基于 FastAPI + 原生前端的本地 AI 情绪电台。用户通过自然语言对话告诉 DJ 当下的心情或想听的音乐类型,AI 自动从本地曲库中选曲播放,打造沉浸式的私人电台体验。

TRAE AI 创造力大赛参赛作品。


功能特性

  • AI 对话选曲 — 自然语言交互,AI DJ 根据心情、场景、偏好智能推荐
  • 多模型切换 — 支持 DeepSeek / MIMO Token Plan / MIMO Normal 三种 LLM Provider
  • 三层意图路由 — 快速指令(正则匹配)→ 元数据过滤(风格/情绪关键词)→ LLM 推理
  • 本地音乐管理 — 自动扫描本地 MP3 文件,提取 ID3 元数据与封面
  • 播放队列 — QQ 音乐风格播放列表,支持列表循环 / 单曲循环 / 随机播放 / 顺序播放
  • WebSocket 实时控制 — 播放、暂停、切歌、进度拖拽实时同步
  • 智能音箱空闲界面 — 时间问候、日期显示、模拟天气,Pixelify Sans 点阵时钟
  • Three.js 流体背景 — GLSL Simplex 噪声 + FBM 分形噪声,6 光源动态渐变
  • 毛玻璃卡片backdrop-filter 模糊底层流体动画,空闲态高度透明显现
  • 音频律动可视化 — Web Audio API + Canvas 2D,封面两侧示波器波形
  • 聊天历史持久化 — SQLite 存储对话记录,刷新页面不丢失

技术栈

层级 技术
后端框架 Python 3.13 + FastAPI
数据库 SQLite(WAL 模式)
LLM 客户端 OpenAI SDK(兼容 DeepSeek / MIMO)
前端 原生 HTML / CSS / JS
3D 背景 Three.js + GLSL 着色器
音频分析 Web Audio API(AnalyserNode)
实时通信 WebSocket
CDN 依赖 Tailwind CSS、Google Fonts、Font Awesome 6.5.1

快速启动

1. 安装后端依赖

cd backend
python -m venv venv
.\venv\Scripts\activate   # Windows PowerShell
pip install -r requirements.txt

2. 配置 API Key

复制模板并填入你的 API Key:

cd backend
cp .env.example .env

编辑 .env,填入至少一个 Provider 的 Key:

DEEPSEEK_API_KEY=sk-xxxxxxxx
MIMO_TOKEN_API_KEY=tp-xxxxxxxx
MIMO_NORMAL_API_KEY=sk-xxxxxxxx

3. 启动服务

cd backend
python -m uvicorn app.main:app --port 8000

4. 访问页面

打开浏览器访问 http://localhost:8000


项目结构

Dusk-Radio/
├── backend/
│   ├── app/
│   │   ├── main.py            # FastAPI 入口:REST + WebSocket + 静态文件
│   │   ├── config.py          # 配置管理
│   │   ├── database.py        # SQLite 初始化
│   │   ├── router.py          # 三层意图路由
│   │   ├── llm_client.py      # LLM 客户端(超时/重试/JSON解析)
│   │   ├── prompt_engine.py   # DJ 系统提示词
│   │   ├── context_builder.py # 上下文组装 + 会话历史
│   │   ├── music_scanner.py   # 音乐扫描入库
│   │   ├── utils.py           # MP3 元数据提取
│   │   └── exceptions.py      # 统一错误处理
│   ├── data/
│   │   ├── config.json        # LLM Provider 配置
│   │   └── user/              # 用户品味档案
│   ├── music/                 # 本地音乐文件夹(放 MP3)
│   ├── requirements.txt
│   └── .env.example           # API Key 模板
│
├── frontend/
│   ├── index.html             # 主页面
│   ├── settings.html          # 设置页面
│   ├── css/style.css          # 深色日落风样式
│   ├── js/
│   │   ├── api.js             # REST API 封装
│   │   ├── ws.js              # WebSocket 连接管理
│   │   ├── player.js          # 播放器控制
│   │   ├── chat.js            # 对话渲染
│   │   ├── queue.js           # 队列管理
│   │   ├── app.js             # 入口:模块初始化 + 状态恢复
│   │   ├── fluid-background.js    # Three.js 流体背景
│   │   └── audio-visualizer.js    # 音频律动可视化
│   └── assets/
│       └── default-cover.jpg  # 默认封面
│
├── CLAUDE.md                  # 项目开发规范
├── LICENSE                    # MIT License
└── README.md

配置说明

config.json

非敏感配置,控制 LLM Provider 切换和服务器参数:

{
  "llm": {
    "provider": "deepseek",
    "providers": {
      "deepseek": { "base_url": "...", "model": "deepseek-chat" },
      "mimo_token": { "base_url": "...", "model": "mimo-v2.5-pro" },
      "mimo_normal": { "base_url": "...", "model": "mimo-v2.5-pro" }
    }
  },
  "music_path": "music",
  "server": { "host": "0.0.0.0", "port": 8000 }
}

.env

敏感配置,存储 API Key,不提交 Git。支持的环境变量:

  • DEEPSEEK_API_KEY
  • MIMO_TOKEN_API_KEY
  • MIMO_NORMAL_API_KEY

License

MIT

About

Dusk Radio 日落电台 —— 懂你品味的私人AI音乐电台

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages