madmom
madmom 是一个专为音乐信息检索(MIR)打造的 Python 音频信号处理库。它致力于解决从数字化音频中自动提取音乐特征的核心难题,如节拍追踪、音符起始点检测及和弦识别等,为音乐分析提供可靠的算法支持。
这款工具特别适合音乐科技领域的研究人员、音频算法开发者以及高校师生使用。作为奥地利林茨约翰内斯开普勒大学计算感知系与奥地利人工智能研究所的内部核心组件,madmom 不仅提供了多种经典 MIR 算法的参考实现,还内置了经过训练的高质量模型,让用户能快速复现学术成果或构建自己的音乐分析应用。
其技术亮点在于将复杂的信号处理流程封装为易用的 Python 模块,同时兼顾学术严谨性与工程实用性。项目采用双重许可模式:源代码基于宽松的 BSD 协议开放,而预训练模型和数据文件则遵循知识共享非商业许可,既促进了学术交流,也规范了商业使用场景。无论是需要快速验证想法的研究者,还是希望集成音频分析功能的开发者,madmom 都能通过简洁的接口和详尽的文档,帮助用户高效处理音频数据,探索音乐背后的数字规律。
使用场景
一位音乐科技公司的算法工程师正在开发一款自动扒谱应用,需要从大量现场录音中精准提取鼓点节奏和音符起始时间。
没有 madmom 时
- 工程师必须手动复现复杂的音乐信息检索(MIR)学术论文算法,耗时数周且极易出错。
- 传统的通用信号处理库缺乏针对音乐特性的预训练模型,导致在嘈杂环境下节拍检测准确率极低。
- 每次调整参数都需要重新编写底层音频特征提取代码,开发迭代周期漫长,难以快速验证想法。
- 缺乏统一的框架整合不同算法,导致代码库臃肿且难以维护,团队协作成本高昂。
使用 madmom 后
- 直接调用 madmom 内置的参考实现和预训练模型,几分钟内即可部署高精度的节拍与音符起始点检测功能。
- 利用其专为音乐优化的深层神经网络,即使在背景噪音较大的现场录音中也能稳定输出可靠的节奏分析结果。
- 通过简洁的 Python API 快速调整处理流程,将原本数天的特征工程缩短为几行代码,大幅提升实验效率。
- 依托其模块化的架构轻松组合不同 MIR 任务,代码结构清晰规范,显著降低了后续维护和扩展的难度。
madmom 将晦涩的音乐声学研究成果转化为开箱即用的生产力,让开发者能专注于应用创新而非重复造轮子。
运行环境要求
- Linux
- macOS
未说明
未说明

快速开始
====== madmom
Madmom 是一个用 Python 编写的音频信号处理库,主要专注于音乐信息检索(MIR)任务。
该库由奥地利林茨约翰内斯·开普勒大学计算感知系(http://www.cp.jku.at)和维也纳奥地利人工智能研究所(OFAI,http://www.ofai.at)内部使用。
可能的缩写包括:
- Madmom 分析音乐家的数字化音乐
- 主要面向音频/以音乐为主的模块
它包含一些音乐信息检索算法的参考实现,请参阅 References_ 部分。
文档
该软件包的文档可以在在线找到 http://madmom.readthedocs.org
许可证
该软件包有两种许可证,一种用于源代码,另一种用于模型/数据文件。
源代码
除非另有说明,所有源代码文件均采用 BSD 许可证发布。详情请参阅 LICENSE <LICENSE>_ 文件。
模型和数据文件
除非另有说明,所有模型和数据文件均采用 知识共享署名-非商业性使用-相同方式共享 4.0 <http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode>_ 许可证进行分发。
如果您希望在商业产品中包含这些文件(或其变体、修改版)或利用它们的技术,请联系 Gerhard Widmer <http://www.cp.jku.at/people/widmer/>_。
安装
请勿尝试从 GitHub 提供的 .zip 文件进行安装。建议您按照以下说明,通过软件包(仅需使用时)或源代码(计划开发时)进行安装。无论选择哪种方式,请确保已安装所有先决条件。
先决条件
要安装 madmom 软件包,您必须拥有 Python 2.7 或 Python 3.5 及以上版本,并安装以下软件包:
numpy <http://www.numpy.org>_scipy <http://www.scipy.org>_cython <http://www.cython.org>_mido <https://github.com/olemb/mido>_
为了测试您的安装、处理实时音频输入或提升 FFT 性能,还需额外安装以下软件包:
pytest <https://www.pytest.org/>_pyaudio <http://people.csail.mit.edu/hubert/pyaudio/>_pyfftw <https://github.com/pyFFTW/pyFFTW/>_
如果您需要支持除 .wav 格式之外的其他音频文件,且采样率为 44.1kHz、位深度为 16 位,则需要 ffmpeg(Ubuntu Linux 上的 avconv 存在一些解码错误,因此不建议使用!)。
请参阅 requirements.txt <requirements.txt>_ 文件,了解所需的最低版本,并确保这些模块均为最新版本,否则可能导致意外错误或计算结果不准确!
通过软件包安装
此处提供的说明适用于仅需安装软件包的情况,例如运行附带的程序或将部分功能用于自己的项目。如果您打算对 madmom 软件包进行任何更改,请遵循下一节中的步骤。
最简单的安装方式是通过 PyPI (Python 包索引) <https://pypi.python.org/pypi>_ 使用 pip 命令进行安装:
pip install madmom
这将包含最新的代码和训练好的模型,并自动安装所有依赖项。
您可能需要更高的权限(使用 su 或 sudo)才能将软件包、模型文件和脚本全局安装。或者,您也可以通过添加 --user 参数将其本地安装(即仅供您使用):
pip install --user madmom
这也会将可执行程序安装到一个公共位置(如 /usr/local/bin),通常该路径已经包含在您的 $PATH 中。如果您是本地安装,程序可能会被复制到一个未包含在 $PATH 中的文件夹(例如,在 Mac OS X 上可能是 ~/Library/Python/2.7/bin,而在 Ubuntu Linux 上则是 ~/.local/bin,pip 会提示您)。因此,您需要显式调用这些程序,或者将它们的安装路径添加到您的 $PATH 环境变量中:
export PATH='path/to/scripts':$PATH
通过源代码安装
如果您计划以开发者身份使用该软件包,请克隆 Git 仓库:
git clone --recursive https://github.com/CPJKU/madmom.git
由于预训练的模型/数据文件并未包含在该仓库中,而是作为 Git 子模块添加,因此您必须递归地克隆仓库。这等同于以下步骤:
git clone https://github.com/CPJKU/madmom.git
cd madmom
git submodule update --init --remote
然后您可以直接以开发模式安装软件包:
python setup.py develop --user
要运行附带的测试:
python setup.py pytest
现有安装的升级
要升级软件包,请使用与安装时相同的机制(pip 或源代码)。如果您想从软件包切换到源代码,请先卸载软件包。
升级软件包
只需通过 pip 升级软件包即可:
pip install --upgrade madmom [--user]
如果其中一些提供的程序或模型发生了变化(请参阅 CHANGELOG),您应该先卸载软件包,再重新安装:
pip uninstall madmom
pip install madmom [--user]
从源代码升级
只需拉取最新的源代码:
git pull
要更新子模块中包含的模型:
git submodule update
如果任何 .pyx 或 .pxd 文件发生了变化,您需要使用 Cython 重新编译这些模块:
python setup.py build_ext --inplace
软件包结构
该软件包结构非常简单,分为以下几个文件夹:
/bin <bin>_
该文件夹包含示例程序(即可执行算法)
/docs <docs>_
软件包文档
/madmom <madmom>_
实际的 Python 软件包
/madmom/audio <madmom/audio>_
低级特征(例如音频文件处理、STFT)
/madmom/evaluation <madmom/evaluation>_
评估代码
/madmom/features <madmom/features>_
高级特征(例如起始点、节拍)
/madmom/ml <madmom/ml>_
机器学习相关内容(例如 RNN、HMM)
/madmom/models <../../../madmom_models>_
预训练的模型/数据文件(详见许可证部分)
/madmom/utils <madmom/utils>_
其他工具(例如 MIDI 和通用文件处理)
/tests <tests>_
测试
可执行程序
该软件包在 /bin <bin>_ 文件夹中包含可执行程序。如果您已安装软件包,这些程序已被复制到一个公共位置。
所有脚本均可在不同模式下运行:在 single 文件模式下,可处理单个音频文件并将输出写入 STDOUT 或指定的输出文件:
DBNBeatTracker single [-o OUTFILE] INFILE
如果需要处理多个音频文件,也可以以batch模式运行脚本,将输出写入带有指定后缀的文件中:
DBNBeatTracker batch [-o OUTPUT_DIR] [-s OUTPUT_SUFFIX] FILES
如果没有指定输出目录,程序会将输出文件保存到与音频文件相同的目录中。
某些程序还可以在online模式下运行,即对实时音频信号进行处理。这需要安装pyaudio <http://people.csail.mit.edu/hubert/pyaudio/>_:
DBNBeatTracker online [-o OUTFILE] [INFILE]
使用pickle模式可以保存所使用的参数,以便精确地重现实验。
请注意,程序本身以及各个模式都提供了帮助信息:
DBNBeatTracker -h
DBNBeatTracker single -h
DBNBeatTracker batch -h
DBNBeatTracker online -h
DBNBeatTracker pickle -h
这些命令会分别显示不同的帮助信息。
附加资源
邮件列表
请使用邮件列表 <https://groups.google.com/d/forum/madmom-users>_ 与开发者及其他用户取得联系。
维基
维基页面地址为:https://github.com/CPJKU/madmom/wiki
常见问题解答
常见问题解答请参见:https://github.com/CPJKU/madmom/wiki/FAQ
引用
如果您在工作中使用了madmom,请考虑对其进行引用:
.. code-block:: latex
@inproceedings{madmom, Title = {{madmom: 一个全新的 Python 音频与音乐信号处理库}}, Author = {B{"o}ck, Sebastian 和 Korzeniowski, Filip 和 Schl{"u}ter, Jan 和 Krebs, Florian 和 Widmer, Gerhard}, Booktitle = {第24届 ACM 国际多媒体大会论文集}, Month = {10}, Year = {2016}, Pages = {1174--1178}, Address = {阿姆斯特丹,荷兰}, Doi = {10.1145/2964284.2973795} }
参考文献
.. [1] Florian Eyben、Sebastian Böck、Björn Schuller 和 Alex Graves, 基于双向长短时记忆神经网络的通用节拍检测, 第11届国际音乐信息检索会议(ISMIR)论文集,2010年。 .. [2] Sebastian Böck 和 Markus Schedl, 利用上下文感知神经网络增强节拍跟踪, 第14届数字音频效果会议(DAFx)论文集,2011年。 .. [3] Sebastian Böck 和 Markus Schedl, 利用循环神经网络进行复音钢琴音符转录, 第37届国际声学、语音与信号处理会议(ICASSP)论文集,2012年。 .. [4] Sebastian Böck、Andreas Arzt、Florian Krebs 和 Markus Schedl, 利用循环神经网络实现在线实时节拍检测, 第15届数字音频效果会议(DAFx)论文集,2012年。 .. [5] Sebastian Böck、Florian Krebs 和 Markus Schedl, 评估节拍检测方法的在线能力, 第13届国际音乐信息检索会议(ISMIR)论文集,2012年。 .. [6] Sebastian Böck 和 Gerhard Widmer, 用于节拍检测的最大值滤波器颤音抑制, 第16届数字音频效果会议(DAFx)论文集,2013年。 .. [7] Sebastian Böck 和 Gerhard Widmer, 基于局部群延迟的颤音和震音抑制用于节拍检测, 第13届国际音乐信息检索会议(ISMIR)论文集,2013年。 .. [8] Florian Krebs、Sebastian Böck 和 Gerhard Widmer, 用于音乐音频中节拍和强拍跟踪的节奏模式建模, 第14届国际音乐信息检索会议(ISMIR)论文集,2013年。 .. [9] Sebastian Böck、Jan Schlüter 和 Gerhard Widmer, 利用循环神经网络改进节拍检测中的峰值提取, 第6届机器学习与音乐国际研讨会(MML)论文集,2013年。 .. [10] Sebastian Böck、Florian Krebs 和 Gerhard Widmer, 一种考虑异质音乐风格的多模型节拍跟踪方法, 第15届国际音乐信息检索会议(ISMIR)论文集,2014年。 .. [11] Filip Korzeniowski、Sebastian Böck 和 Gerhard Widmer, 从节拍激活函数中概率性提取节拍位置, 第15届国际音乐信息检索会议(ISMIR)论文集,2014年。 .. [12] Sebastian Böck、Florian Krebs 和 Gerhard Widmer, 基于循环神经网络和共振梳状滤波器的准确节拍速度估计, 第16届国际音乐信息检索会议(ISMIR)论文集,2015年。 .. [13] Florian Krebs、Sebastian Böck 和 Gerhard Widmer, 用于联合节拍和拍号跟踪的有效状态空间模型, 第16届国际音乐信息检索会议(ISMIR)论文集,2015年。 .. [14] Sebastian Böck、Florian Krebs 和 Gerhard Widmer, 利用循环神经网络进行联合节拍和强拍跟踪, 第17届国际音乐信息检索会议(ISMIR)论文集,2016年。 .. [15] Filip Korzeniowski 和 Gerhard Widmer, 用于和弦识别的特征学习:深度色度提取器, 第17届国际音乐信息检索会议(ISMIR)论文集,2016年。 .. [16] Florian Krebs、Sebastian Böck、Matthias Dorfer 和 Gerhard Widmer, 利用节拍同步特征和循环网络进行强拍跟踪, 第17届国际音乐信息检索会议(ISMIR)论文集,2016年。 .. [17] Filip Korzeniowski 和 Gerhard Widmer, 用于音乐和弦识别的全卷积深度听觉模型, IEEE 国际信号处理机器学习研讨会(MLSP)论文集,2016年。 .. [18] Filip Korzeniowski 和 Gerhard Widmer, 不分流派的调性分类,基于卷积神经网络, 第19届国际音乐信息检索会议(ISMIR)论文集,2018年。 .. [19] Rainer Kelz、Sebastian Böck 和 Gerhard Widmer, 深度复音 ADSR 钢琴音符转录, 第44届国际声学、语音与信号处理会议(ICASSP)论文集,2019年。
致谢
本项目得到了欧盟委员会通过GiantSteps 项目 <http://www.giantsteps-project.eu>(FP7 资助协议编号 610591)和Phenicx 项目 <http://phenicx.upf.edu>(FP7 资助协议编号 601166)的支持,以及奥地利科学基金会(FWF)项目 Z159 的资助。
版本历史
v0.16.12018/11/14v0.162018/11/13v0.15.12017/07/07v0.152017/04/25v0.14.12016/08/01v0.142016/07/28v0.13.22016/06/09v0.13.12016/03/14v0.132016/03/07v0.12.12016/01/22常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。