基于深度学习的音乐风格分类系统
功能介绍
本系统为 Python + Vue 前后端分离的音乐平台,结合 CNN + LSTM 混合深度学习模型 完成 8 类音乐风格分类,并提供完整的音乐浏览与互动业务。
- 音乐风格分类:8 类风格(经典老歌、网络歌曲、国语、说唱、国风、流行、嘻哈、古音),基于 Mel 频谱图 + Bi-LSTM 混合模型
- 音乐库管理:歌曲、歌手、地区、风格分类的增删改查(管理后台 + REST API)
- 用户端门户 :首页推荐、歌曲/歌手/歌单浏览、在线音频播放(MP3)、MV 视频、评论与收藏
- 个性化推荐:基于用户收藏与播放记录的协同过滤推荐
- 热榜统计:喜欢榜、热歌榜、点歌榜、收藏榜 Top 10
- 管理后台:Django Admin + SimpleUI,支持富文本详情与媒体文件上传(音频/视频分字段、扩展名校验)
- 接口文档:DRF 标准 CRUD + Swagger 在线文档
目录结构
python-deeper-study-music/
├── 项目说明.md # 本文件
├── 运行步骤必看/ # 分平台运行指南
│ ├── mac.md
│ └── window.md
│
├── mc_server/ # Django 后端
│ ├── mac_run.sh # macOS/Linux 启动脚本
│ ├── window_run.bat # Windows 启动脚本
│ ├── manage.py
│ ├── requirements.txt # Python 依赖
│ ├── sql.sql # MySQL 初始化脚本(与当前库数据同步)
│ ├── sql_backups/ # sql.sql 自动备份目录
│ ├── scripts/
│ │ ├── download_mp3s.py # 从酷我 API 批量下载 MP3 并更新库与 sql.sql
│ │ └── sync_sql_from_db.py # 将本地 MySQL 全量导出到 sql.sql
│ ├── venv/ # Python 虚拟环境(运行后生成)
│ ├── library/ # 项目配置(settings、urls、wsgi)
│ ├── app/ # 业务应用(models、views、serializer、validators)
│ ├── DjangoUeditor/ # 富文本编辑器
│ ├── simpleui/ # 后台 UI 主题
│ ├── static/ # 静态资源
│ ├── templates/ # 后台模板
│ └── media/ # 上传的音频/图片/视频(运行时)
│ └── article_file/
│ └── 2026/06/17/ # 当前 12 首歌曲 MP3 存放目录
│
├── music_class_vue/ # Vue 2 前端
│ ├── package.json
│ ├── vue.config.js # 开发代理配置
│ ├── public/ # 静态入口
│ └── src/
│ ├── components/web/ # 用户端页面(首页、歌曲、歌手、歌单等)
│ ├── router/ # 路由
│ ├── store/ # 状态管理
│ └── assets/ # 前端资源
│
└── 文章/ # 文章文档
└── 第三章配图/ # 数据处理、模型结构、实验结果配图
媒体文件说明
歌曲表 app_movie 中音频与视频分两个字段存储 ,前端分别绑定 <audio> 与 <video>:
| 字段 | 含义 | 前端 | 允许格式 |
|---|---|---|---|
fim_url |
音频文件 | <audio> 播放器 |
mp3、wav、ogg、m4a、flac |
fim_mv |
视频 MV | <video> 播放器 |
mp4、webm、mov、avi、mkv |
后台上传与 API 写入时会校验扩展名,禁止把 mp4 传到音频字段、或把 mp3 传到视频字段。
当前预置 12 首歌曲的 MP3 路径示例:article_file/2026/06/17/1_APT.mp3 ... 12_李白.mp3;MV 默认使用 article_file/demo.mp4。
注意: 导入
sql.sql后须保留mc_server/media/目录(尤其article_file/2026/06/17/下的 mp3),否则页面能打开但音频无法播放。
维护脚本
在 mc_server 目录下执行(需已配置 MySQL 且虚拟环境可用):
bash
cd mc_server
export PYTHONPATH="$(pwd)"
# 从酷我 API 按歌名搜索并下载全部歌曲 MP3,同步更新数据库与 sql.sql
./venv/bin/python scripts/download_mp3s.py
# 将本地 MySQL 当前数据全量导出到 sql.sql(会先备份到 sql_backups/)
./venv/bin/python scripts/sync_sql_from_db.py
下载脚本依赖外网访问 kw-api.cenguigui.cn,仅供本地开发/演示使用。
运行环境
| 项目 | 要求 |
|---|---|
| 操作系统 | macOS / Linux / Windows |
| Python | 3.10(推荐;兼容 3.8--3.10,Django 3.0 不支持 3.11+) |
| Node.js | 16 LTS(推荐;14+ 可用,17+ 需 OpenSSL 兼容参数) |
| MySQL | 5.7+ 或 8.0 |
| 数据库名 | sql(字符集 utf8mb4) |
后端主要依赖:Django 3.0、Django REST Framework、SimpleUI、PyMySQL、NumPy、Pillow
前端主要依赖:Vue 2、Element UI、Vue Router、Vuex、Axios、ECharts
服务端口(本地开发):
| 服务 | 端口 |
|---|---|
| Django 后端 / 管理后台 / Swagger | 8001 |
| Vue 用户端 | 8888 |
默认账号:
| 用途 | 账号 | 密码 |
|---|---|---|
| 管理后台 | admin | admin |
| 前台测试用户 | cs1 / cs4 / liyuanfang 等 | 见 sql.sql 中 app_userweb |
数据库与同步
- 首次部署 :创建库
sql后导入mc_server/sql.sql(须加--default-character-set=utf8mb4,详见运行步骤必看/)。 - 迁移记录 :当前
sql.sql已包含app.0002_movie_media_validators(媒体文件类型校验),导入后一般无需 再执行migrate。 - 数据变更后 :运行
scripts/sync_sql_from_db.py,使sql.sql与本地 MySQL 保持一致。 - 登录态 :前端会在启动时校验
localStorage中的用户是否仍存在于数据库;若库被重置,需重新登录。
常见问题
| 问题 | 解决方式 |
|---|---|
| 歌曲页音频无法播放 | 确认 media/article_file/2026/06/17/ 下 mp3 存在,且 fim_url 指向正确路径 |
/up_id/ 外键报错 |
多为本地缓存了已删除的用户 id,刷新页面或清除浏览器 localStorage 后重新登录 |
| 后台上传音频被拒绝 | 检查是否为 mp3 等音频格式,勿上传 mp4 到「音频文件」字段 |
| 导入 sql 后中文乱码 | 使用 mysql ... --default-character-set=utf8mb4 sql < mc_server/sql.sql 重新导入 |
详细安装与启动步骤见 运行步骤必看/ 目录。