logo
0
0
WeChat Login

音频节奏分析工具

这是一个专业的音频节奏分析和卡点制作工具,使用现代化的uv包管理器,能够精确检测音乐节拍并生成卡点时间戳。

✨ 功能特性

  • 🎵 自动BPM检测 - 精确计算每分钟节拍数
  • 🥁 节拍定位 - 准确识别每个节拍的时间位置
  • 🎯 智能卡点 - 基于强度分析筛选最佳卡点位置
  • 📊 可视化分析 - 生成音频波形和节拍强度图表
  • 💾 多格式导出 - 支持JSON、CSV、TXT格式
  • 🖥️ 现代CLI - 友好的命令行界面和丰富的选项

🚀 快速开始

环境要求

  • Python 3.9-3.12
  • uv包管理器

安装和运行

# 克隆项目
git clone <repository-url>
cd music-rhythm-analysis

# 安装依赖
uv sync

# 基本分析
uv run rhythm-analyzer analyze your_audio.mp3

# 生成可视化图表
uv run rhythm-analyzer analyze your_audio.mp3 --visualize

# 查找最佳卡点
uv run rhythm-analyzer find-best-beats your_audio.mp3 --threshold 0.6

📋 命令详解

基本分析命令

uv run rhythm-analyzer analyze [OPTIONS] AUDIO_FILE

选项说明:

  • --output, -o - 输出文件路径(默认:beat_data.json)
  • --format, -f - 输出格式:json/csv/txt(默认:json)
  • --visualize, -v - 生成可视化图表
  • --viz-path - 可视化图表保存路径(默认:beat_analysis.png)
  • --time-format - 时间戳格式:seconds/mm:ss/frames(默认:seconds)
  • --show-beats - 显示前N个节拍(0=全部)

最佳卡点查找

uv run rhythm-analyzer find-best-beats [OPTIONS] AUDIO_FILE

选项说明:

  • --threshold, -t - 节拍强度阈值 0.0-1.0(默认:0.5)
  • --min-interval, -i - 最小节拍间隔秒数(默认:0.1)

🎯 使用示例

基础用法

# 分析音频并生成JSON数据
uv run rhythm-analyzer analyze song.mp3

# 导出CSV格式数据
uv run rhythm-analyzer analyze song.mp3 --format csv --output beats.csv

# 生成可视化图表
uv run rhythm-analyzer analyze song.mp3 --visualize --viz-path song_beats.png

高级用法

# 使用分秒时间格式显示前20个节拍
uv run rhythm-analyzer analyze song.mp3 --time-format mm:ss --show-beats 20

# 高强度阈值筛选最佳卡点
uv run rhythm-analyzer find-best-beats song.mp3 --threshold 0.7 --min-interval 0.15

# 分析结果导出为文本格式
uv run rhythm-analyzer analyze song.mp3 --format txt --output beat_report.txt

📊 输出格式

JSON格式

{
  "audio_file": "song.mp3",
  "bpm": 128.5,
  "total_beats": 320,
  "beat_times": [0.5, 1.0, 1.5, ...],
  "beat_timestamps": ["0.500s", "1.000s", "1.500s", ...],
  "downbeats": [0.5, 2.5, 4.5, ...],
  "beat_strengths": [[0.5, 31.76], [1.0, 28.12], ...]
}

CSV格式

BeatTime (seconds)TimestampStrength
10.5000.500s31.760
21.0001.000s28.120

TXT格式

音频文件: song.mp3
BPM: 128.50
总节拍数: 320

节拍时间戳:
  拍 1: 0.500s
  拍 2: 1.000s
  ...

🔧 API使用

from rhythm_analyzer import AudioRhythmAnalyzer

# 创建分析器
analyzer = AudioRhythmAnalyzer("your_audio.mp3")

# 加载和分析
analyzer.load_audio()
bpm = analyzer.detect_tempo()

# 获取节拍时间戳
timestamps = analyzer.get_beat_timestamps("seconds")
downbeats = analyzer.get_downbeats()

# 分析节拍强度
beat_strengths = analyzer.analyze_beat_strength()

# 导出数据
analyzer.export_beats("output.json", "json")

# 生成可视化
analyzer.visualize_beats("analysis.png")

🎵 支持的音频格式

  • MP3 - 最常用的音频格式
  • WAV - 无损音频格式
  • FLAC - 无损压缩格式
  • OGG - 开源音频格式
  • M4A - Apple音频格式

🔬 技术原理

本工具基于librosa库实现专业音频分析:

  1. 音频预处理 - 使用librosa加载和重采样音频
  2. onset检测 - 检测音频中的瞬态事件
  3. 节奏跟踪 - 通过自相关算法计算BPM
  4. 节拍对齐 - 使用动态规划优化节拍位置
  5. 强度分析 - 计算每个节拍位置的音频能量
  6. 智能筛选 - 基于强度和间隔筛选最佳卡点

⚠️ 注意事项

音频质量

  • 建议使用高质量音频文件(比特率≥128kbps)
  • 避免严重压缩或失真的音频
  • 单声道音频效果最佳

算法限制

  • 复杂节奏音乐可能遗漏部分节拍
  • 变拍子音乐检测准确性可能降低
  • 即兴演奏或自由节奏音乐效果有限

参数调优

  • 对于快节奏音乐,可降低--threshold
  • 对于慢节奏音乐,可增加--min-interval
  • 可视化功能需要matplotlib支持

🛠️ 开发环境

# 安装开发依赖
uv sync --group dev

# 代码格式化
uv run black .
uv run ruff check .

# 运行测试
uv run pytest

📁 项目结构

music-rhythm-analysis/
├── pyproject.toml      # uv项目配置和依赖管理
├── cli_uv.py          # 命令行界面(uv版本)
├── rhythm_analyzer.py # 核心分析引擎
├── demo.py            # 使用示例和演示
├── requirements.txt   # pip依赖文件(兼容性)
├── .gitignore         # Git忽略文件
├── README.md          # 项目文档
└── IFLOW.md           # iFlow上下文文件

🎯 应用场景

  • 视频卡点 - 为短视频、Vlog添加音乐节拍特效
  • 音乐制作 - 辅助编曲和节奏设计
  • 舞蹈编排 - 根据节拍设计舞蹈动作
  • 游戏开发 - 音乐游戏节拍同步
  • 体育训练 - 节奏训练和配速指导

🤝 贡献指南

欢迎提交Issue和Pull Request来改进这个工具!

📄 许可证

MIT License - 详见LICENSE文件

About

No description, topics, or website provided.
Language
Python99.7%
Shell0.3%