全能音乐结构分析工具 自动识别节奏节拍和 段落
All-In-One是一款音乐结构分析工具,可自动识别音乐速度、节拍、小节线、段落边界及标签。工具提供命令行和Python API,支持结果可视化和声音化,适用于音乐研究和应用开发。基于机器学习模型,具有快速处理、多格式支持等特点,并提供详细使用说明和高级研究功能。
该软件包提供了用于音乐结构分析的模型,可以预测:
目录
访问 PyTorch 并为您的系统安装适当版本。
allin1
自动安装。pip install ninja # 推荐,非必需 git clone https://github.com/SHI-Labs/NATTEN cd NATTEN make
pip install git+https://github.com/CPJKU/madmom # 直接从 GitHub 安装最新版 madmom pip install allin1 # 安装此软件包
Ubuntu:
sudo apt install ffmpeg
macOS:
brew install ffmpeg
分析音频文件:
allin1 your_audio_file1.wav your_audio_file2.mp3
结果默认保存在 ./struct
目录下:
./struct └── your_audio_file1.json └── your_audio_file2.json
分析结果将以 JSON 格式保存:
{ "path": "/path/to/your_audio_file.wav", "bpm": 100, "beats": [ 0.33, 0.75, 1.14, ... ], "downbeats": [ 0.33, 1.94, 3.53, ... ], "beat_positions": [ 1, 2, 3, 4, 1, 2, 3, 4, 1, ... ], "segments": [ { "start": 0.0, "end": 0.33, "label": "start" }, { "start": 0.33, "end": 13.13, "label": "intro" }, { "start": 13.13, "end": 37.53, "label": "chorus" }, { "start": 37.53, "end": 51.53, "label": "verse" }, ... ] }
所有可用选项如下:
$ allin1 -h 用法: allin1 [-h] [-o OUT_DIR] [-v] [--viz-dir VIZ_DIR] [-s] [--sonif-dir SONIF_DIR] [-a] [-e] [-m MODEL] [-d DEVICE] [-k] [--demix-dir DEMIX_DIR] [--spec-dir SPEC_DIR] paths [paths ...] 位置参数: paths 音轨路径 选项: -h, --help 显示此帮助信息并退出 -o OUT_DIR, --out-dir OUT_DIR 存储分析结果的目录路径(默认:./struct) -v, --visualize 保存可视化结果(默认:False) --viz-dir VIZ_DIR 提供 -v 选项时保存可视化结果的目录(默认:./viz) -s, --sonify 保存声音化结果(默认:False) --sonif-dir SONIF_DIR 提供 -s 选项时保存声音化结果的目录(默认:./sonif) -a, --activ 保存来自 sigmoid 和 softmax 的帧级原始激活(默认:False) -e, --embed 保存帧级嵌入(默认:False) -m MODEL, --model MODEL 使用的预训练模型名称(默认:harmonix-all) -d DEVICE, --device DEVICE 使用的设备(默认:如果可用则为 cuda,否则为 cpu) -k, --keep-byproducts 保留分离的音频文件和频谱图(默认:False) --demix-dir DEMIX_DIR 存储分离音轨的目录路径(默认:./demix) --spec-dir SPEC_DIR 存储频谱图的目录路径(默认:./spec)
可用功能:
analyze()
分析提供的音频文件并返回分析结果。
import allin1 # 你可以分析单个文件: result = allin1.analyze('your_audio_file.wav') # 或多个文件: results = allin1.analyze(['your_audio_file1.wav', 'your_audio_file2.mp3'])
结果是一个包含以下内容的数据类实例:
AnalysisResult( path='/path/to/your_audio_file.wav', bpm=100, beats=[0.33, 0.75, 1.14, ...], beat_positions=[1, 2, 3, 4, 1, 2, 3, 4, 1, ...], downbeats=[0.33, 1.94, 3.53, ...], segments=[ Segment(start=0.0, end=0.33, label='start'), Segment(start=0.33, end=13.13, label='intro'), Segment(start=13.13, end=37.53, label='chorus'), Segment(start=37.53, end=51.53, label='verse'), Segment(start=51.53, end=64.34, label='verse'), Segment(start=64.34, end=89.93, label='chorus'), Segment(start=89.93, end=105.93, label='bridge'), Segment(start=105.93, end=134.74, label='chorus'), Segment(start=134.74, end=153.95, label='chorus'), Segment(start=153.95, end=154.67, label='end'), ]),
与命令行界面不同,默认情况下不会将结果保存到磁盘。你可以按以下方式保存结果:
result = allin1.analyze( 'your_audio_file.wav', out_dir='./struct', )
paths
: Union[PathLike, List[PathLike]]
要分析的音频文件的路径列表或单个路径。
out_dir
: PathLike
(可选)
保存分析结果的目录路径。默认情况下,结果不会被保存。
visualize
: Union[bool, PathLike]
(可选)
是否可视化分析结果。如果提供路径,可视化结果将保存在该目录中 。默认为False。如果为True,可视化结果将保存在'./viz'中。
sonify
: Union[bool, PathLike]
(可选)
是否将分析结果转换为音频。如果提供路径,音频化结果将保存在该目录中。默认为False。如果为True,音频化结果将保存在'./sonif'中。
model
: str
(可选)
用于分析的预训练模型名称。默认为'harmonix-all'。请参阅文档了解可用的模型。
device
: str
(可选)
用于计算的设备。默认为'cuda'(如果可用),否则为'cpu'。
include_activations
: bool
(可选)
是否在分析结果中包含激活信息。
include_embeddings
: bool
(可选)
是否在分析结果中包含嵌入信息。
demix_dir
: PathLike
(可选)
保存源分离音频的目录路径。默认为'./demix'。
spec_dir
: PathLike
(可选)
保存频谱图的目录路径。默认为'./spec'。
keep_byproducts
: bool
(可选)
是否保留源分离音频和频谱图。默认为False。
multiprocess
: bool
(可选)
是否使用多进程提取频谱图。默认为True。
Union[AnalysisResult, List[AnalysisResult]]
load_result()
从磁盘加载分析结果。
result = allin1.load_result('./struct/24k_Magic.json')
visualize()
可视化分析结果。
fig = allin1.visualize(result) fig.show()
result
: Union[AnalysisResult, List[AnalysisResult]]
要可视化的分析结果列表或单个分析结果。
out_dir
: PathLike
(可选)
保存可视化结果的目录路径。默认情况下,可视化结果不会被保存。
Union[Figure, List[Figure]]
包含可视化结果的图形列表或单个图形。Figure
是matplotlib.pyplot
中的一个类。sonify()
将分析结果转换为音频。 它会将节拍和强拍的节拍器点击声,以及段落边界的事件声音混合到原始音频文件中。
y, sr = allin1.sonify(result) # y: 形状为(channels=2, samples)的音频化结果 # sr: 采样率(=44100)
result
: Union[AnalysisResult, List[AnalysisResult]]
out_dir
: PathLike
(可选)Union[Tuple[NDArray, float], List[Tuple[NDArray, float]]]
此软件包提供了一个简单的可视化(-v
或 --visualize
)和声音化(-s
或 --sonify
)功能来展示分析结果。
allin1 -v -s 您的音频文件.wav
默认情况下,可视化结果将保存在 ./viz
目录中:
./viz └── 您的音频文件.pdf
声音化结果将默认保存在 ./sonif
目录中:
./sonif └── 您的音频文件.sonif.wav
例如,可视化结果如下所示:
您可以在 Hugging Face Space 上尝试。
这些模型在 Harmonix Set 上进行了8折交叉验证训练。 更多详细信息,请参阅 论文。
harmonix-all
:(默认)一个集成模型,平均了在每个折上训练的8个模型的预测结果。harmonix-foldN
:在第N折(0~7)上训练的模型。例如,harmonix-fold0
是在第0折上训练的。默认使用 harmonix-all
模型。要使用不同的模型,请使用 --model
选项:
allin1 --model harmonix-fold0 您的音频文件.wav
使用RTX 4090 GPU和Intel i9-10940X CPU(14核心,28线程,3.30 GHz),
harmonix-all
模型在73秒内处理了10首歌曲(33分钟)。
该软件包为研究人员提供了高级选项,可以提取帧级原始激活值和嵌入向量,无需后处理。这些数据的分辨率为100 FPS,相当于每帧0.01秒。
--activ
选项还会保存来自sigmoid和softmax的帧级原始激活值:
$ allin1 --activ 您的音频文件.wav
您可以在 .npz
文件中找到激活值:
./struct └── 您的音频文件1.json └── 您的音频文件1.activ.npz
在Python中加载激活值:
>>> import numpy as np >>> activ = np.load('./struct/您的音频文件1.activ.npz') >>> activ.files ['beat', 'downbeat', 'segment', 'label'] >>> beat_activations = activ['beat'] >>> downbeat_activations = activ['downbeat'] >>> segment_boundary_activations = activ['segment'] >>> segment_label_activations = activ['label']
激活值的详细信息如下:
beat
:来自sigmoid层的用于节拍跟踪的原始激活值(形状:[时间步]
)downbeat
:来自sigmoid层的用于强拍跟踪的原始激活值(形状:[时间步]
)segment
:来自sigmoid层的用于段落边界检测的原始激活值(形状:[时间步]
)label
:来自softmax层的用于段落标签分类的原始激活值(形状:[标签类别=10, 时间步]
)您可以如下访问标签名称:
>>> allin1.HARMONIX_LABELS ['start', 'end', 'intro', 'outro', 'break', 'bridge', 'inst', 'solo', 'verse', 'chorus']
该软件包还提供了从模型中提取原始嵌入向量的选项。
$ allin1 --embed 您的音频文件.wav
您可以在 .npy
文件中找到嵌入向量:
./struct └── 您的音频文件1.json └── 您的音频文件1.embed.npy
在Python中加载嵌入向量:
>>> import numpy as np >>> embed = np.load('您的音频文件1.embed.npy')
每个模型为每个时间步的每个源分离音轨嵌入,
resulting in embeddings shaped as [stems=4, time_steps, embedding_size=24]
:
使用 --embed
选项和 harmonix-all
集成模型会堆叠嵌入向量,
保存形状为 [stems=4, time_steps, embedding_size=24, models=8]
的向量。
Python API allin1.analyze()
提供了与CLI相同的选项:
>>> allin1.analyze( paths='您的音频文件.wav', include_activations=True, include_embeddings=True, ) AnalysisResult( path='/path/to/您的音频文件.wav', bpm=100, beats=[...], downbeats=[...], segments=[...], activations={ 'beat': array(...), 'downbeat': array(...), 'segment': array(...), 'label': array(...) }, embeddings=array(...), )
由于解码器的差异,MP3文件可能会有轻微的偏移差异。 我建议您首先使用FFmpeg将音频文件转换为WAV格式(如下所示), 并在所有数据处理流程中使用WAV文件。
ffmpeg -i 您的音频文件.mp3 您的音频文件.wav
在这个软件包中,音频文件是使用 Demucs 读取的。 据我所知,Demucs 在读取MP3文件之前会使用FFmpeg将其转换为WAV。 然而,使用不同的MP3解码器可能会产生不同的偏移。 我观察到大约20~40毫秒的变化,这对于需要精确计时的任务(如节拍跟踪)来说是有问题的, 而传统的容忍度仅为70毫秒。 因此,我建议将所有数据处理的输入标准化为WAV格式, 确保解码的一致性。
请参考 TRAINING.md。
如果您在研究中使用了此软件包,请引用以下论文:
@inproceedings{taejun2023allinone, title={基于分离音频的邻域注意力机制的一体化节奏和功能结构分析}, author={Kim, Taejun and Nam, Juhan}, booktitle={IEEE音频和声学信号处理应用研讨会(WASPAA)}, year={2023} }
最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号