一个整合了 BPM、调性(Key)、效价(Valence) 分析的 Python 工具。
| 分析项 | 说明 | 算法来源 |
|---|---|---|
| BPM | 节拍速度检测 | librosa beat tracking |
| Key | 调性分析 (如 C major, A minor) | Krumhansl-Schmuckler 调性模板匹配 |
| Valence | 情感效价 (0-1, 越高越积极) | vibenet 神经网络预测 |
# 进入项目目录
cd musicanalyzer
# 安装依赖
pip install -r requirements.txt- librosa: 音频分析库,用于 BPM 和调性检测
- vibenet: 音乐情感预测库,用于 Valence 分析
- numpy: 数值计算
- soundfile: 音频文件读取
# 分析单个文件
python music_analyzer.py song.mp3
# 详细输出
python music_analyzer.py song.mp3 -v
# JSON 格式输出
python music_analyzer.py song.mp3 --json
# 保存结果到文件
python music_analyzer.py song.mp3 -o result.json
# 批量分析
python music_analyzer.py *.mp3==================================================
文件: example.mp3
时长: 180.5s
==================================================
BPM: 128.0
调性: A minor (置信度: 0.85)
效价 (Valence): 0.65
能量 (Energy): 0.78
可舞性 (Danceability): 0.72
{
"file": "example.mp3",
"duration_seconds": 180.5,
"sample_rate": 44100,
"bpm": 128.0,
"key": {
"key": 9,
"mode": 0,
"key_name": "A minor",
"confidence": 0.85
},
"valence": {
"valence": 0.65,
"energy": 0.78,
"danceability": 0.72
}
}from music_analyzer import analyze_music
# 分析音乐文件
result = analyze_music("song.mp3", verbose=True)
print(f"BPM: {result['bpm']}")
print(f"Key: {result['key']['key_name']}")
print(f"Valence: {result['valence'].get('valence', 'N/A')}")- MP3
- WAV
- FLAC
- OGG
- 其他 librosa/soundfile 支持的格式
musicanalyzer/
├── music_analyzer.py # 主程序 (Python)
├── requirements.txt # Python 依赖
├── README.md # 本文档
├── libkeyfinder-2.2.8/ # C++ 调性分析库 (参考)
└── mixxx-analyzer-main/ # Rust BPM 分析库 (参考)
使用 librosa 的 beat tracking 算法,基于 onset strength envelope 和动态规划。
- 计算 Constant-Q Chromagram
- 使用 Krumhansl-Schmuckler 调性模板进行相关性匹配
- 返回最佳匹配的调性和置信度
使用 vibenet 神经网络模型,直接从原始音频预测情感属性:
- Valence: 情感效价 (0=消极, 1=积极)
- Energy: 能量感
- Danceability: 可舞性
- Acousticness: 原声感
- Instrumentalness: 器乐性
本项目整合了以下开源项目:
- libkeyfinder: GPL-3.0
- mixxx-analyzer: GPL-2.0
- vibenet: MIT
- libkeyfinder - 调性检测库
- mixxx-analyzer - Mixxx 音频分析
- vibenet - 音乐情感预测
- librosa - Python 音频分析库