Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Music Analyzer - 音乐三维分析工具

一个整合了 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

JSON 输出示例

{
  "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
  }
}

Python API

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 分析库 (参考)

技术说明

BPM 检测

使用 librosa 的 beat tracking 算法,基于 onset strength envelope 和动态规划。

调性分析

  1. 计算 Constant-Q Chromagram
  2. 使用 Krumhansl-Schmuckler 调性模板进行相关性匹配
  3. 返回最佳匹配的调性和置信度

Valence 预测

使用 vibenet 神经网络模型,直接从原始音频预测情感属性:

  • Valence: 情感效价 (0=消极, 1=积极)
  • Energy: 能量感
  • Danceability: 可舞性
  • Acousticness: 原声感
  • Instrumentalness: 器乐性

许可证

本项目整合了以下开源项目:

  • libkeyfinder: GPL-3.0
  • mixxx-analyzer: GPL-2.0
  • vibenet: MIT

参考

About

Music Analyzer

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages